基于MDS的波士顿房价数据集降维

2024-06-12 06:04

本文主要是介绍基于MDS的波士顿房价数据集降维,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 作者介绍
  • 2. 多维尺度分析(Multi-Dimensional Scaling, MDS)介绍
    • 2.1 MDS介绍
    • 2.2 MDS的类别
      • 2.2.1度量MDS
      • 2.2.2非度量MDS
    • 2.3 目标函数
    • 2.4 MDS降维计算步骤
      • 2.4.1计算流程
      • 2.4.2 算法示例
  • 3.实验过程
    • 3.1数据集介绍
    • 3.2算法思路
    • 3.3算法评价
    • 3.4与其他降维算法相比
      • 3.4.1主成分分析
      • 3.4.2 t-SNE
    • 3.5代码实现
      • 3.5.1二维可视化代码
      • 3.5.2三维可视化代码
    • 3.6实验结果
  • 4. 参考连接


1. 作者介绍

黄雨浩,男,西安工程大学电子信息学院,2023级研究生
研究方向:机器视觉与人工智能
电子邮件:1986506577@qq.com

孙思伟,男,西安工程大学电子信息学院,2023级研究生,张宏伟人工智能课题组
研究方向:深度强化学习与人工智能
电子邮件:sunsiwei0109@163.com

2. 多维尺度分析(Multi-Dimensional Scaling, MDS)介绍

2.1 MDS介绍

多维尺度分析(Multi-Dimensional Scaling, MDS)是一种统计学方法,用于将复杂、高维的相似性或距离数据转化为直观的、低维的可视化表示。它是通过保持原始数据中对象间距离关系的近似,将数据映射到一个较低维度的空间中,使得这些对象在新空间中的位置关系能够反映出原始数据中的相似性或距离。本质上是通过优化目标函数来实现高维到低维的映射

2.2 MDS的类别

2.2.1度量MDS

具体来说假设原始数据中的相似性或距离度量满足三角不等式,即对于任何三个对象i、j、k,有 dik ≤dij+djk。在这种情况下,MDS可以通过经典线性代数方法(如奇异值分解SVD)来求解。

2.2.2非度量MDS

不假设原始数据满足度量性质,而是通过秩次排序来表示对象间的相对相似性或距离。非度量MDS通常采用迭代优化算法(如SMACOF算法)来逼近最优解。

2.3 目标函数

目标函数通常包含两个部分:一是保持原始数据中对象间距离的近似度(stress函数),二是映射到低维空间的约束条件。具体来说,MDS试图找到一个低维空间中的点阵P,使得P中各点之间的距离与原始数据中对应对象间的相似性或距离度量尽可能接近。优化过程通常涉及最小化以下形式的目标函数:

在这里插入图片描述
dij表示原始数据中对象i和j之间的相似性或距离度量,pi,pj分别为它们在低维空间中的坐标向量。通过最小化stress函数S§,MDS力求在低维空间中保持原始数据的距离结构。

2.4 MDS降维计算步骤

2.4.1计算流程

在这里插入图片描述

2.4.2 算法示例

假设有5种水果:苹果(A)、香蕉(B)、橙子(C)、葡萄(D)和菠萝(E)。对这些水果进行了甜度(Sweetness)、酸度(Sourness)和多汁程度(Juiciness)的评分。
在这里插入图片描述
第一步:计算距离
使用欧式距离计算

A-B: 4.69
A-C: 3.74
A-D: 2.45
A-E: 3.32
B-C: 6.56
B-D: 3.32
B-E: 6.56
C-D: 5.29
C-E: 2.45
D-E: 5.29

在这里插入图片描述
第二步:构建距离矩阵
在这里插入图片描述
第三步:中心化距离矩阵
计算中心化矩阵H,数据点的数量n为5

在这里插入图片描述
第五步:计算特征值和特征向量
在这里插入图片描述
第六步:计算降维后坐标
构建特征向量矩阵V和特征值矩阵Λ的平方根;然后,我们计算降维后的坐标:新坐标 = A * A^(1/2)
在这里插入图片描述
最后完成降维

在这里插入图片描述

3.实验过程

3.1数据集介绍

Boston数据集是一个经典的回归分析数据集,包含了美国波士顿地区的房价数据以及相关的属性信息。该数据集共有506个样本,14个属性,其中包括13个特征变量和1个目标变量(房价中位数)。

序号英文中文
1CRIM per capita crime rate by town城镇人均犯罪率
2ZN proportion of residential land zoned for lots over 25,000 sq.ft.住宅用地所占比例,25000英尺
3INDUS proportion of non-retail business acres per town城镇中非商业用地的所占比例
4CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)CHAS查尔斯河虚拟变量,用于回归分析
5NOX nitric oxides concentration (parts per 10 million)环保指标
6RM average number of rooms per dwelling每栋住宅的房间数
7AGE proportion of owner-occupied units built prior to 19401940年以前建成的自住单位的比例
8DIS weighted distances to five Boston employment centres距离五个波士顿就业中心的加权距离
9RAD index of accessibility to radial highways距离高速公路的便利指数
10TAX full-value property-tax rate per $10,000每一万美元的不动产税率
11PTRATIO pupil-teacher ratio by town城镇中教师学生比例
12B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town城镇中黑人的比例
13LSTAT % lower status of the population地区有多少百分比的房东属于低收入阶层
14MEDV Median value of owner-occupied homes in $1000’s自住房屋房价的中位数
表1 数据集包含属性

3.2算法思路

在这里插入图片描述

图3 MDS降维步骤

3.3算法评价

优点:
直观可视化:MDS能够将高维数据映射到二维或三维空间,便于直观地观察数据分布和结构。
保持距离关系:MDS在低维空间中尽可能保留了原始数据的距离结构,有助于发现潜在的聚类或模式。
适用范围广:无论是度量还是非度量数据,MDS都能找到合适的处理方法。
缺点:
对距离矩阵依赖性强:MDS结果的可靠性很大程度上取决于输入的距离矩阵的质量。若距离矩阵计算不当或含有噪声,可能导致映射结果失真。
计算复杂度较高:对于大规模数据集,尤其是非度量MDS,优化过程可能较为耗时。
解释性有限:虽然MDS能够生成可视化结果,但对于映射到低维空间后的具体坐标值,其物理或实际意义可能不明确。

3.4与其他降维算法相比

3.4.1主成分分析

与PCA对比:主成分分析(PCA)也是一种降维方法,但其目标是最大化数据方差的保留,而非保持距离关系。PCA更适合于线性相关性强的数据集,而MDS对非线性关系的处理能力更强。

3.4.2 t-SNE

与t-SNE对比:t-distributed Stochastic Neighbor Embedding(t-SNE)也是一种流行的降维可视化方法,其特点是擅长揭示高维数据的局部结构。相比MDS,t-SNE对局部聚类效果更好,但全局结构可能不如MDS清晰。

3.5代码实现

3.5.1二维可视化代码

import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import MDS
import matplotlib.pyplot as plt# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target# 对特征进行标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用MDS进行降维
mds = MDS(n_components=2)  # 设置要降维到的目标维度为2
X_mds = mds.fit_transform(X_scaled)# 可视化降维前的数据
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, cmap='viridis')
plt.title('Original Data')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')# 可视化降维后的数据
plt.subplot(1, 2, 2)
plt.scatter(X_mds[:, 0], X_mds[:, 1], c=y, cmap='viridis')
plt.title('MDS Reduced Data')
plt.xlabel('Component 1')
plt.ylabel('Component 2')plt.tight_layout()
plt.show()

3.5.2三维可视化代码

# 可视化降维后的数据
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X_mds[:, 0], X_mds[:, 1], X_mds[:, 2], c=y, cmap='viridis')
ax.set_title('MDS Reduced Data (3D)')
ax.set_xlabel('Component 1')
ax.set_ylabel('Component 2')
ax.set_zlabel('Component 3')

3.6实验结果

在这里插入图片描述

图4 MDS降维降为二维结果

在这里插入图片描述

图5 MDS降维降为三维结果

4. 参考连接

  1. 深度探索:机器学习多维尺度(MDS)算法原理及其应用
  2. 多尺度变换(Multidimensional Scaling ,MDS)详解

这篇关于基于MDS的波士顿房价数据集降维的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053388

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批