呼伦贝尔北京网站建设,高端设计图网站,网站顶部广告代码,做网站需要具备什么语言机器学习#xff1a;基于主成分分析#xff08;PCA#xff09;对数据降维 作者#xff1a;AOAIYI 作者简介#xff1a;Python领域新星作者、多项比赛获奖者#xff1a;AOAIYI首页 #x1f60a;#x1f60a;#x1f60a;如果觉得文章不错或能帮助到你学习#xff0c;可…机器学习基于主成分分析PCA对数据降维 作者AOAIYI 作者简介Python领域新星作者、多项比赛获奖者AOAIYI首页 如果觉得文章不错或能帮助到你学习可以点赞收藏评论关注哦 如果有小伙伴需要数据集和学习交流文章下方有交流学习区一起学习进步 专栏案例机器学习机器学习基于逻辑回归对某银行客户违约预测分析机器学习学习k-近邻KNN模型建立、使用和评价机器学习基于支持向量机SVM进行人脸识别预测决策树算法分析天气、周末和促销活动对销量的影响机器学习线性回归分析女性身高与体重之间的关系文章目录机器学习基于主成分分析PCA对数据降维一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.数据准备2.PCA分析3.查看主成分的解释能力4.主成分轴Principal Axes的可视化5.基于PCA的降维6.降维处理7.PCA逆向处理8.使用digits.data训练PCA模型并将结果可视化总结一、实验目的
1、了解数据降维的各种算法原理
2、熟练掌握sklearn.decomposition中降维方法的使用
二、实验原理
主成分分析算法Principal Component Analysis PCA的目的是找到能用较少信息描述数据集的特征组合。它意在发现彼此之间没有相关性、能够描述数据集的特征确切说这些特征的方差跟整体方差没有多大差距这样的特征也被称为主成分。这也就意味着借助这种方法就能通过更少的特征捕获到数据集的大部分信息。
主成分分析原理 设法将原来变量重新组合成一组新的相互无关的几个综合变量同时根据实际需要从中可以取出几个较少的总和变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析也是数学上处理降维的一种方法。主成分分析是设法将原来众多具有一定相关性比如P个指标重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合作为新的综合指标。最经典的做法就是用F1选取的第一个线性组合即第一个综合指标的方差来表达即VarF1越大表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息再考虑选取F2即选第二个线性组合为了有效地反映原来信息F1已有的信息就不需要再出现在F2中用数学语言表达就是要求CovF1,F20则称F2为第二主成分依此类推可以构造出第三、第四……第P个主成分。
sklearn中主成分分析的模型 class sklearn.decomposition.PCA(n_componentsNone, copyTrue, whitenFalse, svd_solver’auto’, tol0.0, iterated_power’auto’, random_stateNone sklearn.decomposition.PCA参数介绍
接下来我们主要基于sklearn.decomposition.PCA类来讲解如何使用scikit-learn进行PCA降维。PCA类基本不需要调参一般来说我们只需要指定要降维到的维度或者希望降维后主成分的方差和占原始维度所有特征方差和的比例阈值就可以了。
现在我们介绍一下sklearn.decomposition.PCA的主要参数 n_components这个参数指定了希望PCA降维后的特征维度数目。最常用的做法是直接指定降维到的维度数目此时n_components是一个大于等于1的整数。当然我们也可以指定主成分的方差和所占的最小比例阈值让PCA类自己去根据样本特征方差来决定降维到的维度数此时n_components是一个(0,1]之间的浮点数。当然我们还可以将参数设置为mle此时PCA类会用MLE算法根据特征的方差分布情况自己去选择一定数量的主成分特征来降维。我们也可以使用默认值即不输入n_components此时n_componentsmin(样本数特征数)。 whiten判断是否进行白化。所谓白化就是对降维后的数据的每个特征进行归一化让方差都为1。对于PCA降维本身来说一般不需要白化。如果在PCA降维后有后续的数据处理动作可以考虑白化。默认值是False即不进行白化。 svd_solver即指定奇异值分解SVD的方法由于特征分解是奇异值分解SVD的一个特例一般的PCA库都是基于SVD实现的。有4个可以选择的值{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized’一般适用于数据量大数据维度多同时主成分数目比例又较低的PCA降维它使用了一些加快SVD的随机算法。full’则是传统意义上的SVD使用了scipy库中的实现。‘arpack’和’randomized’的适用场景类似区别是’randomized’使用的是scikit-learn中的SVD实现而’arpack’直接使用了scipy库的sparse SVD实现。默认是’auto’即PCA类会自己去权衡前面讲到的三种算法选择一个合适的SVD算法来降维。一般来说使用默认值就够了。
除了这些输入参数外有两个PCA类的成员值得关注。第一个是explained_variance_它代表降维后的各主成分的方差值。方差值越大则说明越是重要的主成分。第二个是explained_variance_ratio_它代表降维后的各主成分的方差值占总方差值的比例这个比例越大则越是重要的主成分。
三、实验环境
Python 3.9
Anaconda 4
Jupyter Notebook
四、实验内容
本实验介绍了主成分分析算法PCA并以实例验证
五、实验步骤
1.数据准备
1.导入所需的模块
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns;sns.set()
%matplotlib inline 2.构建示例数据
#创建随机数生成器
rngnp.random.RandomState(1)
Xnp.dot(rng.rand(2,2),rng.randn(2,200)).T plt.scatter(X[:,0],X[:,1])
plt.axis(equal) 如上所示第一组示例数据为一组样本量为200的随机的二维数组 2.PCA分析
1.导入 Scikit-Learn 中用于主成分分析的 PCA 模块构建一个主成分分析模型对象并进行训练。在这次构建中我们设定 PCA 函数的参数 n_components 为2这意味这我们将得到特征值最大的两个特征向量
from sklearn.decomposition import PCA
pcaPCA(n_components2)
#使用fit()方法拟合模型
pca.fit(X) n_components参数表示PCA算法中所要保留的主成分个数n也即保留下来的特征个数n 2.模型训练完成后 components_ 属性可以查看主成分分解的特征向量
print(pca.components_) 3.使用.shape方法查看矩阵形状
pca.components_.shape 4.使用type()方法查看pca.components_类型
type(pca.components_) 3.查看主成分的解释能力
1.explained_variance_代表降维后的各主成分的方差值。方差值越大则说明越是重要的主成分
pca.explained_variance_ 4.主成分轴Principal Axes的可视化
1.我们可以通过如下方式将主成分分析中的特征向量描绘出来下图中向量的起点为样本数据的均值
def draw_vector(v0,v1,axNone): ax ax or plt.gca() arrowpropsdict(linewidth2,shrinkA0,shrinkB0) ax.annotate(,v1,v0,arrowpropsarrowprops)
#描绘数据
plt.scatter(X[:,0],X[:,1],alpha0.2) for length,vector in zip(pca.explained_variance_,pca.components_): v vector * 3 * np.sqrt(length) draw_vector(pca.mean_,pca.mean_ v) plt.axis(equal)5.基于PCA的降维
1.将n_components设置为1并使用fit()方法进行拟合
pcaPCA(n_components1)
pca.fit(X)6.降维处理
1.将数据X转换成降维后的数据X_pca并打印X和X_pca的矩阵形状
X_pcapca.transform(X) print(original shape:,X.shape)
print(transformed shape:,X_pca.shape)2.使用切片打印X的前十项
X[:10]3.使用切片打印X_pca的前十项
X_pca[:10]7.PCA逆向处理
1.将降维后的数据转换成原始数据
X_newpca.inverse_transform(X_pca)
#描绘数据
plt.scatter(X[:,0],X[:,1],alpha0.2)
plt.scatter(X_new[:,0],X_new[:,1],alpha0.8)
plt.axis(equal) 8.使用digits.data训练PCA模型并将结果可视化
1.导入sklearn.datasets模块中的load_digits函数
from sklearn.datasets import load_digits
digitsload_digits()
#查看digits.data的矩阵形状
digits.data.shape 2.使用digits.data训练PCA模型并将结果可视化
pcaPCA().fit(digits.data)
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel(number of components)
plt.ylabel(cumlative explained variance) 总结
主成分分析算法Principal Component Analysis PCA的目的是找到能用较少信息描述数据集的特征组合。它意在发现彼此之间没有相关性、能够描述数据集的特征确切说这些特征的方差跟整体方差没有多大差距这样的特征也被称为主成分。这也就意味着借助这种方法就能通过更少的特征捕获到数据集的大部分信息。