基于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

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本