物联网数据处理-iris数据集(鸢尾花)

物联网数据处理-iris数据集(鸢尾花)

大作业题目

读入 iris.txt 里的鸢尾花数据,不考虑标签信息(标签是用来监督学习用的,这里是无监督),利用 PCA(减少噪声,利于可视化) 将数据从 4 维降成 2 维

之后,进行以下操作

  1. 利用不同的方式构建邻接矩阵(高斯核,k-临近等)(将数据转成关系图,可以告诉我们那些点距离近,那些点距离远。就是用数据表示点的关系)(便于使用图论方法),利用谱聚类(基于图论的特征算法,本质把数据转换成一个图,根据图来分类)算法进行聚类,分别与正确标签进行对比,求出各自的准确度(聚类结果后与正确标签对比)或错误率。(可以衡量算法是否能很好的)

  2. 依据已知标签(监督学习),对生成的 2 维数据上,利用决策树方法进行判别,随机生成 3 个新的 4维数据,对其类别进行判定。(验证降维后的二维数据是否保留了有用的信息,有没有破坏原有信息)

  3. 依据已知标签(监督学习),对生成的 2 维数据进行加上 ridge 约束后的线性回归,求出各自的参数。(为了弥补降维数据的不足,提高分类性能)(提高泛化能力)

  4. 删除某些异常点能够使 3 中的数据的回归方差减少最多,设计这种删除规则,对这个原则进行解释和必要的推导,并编程实现。(注:尽量少地删除点)

基础知识

机器学习基本概念——特征、标签

特征是输入变量,即简单线性回归中的变量,如鸢尾花数据集中的花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以将这四个特征指定为。

标签是我们要预测的事物,即简单线性回归中的变量,如鸢尾花数据集中的鸢尾花的种类。

所以本次我们要研究的鸢尾花数据集包含了四个特征,一个标签。

0.PAC降维:(减少噪声,利于可视化)

pac也叫主成分分析。啥是主成分,简单来说就是pac自己瞎琢磨弄出来的主成分,比如iris数据集有4个变量(特性),对这4个变量进行分析,找到有相关性的,把他们组合处理变成2个变量,这搞出来的2个变量就叫主成分1和主成分2。

PCA 是一种降维技术,它可以帮助我们从高维数据中提取最重要的信息

为什么要降维呢🤔

​ 因为高维数据有大量的特性(变量),对机器学习计算有一定的阻碍。其中有一些变量具有一定的相关性,使用pac将特征处理为一组新的变量(比如这道题由4维变成2维),达到降低为原始数据的维度,减少阻碍。

降维的好处

将高维数据转换为低维数据,减少计算复杂度和存储需求

利用图形化手段(如散点图)进行数据可视化,从而帮助研究人员更好地理解数据的结构和分布。

PCA通过去除低方差的主成分,可以有效地减少数据中的噪声,使得数据更加平滑和有意义

缺点:
- 线性假设:PCA假设数据的变化是线性的,这可能不适用于一些非线性的数据。
- 特征解释性差:降维后的主成分可能很难与原始特征直接关联,特征的可解释性较差。
-对异常值敏感:PCA对异常值敏感,异常值可能会影响到计算出的主成分,从而影响降维效果。

怎么降维的(步骤)

  1. 数据预处理

    标准化:将数据标准化到均值为0,方差为1。这一步是为了确保不同特征之间的尺度一致,避免某些特征因为尺度大而主导降维结果。

    # 数据标准化
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

计算协方差矩阵

计算特征值和特征向量

选择主成分

投影数据

# PCA 降维到 2 维
pca_2d = PCA(n_components=2)
X_pca_2d = pca_2d.fit_transform(X_scaled)
  1. pca_2d = PCA(n_components=2)

    • PCA: 这是 Python 中的 sklearn.decomposition 模块中的一个类,用于执行主成分分析(PCA)。

    • n_components=2: 这个参数指定了要保留的主成分的数量。在这里,我们指定保留两个主成分,即降维到二维空间。

  2. X_pca_2d = pca_2d.fit_transform(X_scaled)

    • fit_transform: 这是PCA类的一个方法,它同时执行了两个步骤:
      • fit: 计算数据的协方差矩阵,并找到主成分(特征向量)。
      • transform: 将原始数据投影到新的主成分空间中。

降维后的图像分析

不同颜色的点代表不同种类的鸢尾花。每一个点都代表一个花的样本。

Iris-setosa

分离情况:Iris-setosa 类型的点与其他两类明显分离,说明 PCA 很好地将 Iris-setosa 与其他两类区分开来。

Iris-versicolor 和 Iris-virginica

分离情况:这两类之间有一定的重叠,尤其是在图的中间部分,说明这两类之间的区分度较低。image-20241214010600466

从pac降成1维的图像就更明显,绿色和橙色明显重叠,说明区分度较低。image-20241214013029077

1.数据集介绍

数据集的内容

150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,所以iris数据集是一个150行5列的二维表

image-20241214014454661image-20241214015022847

数据集的特性

样本量有限:鸢尾花数据集只包含150个样本,这在某些复杂的机器学习问题中可能不足够。在大规模的实际应用中,可能需要更多 的样本才能训练出准确的模型。

特征数量较少:鸢尾花数据集只有四个特征,这在某些问题中可能不足以捕获样本的复杂性和变化。在某些情况下,需要更多的特征 来描述样本,以提高模型的准确度。

特征相关性:鸢尾花数据集中的四个特征往往具有一定的相关性,这可能影响某些机器学习算法的效果。相关的特征可能导致冗余信 息,从而影响算法的性能。对于一些模型来说,可能需要通过降维或特征选择来解决这个问题。

2.邻接矩阵

什么是邻接矩阵

因为图没有顺序存储结构,所以借助二维数组来表示元素间的关系,即数组表示法(邻接矩阵)。

使用邻接矩阵的好处,为什么要使用邻接矩阵

优点:

直观、简单、好理解
方便检查任意一对顶点间是否存在边
方便找任一顶点的所有“邻接点”(有边直接相连的顶点)
方便计算任一顶点的“度”。

缺点:

不便于增加和删除顶点
浪费空间——存稀疏图(点很多而边很少)有大量无效元素
对稠密图(特别是完全图)还是很合算的
浪费时间——统计稀疏图中一共有多少条边

三种邻接矩阵的准确率对比

分析总结

  • K最近邻(KNN) 在这个实验中表现明显优于其他两种亲和矩阵(高斯核和全连接)。这可能是因为 KNN 更适合数据的结构或分布,能够更好地捕捉局部邻域信息,从而提升分类或聚类的准确性。
  • 高斯核全连接 可能未能很好地适应数据的特征,因此准确性较低。这可能与核函数参数选择或数据分布不匹配有关。
image-20241214011942968

1.高斯核

图像分析

image-20241216002820426

颜色条

  • 颜色条(右侧的图例)显示了相似度的范围,从白色(较低的相似度)到深蓝色(较高的相似度)。这说明矩阵中的值表示样本间的相似度或距离。
  • 核心的蓝色表示较强的相似度(接近 1),而浅色部分表示较低的相似度(接近 0)。

矩阵内容

  • 矩阵中的块状结构:图中的一些行列呈现出明显的方格结构,这通常是相似样本或簇集中样本之间高相似度的反映。这些区域的颜色较深,表示这些样本之间的相似度较高。
  • 对角线:从对角线可以看出,样本与自身的相似度为1(即最高相似度)。矩阵对角线上的值通常为1,表示每个样本与自己的相似度。
  • 块状的浅色区域:这些较浅的区域表示样本之间的相似度较低,可能是不同类别或较远的样本之间的关系。

代码详解

# 高斯核邻接矩阵
gamma = 0.1
affinity_gaussian = rbf_kernel(X_scaled, gamma=gamma)
affinity_gaussian = symmetrize(affinity_gaussian) # 对称化
  1. gamma = 0.1
  • gamma: 这是一个参数,用于控制高斯核的宽度。gamma 值越大,高斯核的宽度越窄,意味着相似度只在非常接近的点之间有效;gamma 值越小,高斯核的宽度越宽,意味着相似度在更远的点之间也有效。

  1. affinity_gaussian = rbf_kernel(X_scaled, gamma=gamma)
  • rbf_kernel: 这是scikit-learn 中的一个函数,用于计算径向基函数(RBF)核,也称为高斯核。

    • X_scaled: 这是经过标准化处理的数据集。
    • gamma=gamma: 这是高斯核的宽度参数。
  1. affinity_gaussian = symmetrize(affinity_gaussian)
  • symmetrize: 这是一个自定义函数或方法,用于对邻接矩阵进行对称化处理。对称化处理的目的是确保邻接矩阵是双向的,即如果节点A与节点B相连,那么节点B也与节点A相连。

什么是高斯核

核心思想是将样本数据进行升维,从而使得原本线性不可分的数据线性可分。那么高斯核函数的核心思想是将每一个样本点映射到一个无穷维的特征空间,从而使得原本线性不可分的数据线性可分。

听起来很抽象,其实很简单,打个比方,把我和姚明用如来神掌都拍死(排成一维),我和姚明都成点了,就很难区分谁是姚明了。但是假设把我和姚明升维成3维的人,那就一眼丁真了,高的一批的就是姚明。开个玩笑。但是话糙理不糙,高斯核就是通过升维将原本线性不可分的数据变成线性可分。包简单的。

使用高斯核的好处

多项式x,明显线性不可分

image-20241214021025105

升维喽,x2 ,用黄线一切就分开了。线性好分了。所以好处就是把线性不可分的东西变成线性可分了。方式是升维,

image-20241214021038861

2.k-最近邻矩阵

# K 最近邻邻接矩阵
k_neighbors = 5 //每个样本的最近邻数量
affinity_knn = kneighbors_graph(X_scaled, n_neighbors=k_neighbors, mode='connectivity').toarray()
affinity_knn = symmetrize(affinity_knn) # 对称化
  1. k_neighbors = 5

k_neighbors: 这是一个整数,表示每个样本的最近邻数量。在这个例子中,k_neighbors = 5,意味着每个样本将与它的5个最近邻节点相连

  1. affinity_knn = kneighbors_graph(X_scaled, n_neighbors=k_neighbors, mode='connectivity').toarray()

kneighbors_graph: 这是scikit-learn中的一个函数,用于构建K最近邻图。

X_scaled: 这是经过标准化处理的数据集。

n_neighbors=k_neighbors: 指定每个样本的最近邻数量,这里为5。

mode='connectivity': 指定邻接矩阵的构建方式。'connectivity' 模式表示邻接矩阵中的值为0或1,1表示两个样本是最近邻,0表示不是。

.toarray(): 将邻接矩阵从稀疏矩阵转换为密集矩阵(即普通的NumPy数组),便于后续处理。

  1. **affinity_knn = symmetrize(affinity_knn)**

symmetrize: 这是一个自定义函数或方法,用于对邻接矩阵进行对称化处理。对称化处理的目的是确保邻接矩阵是双向的,即如果节点A与节点B相连,那么节点B也与节点A相连。

k近邻法的三要素详解

距离度量、k值的选择及分类决策规则

  1. 距离度量
    特征空间中的两个实例点的距离是两个实例点相似程度的反映。K近邻法的特征空间一般是n维实数向量空间R n度量的距离是其他L p范式距离,一般为欧式距离。

2.k值的选择
常用的方法:
(1)从k=1开始,使用检验集估计分类器的误差率。
(2)重复该过程,每次K增值1,允许增加一个近邻。
(3)选取产生最小误差率的K。

注意:
(1)一般k的取值不超过20,上限是n的开方,随着数据集的增大,K的值也要增大。
(2)一般k值选取比较小的数值,并采用交叉验证法选择最优的k值。

说明:

(1)过小的k值模型中,输入样本点会对近邻的训练样本点十分敏感,如果引入了噪声,则会导致预测出错。对噪声的低容忍性会使得模型变得过拟合。
(2)过大的k值模型中,就相当于选择了范围更大的领域内的点作为决策依据,可以降低估计误差。但邻域内其他类别的样本点也会对该输入样本点的预测产生影响。
(3)如果k=N,N为所有样本点,那么KNN模型每次都将会选取训练数据中数量最多的类别作为预测类别,训练数据中的信息将不会被利用。


3 分类决策规则

kNN的分类决策规则就是对输入新样本的邻域内所有样本进行统计数目。

邻域的定义就是,以新输入样本点为中心,离新样本点距离最近的k个点所构成的区域。

图像分析

image-20241216002909368

3.全连接矩阵

什么是全连接

全连接矩阵(Fully Connected Matrix)是指一个矩阵中的每一行和每一列之间都有连接或者关联,并且所有的元素都可能互相影响。

使用全连接的好处

全连接的好处通常体现在其能够充分捕捉数据中各个部分之间的复杂关系,不论是神经网络中的非线性特征学习,还是图论中的高连通性和机器学习中的特征交互。全连接的广泛使用增强了模型的表达能力、适应性和复杂度,但也需要注意其可能带来的计算复杂性和过拟合风险,尤其是在数据量较少或维度较高的情况下

3.决策树

什么是决策树

用于分类和回归的监督学习模型,其通过一系列的条件判断来进行决策。决策树的结构类似于一棵树,包含根节点、分支节点和叶子节点,用来表示一系列决策过程。

优点与缺点

优点:

  1. 易于理解和解释:决策树的可视化图形非常直观,便于理解每一个决策过程。
  2. 无需数据预处理:与一些其他模型相比,决策树对数据的预处理要求较少。例如,它不需要特征缩放或归一化。
  3. 适用于分类和回归问题:决策树不仅能处理分类问题,还能用于回归问题(通过预测数值)。
  4. 能处理缺失值:决策树可以通过一些方法处理缺失值,使得它在一些数据不完整的情况下仍然有效。

缺点:

  1. 容易过拟合:特别是当决策树过深时,容易记住训练集的噪声和细节,导致模型在新数据上的泛化能力差。
  2. 对小变化敏感:决策树模型对训练数据的小变化非常敏感,可能导致结构发生较大变化。
  3. 偏向于选择较多类别的特征:在某些情况下,决策树可能偏向选择具有更多分支的特征,导致模型偏向这些特征。
  4. 计算复杂度高:虽然决策树可以并行构建,但在大规模数据集上,训练时间可能比较长。

怎么实现决策树的原理的

决策树的原理:

  • 根节点(Root Node):开始时,决策树从整个训练数据集出发,并根据某一特征来分裂数据。目标是找到最能区分不同类别的特征。
  • 分裂节点(Decision Node):每次分裂都选择最优特征(通过信息增益、基尼指数或其他标准来衡量),将数据划分成多个子集。每个子集表示一个条件判断的结果。
  • 叶子节点(Leaf Node):当进一步分裂不再有效时,达到叶子节点,叶子节点存储的是类别标签或回归预测值。

通过不断选择特征并分裂数据,决策树构建一个树形结构,从根节点到叶子节点的路径可以表示对输入数据的分类决策。

这个数据集怎么使用的决策树

决策树图像分析

4.ridge约束的线性回归

idge约束的线性回归,也叫岭回归,是在普通线性回归的基础上加了一个“惩罚项”,用来解决过拟合问题。


故事版解读:

假设你是一个侦探,要通过数据找到一个事件发生的原因(比如预测房价)。普通的线性回归,就像把所有的证据线索都拉进来,做出一个完美的预测。但问题来了:
有些线索太弱了,甚至可能是噪音,却也被算进去了,导致模型太过“自信”,只能适用于训练数据,面对新数据却表现很糟糕,这就是过拟合

这时候,Ridge回归登场了!
它像一个调和器,对所有的线索(系数)施加惩罚,尤其是那些“用处不大但影响大的线索”。


Ridge的核心公式:

Ridge回归的目标是找到参数
$$
w
$$
使得以下目标函数最小化:
$$
目标=误差+λ×惩罚项\text{目标} = \text{误差} + \lambda \times \text{惩罚项}目标=误差+λ×惩罚项
$$
具体来说:
$$
目标=∑(yi−y^i)2+λ∑wj2\text{目标} = \sum (y_i - \hat{y}_i)^2 + \lambda \sum w_j2目标=∑(yi−yi)2+λ∑wj2
$$

  • 第一个部分:
    $$
    ∑(yi−y^i)2\sum (y_i - \hat{y}_i)2∑(yi−yi)2
    $$
    ,是普通线性回归中最小化预测误差的部分。

  • 第二个部分:
    $$
    λ∑wj2\lambda \sum w_j^2λ∑wj2
    $$
    ,是Ridge惩罚项,它对所有系数 www 的平方和 进行惩罚。

  • $$
    λ
    $$

    是一个调节器,控制惩罚的强度。

用这个回归方法合适吗

Iris数据集的性质

  • Iris 数据集有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),目标是分类3种不同的鸢尾花(Setosa、Versicolor、Virginica)。
  • 这是一个分类问题,而Ridge回归是回归方法,通常用来预测连续型变量

合适性分析:

  • 不太合适:Iris 数据是一个分类任务,使用 Ridge 回归直接拟合可能效果不佳,因为 Ridge 回归并没有直接考虑类别之间的离散性。对于分类问题,逻辑回归、决策树、SVM或KNN 通常更合适。

实际跑出来的结果

Ridge回归的适用性

虽然 Ridge 回归是为回归任务设计的,但它可以通过一些变通方法应用于分类任务

  • 标签编码:将分类标签(例如 Setosa, Versicolor, Virginica)编码为数值(如 0, 1, 2)。
  • 回归+决策规则:Ridge 回归拟合连续值后,可以根据预测值与标签的接近程度,将样本分类到最接近的类别。

例如:

  • 如果 Ridge 回归的预测输出是 0.1,那么可以认为类别是 0
  • 如果输出是 1.9,则认为类别是 2

由于 Ridge 回归可以很好地平滑地拟合数据的结构,所以它可以在分类任务中表现得“意外地”好。


Iris 数据集的特点

线性可分性:Iris 数据集的三个类别中,特别是 Setosa 类别与其他两类之间具有很好的线性可分性。Ridge 回归是一种线性模型,因此在这种情况下可以很好地拟合数据。

特征简单:Iris 数据集只有4个特征,数据量小(150个样本),这种情况下 Ridge 回归可以有效避免过拟合,同时拟合得很准确。

1.alpha参数

image-20241216003637738

5.删除异常点的方法

定义异常点

逐个删除,看看

找到影响最大的点

重复直到结束

为什么要删除异常点

异常点会对数据造成较大影响

1.孤立森林

原理:

孤立森林算法(Isolation Forest) 是一种高效的无监督异常检测方法。它基于树结构,通过将数据点“孤立”的程度来判断哪些点是异常点


孤立森林的核心思想

  1. 孤立程度:异常点通常更容易被“孤立”,因为它们:
    • 位于数据分布的边缘
    • 与其他数据点距离较远,密度较低
  2. 随机分割:孤立森林通过随机选择特征分割点,将数据不断切分,形成树结构。
    • 正常点:需要更多切分才能被孤立,路径较长
    • 异常点:很快就被孤立,路径较短
  3. 路径长度:数据点从树的根节点到叶节点的路径长度反映其孤立程度。多个树的平均路径长度用于计算异常分数

孤立森林的步骤

  1. 构建森林:生成多棵随机树,每棵树使用随机特征和随机分割点。
  2. 计算路径长度:对于每个数据点,计算其在每棵树中的路径长度。
  3. 异常分数
    • 分数高(路径短):容易被孤立,是异常点。
    • 分数低(路径长):难以被孤立,是正常点。
  4. 判定阈值:根据设定的 contamination 参数(异常点比例)自动判断异常点。

优点

  • 计算高效:时间复杂度为 O(nlog⁡n)O(n \log n)O(nlogn),适合大规模数据。
  • 无需数据分布假设:适用于各种数据集。
  • 适合高维数据:对特征数量较多的数据也表现良好。

2.svm支持向量机

原理:

支持向量机(SVM)*的传统用途是分类任务,而*One-Class SVM是一种无监督学习方法,用于异常点检测。

原理

  • One-Class SVM 学习一个边界,将大部分正常点包围在高维超平面或球体内。
  • 边界外的点被认为是异常点。
  • 根据数据分布和模型参数,确定异常点比例(由 contamination 参数控制)。

决策分数(decision_function

  • 模型对每个数据点计算一个分数,分数越低,数据点越可能是异常点。
  • 根据分数的百分位数(由 contamination 指定)设定阈值,低于该阈值的点被标记为异常点。

3.k-means删除异常点

原理:

K-means 聚类异常点检测
  1. 数据标准化
    • 使用 StandardScaler 对数据进行标准化,使得每个特征的均值为 0,方差为 1。这样可以消除不同特征的量纲影响。
    • 标准化后的数据存储在 X_scaled 中。
  2. K-means 聚类
    • 使用 KMeans 算法将数据分成 n_clusters=3 个簇。这里假设数据集有三个主要的聚类中心。
    • 聚类完成后,labels 保存每个数据点的簇标签,centers 保存每个簇的中心。
  3. 计算距离
    • 对于每个数据点,计算它到其所属簇中心的距离。这是通过 np.linalg.norm 计算欧氏距离实现的。
    • 对于每个数据点,计算它与 所有簇中心 的距离,选择距离最小的簇中心。
  4. 设置异常点阈值
    • 通过设置一个 百分位数(例如 95%),将距离大于该阈值的数据点标记为异常点。
    • threshold 是设置的阈值,等于 距离的第 95 百分位数,距离超过该值的点被认为是异常点。
  5. 异常点标记与删除
    • 根据计算的距离和设置的阈值,判断哪些数据点是异常点(outliers)。
    • X_cleanedy_cleaned 是去除异常点后的数据。

岭回归模型训练

  1. 数据拆分
    • 使用 train_test_split 将清理后的数据分为训练集和测试集,测试集占 30%。
  2. 岭回归模型训练
    • 使用 Ridge 回归模型,alpha=1.0 作为正则化参数进行训练。岭回归的目的是通过惩罚过大的系数,避免过拟合。
  3. 预测与评估
    • 在测试集上进行预测并计算 均方误差(MSE),衡量模型在测试集上的表现。

总结

  • K-means 聚类 检测异常点的思路是通过计算数据点与其所属簇中心的距离,并根据这些距离来判断哪些点可能是异常点。
  • 岭回归 模型在清理异常点后的数据上进行训练,并计算其 均方误差 来评估模型的预测性能。

优点与局限

  • 优点
    • K-means 能有效地识别距离簇中心远的异常点。
    • 数据标准化有助于提高聚类算法的效果。
  • 局限
    • K-means 假设数据有明显的簇结构,对于没有明显簇的异常点检测效果可能不佳。
    • 聚类数目(n_clusters)的选择需要根据数据分布进行调优,错误的选择可能导致检测效果不佳。

效果

image-20241216005604772

image-20241216005637254

image-20241216005653515

具体分析代码

posted @   不愿透露姓名的李组  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 开源的 DeepSeek-R1「GitHub 热点速览」
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
点击右上角即可分享
微信分享提示