想机器学习实战却不会特征降维?这可不行

特征向量降维常见的几种方法 高纬度特征带来的问题 这里就简单描述下。 通常我们会使用特征训练模型或特征矩阵求相似度。高维的特征带来的计算成本非常大,甚至完不成。同时一般高维的特征都比较稀疏,直接使用高维的特征训练需要样本量很大,难以拟合,模型效果不好。 训练模型时特征的筛选 通常我们训练模型时,会人为挑选特征,控制每类特征维度范围,比如年龄我们使用one-hot的方式表示,分成0-10,10-20...,>10... 阅读详情

 

最近期末需要交的论文有些多,所以更新进度有些慢,为了弥补空白期,以后也会给大家转载一些好文,感谢各位哥哥姐姐一直以来的支持。

如果只对降维的代码部分感兴趣可以直接划至文末。

一直都在研究关于机器学习相关算法的理论,最近准备打算在Kaggle参加些竞赛,但只会一些理论知识是不足以针对给定的数据建立一个比较不错的模型,这其中还包括很多必要的操作,比如缺失值处理、特征工程等等。

今天来说一下特征降维,我们在练习时通常会用sklearn自带的数据集,比如鸢尾花数据集,通常这类数据集是经过处理的,特点就是规模小且完整性强,但对于Kaggle竞赛或者其他领域中给定的数据集一般都是规模偏大且具有很多缺失值。

规模大可分为两方面,一方面是数据多而特征少,另一方面是数据少但特征多。我们都知道数据多对于建模是有好处的,因为数据越多覆盖面就越广,会提高模型的准确率,当然这可能会牺牲一些内存和计算时间。

但是特征多可未必就是一件好的事情,如果将数据集映射至一个空间中,每一个特征就对应一个维度,随着维度的增加,学习器所需的样本的数量通常以指数增加,但通常高维度数据集的样本个数并不满足要求,这样的数据稀疏性也特别高,可能导致模型的准确率偏低,且对内存和计算时间很不友好。

特征降维

对于多特征数据集,我们可以有这么一个设想就是会不会有一些特征之间的相关性很高?比如学习时长和学习成绩之间可能就是正相关,学习时间越长学习成绩也会越高,那么删去其中一个对数据集的影响可能特别微小,其他特征做类似操作,最后剩下的特征两两之间不相关,此操作就叫做降维。

降维是一种针对高维度数据集数据预处理方法,它的基本思想就是保留一些相对重要的特征,除去剩下的特征和数据中的噪声,降维操作可以很大程度节省运行内存和计算时间,让数据处理更加高效。

对数据降维还有以下一系列原因:

  • 使数据集更易使用;

  • 降低很多算法的计算开销;

  • 除去数据中的噪声;

  • 使得结果易懂。

常见的降维方法有主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)和奇异值分解(SVD)。其中PCA和SVD是最常用的两种,本文介绍第一种PCA降维法。

主成分分析

原理及对应操作

主成分分析顾名思义是对主成分进行分析,那么找出主成分应该是key点。PCA的基本思想就是将初始数据集中的n维特征映射至k维上,得到的k维特征就可以被称作主成分,k维不是在n维中挑选出来的,而是以n维特征为基础重构出来的。

PCA会在已知数据的基础上重构坐标轴,它的原理是要最大化保留样本间的方差,两个特征之间方差越大不就代表相关性越差嘛。比如:

  • 第一个新坐标轴就是原始数据中方差最大的方向。

  • 第二个新坐标轴要是与第一个新坐标轴正交的平面中方差最大的方向。

  • 第三个新坐标轴要是与第一、第二新坐标轴正交的平面中方差最大的方向。

  • 第四、第五...依次类推直到第n个新坐标轴(对应n维)。

为了加深这部分理解,以二维平面先举一个例子,二维平面中依据原始数据新建坐标轴如下图:

为了更直观的理解,若将方差换一个说法,那么第一个新坐标轴就是覆盖样本最多的一条(斜向右上),第二个新坐标轴需要与第一新坐标轴正交且覆盖样本最多(斜向左上),依次类推。

覆盖的样本多少并不是以坐标轴穿过多少样本点评判的,而是通过样本点垂直映射至该轴的个数有多少,具体如下图:

回到之前的n维重构坐标轴,由于顺序是依据方差的大小依次排序的,所以越到后面方差越小,而方差越小代表特征之间相关性越强,那么这类特征就可以删去,只保留前k个坐标轴(对应k维),这就相当于保留了含有数据集绝大部分方差的特征,而除去方差几乎为0的特征。

那么问题来了,二维、三维可以根据样本点的分布画出重构坐标轴,但是更高维人的大脑是不接受的,我们不得不通过计算的方式求得特征之间的方差,进而得到这些新坐标轴的的方向。

具体方法就是通过计算原始数据矩阵对应的协方差矩阵,然后可以得到协方差矩阵对应的特征值和特征向量,选取特征值最大的前k个特征向量组成的矩阵,通过特征矩阵就可以将原始数据矩阵从n维空间映射至k维空间,从而实现特征降维。

方差、协方差及协方差矩阵

如果你曾经接触过线性代数可能对这三个概念很熟悉,可能间隔时间太久有些模糊,下面再帮大家温习一下:

方差(Variance)一般用来描述样本集合中的各个样本点到样本均值的差的平方和的均值:

协方差(Covariance)目的是度量两个变量(只能为两个)线性相关的程度:

为可以说明两个变量线性无关,但不能证明两个变量相互独立,当时,二者呈正相关,时,二者呈负相关。

协方差矩阵就是由两两变量之间的协方差组成,有以下特点:

  • 协方差矩阵可以处理多维度问题。

  • 协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。

  • 协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。

  • 样本矩阵中若每行是一个样本,则每列为一个维度。

假设数据是3维的,那么对应协方差矩阵为:

这里简要概括一下协方差矩阵是怎么求得的,假设一个数据集有3维特征、每个特征有m个变量,这个数据集对应的数据矩阵如下:

若假设他们的均值都为0,可以得到下面等式:

可以看到对角线上为每个特征方差,其余位置为两个特征之间的协方差,求得的就为协方差矩阵。

这里叙述的有些简略,感兴趣的小伙伴可以自行查询相关知识。

特征值和特征向量

得到了数据矩阵的协方差矩阵,下面就应该求协方差矩阵的特征值和特征向量,先了解一下这两个概念,如果一个向量v是矩阵A的特征向量,那么一定存在下列等式:

其中A可视为数据矩阵对应的协方差矩阵,是特征向量v的特征值。数据矩阵的主成分就是由其对应的协方差矩阵的特征向量,按照对应的特征值由大到小排序得到的。最大的特征值对应的特征向量就为第一主成分,第二大的特征值对应的特征向量就为第二主成分,依次类推,如果由n维映射至k维就截取至第k主成分。

实例操作

通过上述部分总结一下PCA降维操作的步骤:

  1. 去均值化

  2. 依据数据矩阵计算协方差矩阵

  3. 计算协方差矩阵的特征值和特征向量

  4. 将特征值从大到小排序

  5. 保留前k个特征值对应的特征向量

  6. 将原始数据的n维映射至k维中

公式手推降维

原始数据集矩阵,每行代表一个特征:

对每个特征去均值化:

计算对应的协方差矩阵:

依据协方差矩阵计算特征值和特征向量,套入公式:

拆开计算如下:

可以求得两特征值:

,

当时,对应向量应该满足如下等式:

对应的特征向量可取为:

同理当时,对应特征向量可取为:

这里我就不对两个特征向量进行标准化处理了,直接合并两个特征向量可以得到矩阵P:

选取大的特征值对应的特征向量乘以原数据矩阵后可得到降维后的矩阵A:

综上步骤就是通过PCA手推公式实现二维降为一维的操作。

numpy实现降维

import numpy as np

def PCA(X,k):
    '''
    X:输入矩阵
    k:需要降低到的维数
    '''
    X = np.array(X) #转为矩阵
    sample_num ,feature_num = X.shape #样本数和特征数
    meanVals = np.mean(X,axis = 0) #求每个特征的均值
    X_mean = X-meanVals #去均值化
    Cov = np.dot(X_mean.T,X_mean)/sample_num #求协方差矩阵
    feature_val,feature_vec = np.linalg.eig(Cov)
    #将特征值和特征向量打包
    val_sort = [(np.abs(feature_val[i]),feature_vec[:,i]) for i in range(feature_num)]
    val_sort.sort(reverse=True) #按特征值由大到小排列
    #截取至前k个特征向量组成特征矩阵
    feature_mat = [feature[1] for feature in val_sort[:k]]
    # 降n维映射至k维
    PCA_mat = np.dot(X_mean,np.array(feature_mat).T)
    return PCA_mat
if __name__ == "__main__":
    X = [[1, 1], [1, 3], [2, 3], [4, 4], [2, 4]]
    print(PCA(X,1))

运行截图如下:

代码部分就是公式的套用,每一步后都有注释,不再过多解释。可以看到得到的结果和上面手推公式得到的有些出入,上文曾提过特征向量是可以随意缩放的,这也是导致两个结果不同的原因,可以在运行代码时打印一下特征向量feature_vec,观察一下这个特点。

sklearn库实现降维

from sklearn.decomposition import PCA
import numpy as np

X = [[1, 1], [1, 3], [2, 3], [4, 4], [2, 4]]
X = np.array(X)
pca = PCA(n_components=1)
PCA_mat = pca.fit_transform(X)
print(PCA_mat)

这里只说一下参数n_components,如果输入的是整数,代表数据集需要映射的维数,比如输入3代表最后要映射至3维;如果输入的是小数,则代表映射的维数为原数据维数的占比,比如输入0.3,如果原数据20维,就将其映射至6维。

总结

上面用到的数据集特别简单,建议在练习的时候用一些特征较多的数据集,可以利用图像绘制一下各个主成分占总方差的比例,很直观的一个结果就是排序较前的一些主成分占比特别大,最后一些占比可能只有零点几,这也是我们上文叙述的内容最基本的原理。

欢迎扫码关注:

机器学习——降维、聚类、分类、回归 前言: 最近做的任务与降维分类有关,于是乎就将机器学习中的“四大元老”——降维、聚类、分类、回归给弄混了。。。。。因此,用了很长时间去理解这“四大元老”的具体概念。并借此机会,趁热打铁得记录一下。 1.机器学习 什么是机器学习? 机器学习是一帮科学家想让计算机像人一样思考所研发出来的一套计算机理论。它包含了多种算法,涉及到概率论,数理统计、线性代数、矩阵论等多个学科。 机器学习已经深入到了我们生活... 阅读详情

相关推荐

机器学习-特征工程中的特征降维

特征降维

数据掘金 8040

networkx生成的numpy矩阵无法降维问题

描述 代码如下 self.A = nx.to_numpy_matrix(self.G) self.k = np.sum(self.A,axis=0) 我想用nx里的函数生成G网络的邻接矩阵,然后用np中的sum函数求出度数矩阵。然而如此求出来的k一直是二维的,而且没办法用分片或者flatten()来降维。 解决 还是得把矩阵彻底点转换成numpy类型 self.A = np.array(nx.to_numpy_matrix(self.G) ) self.k = np.sum(self.A,

qq_43434730的博客 530

特征降维

维度灾难 首先在机器学习中,如果特征值(也可称之为维度,或feature,或参数)过多,会发生所谓的维度灾难。维度灾难最直接的后果就是过拟合现象,而发生该现象最根本的原因是: 1,维度增加时,有限的样本空间会越来越稀疏。因此模型出现在训练集上表现良好,但对新数据缺乏泛化能力的现象。 如果训练集可以达到理论上的无限个,那么就不存在维度灾难,我们可以用无限个维度去得到一个完美的分类器。训练集样本

我的学习成长日记 2万+

机器学习基础 第五章 降维算法

五 降维算法1 主成分分析(PCA)1.1 主成分应用从第二章的图1.1.1中能看出来哪部电影的人气指数最高吗?当然是票房比较高或者检索次数比较高的电影人气指数要高。如何用主成分来分析人气指数哪?沿着数据跨度最大的方向,即方差最大的方向画出一条坐标轴,然后将原始的数据投影在新的坐标轴上,投影后值越大代表综合人气指数最高,见下图。下面会以一个例子演示如何计算主成分,及其相关应用。 图1.1.1 各个

super 1163

语义通信理论必看论文:Towards a Theory of Semantic Communication

了解语义通信发展必看的一篇文章

一去不复返的通信er 3927

从芯片选型到光学集成:手持激光测距仪硬件设计全解析

本文全面解析手持激光测距仪的硬件设计,从芯片选型到光学集成,详细介绍了相位法测距技术的核心原理与方案选择。通过模块化设计、信号链路优化及PCB布局技巧,实现毫米级精度。文章还分享了量产化关键控制点,帮助工程师规避常见设计陷阱,提升产品可靠性。

weixin_30425949的博客 445

《机器学习实战》—PCA

机器学习实战—PCA(主成分分析)(一)降维技术1.1降维1.降维的目标就是对输入的数目进行削减,由此剔除数据中的噪声并提高机器学习方法的性能。2.降维是对数据高维度特征的一种预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为了应用非常广泛的数据...

anzhi的博客 890

Windows版本Carla(含RoadRunner插件)源码安装+RoadRunner地图导入

通过跳转浏览器账号密码登录github,不要选择Fine-grained personal access tokens,在git clone时会显示非授权,也不要使用Windows凭据!核心指令:编译PythonAPI–make PythonAPI,,编译Server–make launch,封装”游戏“–make package。完成安装后,在已安装->2022版本右侧->更多->导入配置,选择配置文件(需将配置文件内容更新为手册内容,如下图)->详细信息,更新。不要修改版本,执行上面指令即可!

winnizap的博客 1468

机器学习实战——主成分分析

机器学习实战——降维技术1 主成分分析2 sklearn中的实现 1 主成分分析 主成分分析(Principal Component Analysis,PCA)是一种统计方法,通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。即通过线性变换找出样本数据中最主要的属性,用样本数据中最主要的属性来代替原始样本的全部属性,也可以理解为样本点在正交变换之后的超平面...

wxw_csdn的博客 705

学习STM32的无人机控制

下面是一个基于STM32的无人机控制的简单示例代码,包括四旋翼的PID控制、遥控器信号解析和电机控制。本示例以STM32F103系列为例,使用Keil C编译器进行开发。

qq_67153941的博客 707

XSS漏洞之PDF生成:从XSS到服务端任意文件读取

XSS是最为常见的Web漏洞之一,多年来连续入选OWASP TOP10,相信大家都耳熟能详。 它是一种代码注入类的攻击,是一种客户端侧的攻击,攻击者通过在Web应用中注入恶意JavaScript代码,通过点击URL,最终在受害者浏览器端执行的一种漏洞。主要有反射型XSS、存储型XSS、基于DOM的XSS三类。XSS一些比较常规的危害大概有:重定向浏览器、窃取Cookie、浏览器劫持等。本文章侧重于发现XSS后的进一步利用。 主要介绍在某次实际测试过程中,发现XSS漏洞之后,如何进一步的利用,最终通过XSS达

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3782

pca降维的基本思想_想机器学习实战却不会特征降维?这可不行

最近期末需要交的论文有些多,所以更新进度有些慢,为了弥补空白期,以后也会给大家转载一些好文,感谢各位哥哥姐姐一直以来的支持。如果只对降维的代码部分感兴趣可以直接划至文末。一直都在研究关于机器学习相关算法的理论,最近准备打算在Kaggle参加些竞赛,但只会一些理论知识是不足以针对给定的数据建立一个比较不错的模型,这其中还包括很多必要的操作,比如缺失值处理、特征工程等等。今天来说一下特征降维...

weixin_39898150的博客 220

基于Simulink的异步电机定子磁链定向控制(SFOC)仿真

本文带你从零构建了异步电机SFOC系统​ 的完整Simulink仿真模型,实现了:✅ 搭建异步电机、逆变器、风机负载的主电路与传感器模型;✅ 用MATLAB Function实现定子磁链观测(电压模型)、坐标变换、双闭环PI控制;✅ 验证SFOC在转速跟踪(响应0.2s、超调4%)、转矩响应(恢复0.15s)中的高性能;✅ 对比RFOC,明确SFOC在参数鲁棒性(转子电阻+50%时波动<2%)上的独特优势;✅ 理解SFOC“定子磁链定向+解耦控制”的核心思想(低成本高鲁棒性驱动的工程实现)。

xiaoheshang_123的博客 392

机器学习 - 特征降维

特征降维在处理高维数据时尤为重要,可以提高模型的训练速度和泛化性能。在实际应用中,通常需要结合特征选择和特征提取方法,根据具体问题选择合适的降维技术。

weixin_47552266的博客 2723

【C++】构造函数之初始化列表(Initialization list of constructors)

本讲主要是构造函数的初始化列表的讲节,但是本节很重要,可以关乎后面写项目

m0_62599305的博客 2235

【突变检验方法一】MATLAB实现Pettitt突变检验

MATLAB实现Pettitt突变检验及贝叶斯突变检测等

WW、forever的博客 1万+

python机器学习之特征降维

????上次我们学习了数据处理中的特征处理,主要包括归一化、标准化、二值化、独热编码等,对数据做完处理后,接下来就应该进行数据的降维处理了,对于数据处理感兴趣的同学可以查看????: python机器学习之特征工程: python机器学习之数据探索. python机器学习之特征工程: python机器学习之特征处理. ????今天我们要学的是数据的降维部分,数据的降维主要是将高维向量空间的数据点印射到低纬空间中,当然也可以从低纬度转换到高维度中,在实际应用中,高维度空间包含较多的冗余信息与噪声信息,从而

柳小葱的博客 3354

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【机器学习】特征降维 - 主成分分析PCA

主成分分析(Principal Component Analysis,PCA), 是一种「统计」方法。通过正交变换将一组可能存在「相关性」的变量转换为一组「线性不相关」的变量,转换后的这组变量叫「主成分」。

wangyuxiang946的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

机器学习实战—降维

投影、流形学习、PCA降维、KPCA、增量PCA、LLE算法

qq_43456605的博客 5555

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

特征工程:特征降维

  特征降维指的是采用某种映射方法,将高维向量空间的数据点映射到低维的空间中。在原始的高维空间中,数据可能包含冗余信息及噪声信息,其在实际应用中会对模型识别造成误差,降低模型准确率;而通过特征降维可以减少冗余信息造成的误差,从而提高模型准确率。   特征降维的常用方法有特征选择和线性降维。 1 特征选择   特征选择方法比较简单粗暴,直接将不重要的特征删除。特征选择方法主要包括三大类:过滤法(Filter)、包装法(Wrapper)和嵌入法(Embedded)。 过滤法:根据发散性或者相关性对各个特征进行

读万卷书 行万里路 7717

【机器学习】--6.PCA主成分分析(降维)

设有m条n维数据。m*n矩阵。

我是个好人呀,O(∩_∩)O 7633

【机器学习】降维系列算法(PCA、LDA、NMF、LLE)

降维(Dimensionality Reduction)是机器学习中用来减少数据集特征数量的技术,其目的是在尽可能保留原始数据信息的同时降低数据的复杂度。降维不仅可以加速模型训练、减少计算资源消耗,还能帮助消除噪声、提高模型性能,并且有助于可视化高维数据。PCA 是一种线性降维方法,它通过找到一组新的正交基(主成分),将原始数据投影到这些新轴上。新的坐标系中的每个维度都是原始变量的线性组合,且各维度之间相互独立。PCA的目标是在尽可能少的维度上保留尽可能多的数据方差。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

机器学习特征降维

相关系数的值介于–1与+1之间,当 r>0 时,表示两变量正相关,r<0 时,两变量为负相关,当 |r|=1 时,表示两变量为完全相关,当r=0时,表示两变量间无相关关系。斯皮尔曼相关系数与之前的皮尔逊相关系数大小性质一样,取值 [-1, 1]之间,斯皮尔曼相关系数比皮尔逊相关系数应用更加广泛。PCA 通过对数据维数进行压缩,尽可能降低原数据的维数(复杂度)损失少量信息,在此过程中可能会舍弃原有数据、创造新的变量。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变。

小森的博客 1295

【机器学习】机器学习之PCA降维

本次实验成功实现了人脸识别的核心步骤,运用机器学习算法进行全面学习与应用。首先,通过fetch_olivetti_faces函数加载人脸数据集,并通过PCA算法将数据降维至50维。随后,进行降维后数据的逆转换,得到了重建后的人脸数据,实现了维度还原。在实验过程中,随机选择了一张人脸图片,展示了原始、重建以及模糊后的人脸图像,生动呈现了降维对图像的影响。

朝花夕拾 2万+
上一篇: GitHub超4K星!如何用30天吃掉TensorFlow2.0?
下一篇: 5 行代码实现图像分割
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值