《呆板学习》——PCA降维

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

PCA降维简介



  • 主身分分析(Principal Component Analysis,PCA)是一种多变量统计分析方法。
  • PCA 降维是基于如许一个理念:在高维数据空间中,存在一些方向(主身分)比其他方向更能代表数据的变化。通过将数据投影到这些主要方向上,我们可以在较低维度空间中表示数据,同时尽大概淘汰信息丧失。比方,假设有一个三维数据集,数据点在某个平面附近分布较密集,而在垂直于该平面的方向上变化较小。PCA 降维就可以找到这个平面的方向作为主要身分,将数据从三维降到二维。
什么是主身分分析?


主身分的选择与维度确定


降维的数学过程


PCA降维求解步骤


降维后的效果和应用场景中的上风



  • 去除噪声和冗余信息:在现实数据中,大概存在一些噪声或者变量之间的冗余。PCA 降维通过聚焦于主要身分,可以有效地去除这些干扰因素。比方,在传感器数据中,大概由于传感器的精度问题或者环境因素产生噪声,PCA 可以降低这些噪声对数据分析的影响。
  • 进步盘算服从:在处置惩罚高维数据时,许多呆板学习算法的盘算复杂度会随着维度的增长而急剧上升。降维后的低维数据可以大大淘汰盘算量。比如在支持向量机(SVM)分类使命中,对高维数据进行 PCA 降维后再进行分类,可以加速训练和预测的速度。
  • 数据可视化:当数据维度降低到二维或三维时,可以方便地进行可视化。比方,在市场细分研究中,将消费者的多维度数据(如消费风俗、人口统计学特性等)进行 PCA 降维后,绘制在二维平面上,可以直观地看到差异消费群体的分布,有助于制定针对性的营销策略。
PCA模型


API参数



  • n_components:这个参数可以帮我们指定希望PCA降维后的特性维度数量。简朴来说:指定整数,表示要降维到的目标,【比如十维的数据,指定n_components=5,表示将十维数据降维到五维】假如为小数,表示累计方差百分比。0.9
  • copy : 类型:bool,True或者False,缺省时默以为True。
    意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维盘算。
    【按默以为True】
  • 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算法来降维。一样平常来说,使用默认值就够了。【按默认设置即可】
Attributes属性



  • components_:array, shape (n_components, n_features) 指表示主身分系数矩阵
  • explained_variance_:降维后的各主身分的方差值。方差值越大,则说明越是重要的主身分。
  • explained_variance_ratio_:降维后的各主身分的方差值占总方差值的比例,这个比例越大,则越是重要的主身分。【一样平常看比例即可 >90%】
PCA对象的方法




PCA降维实例

   对鸢尾花数据进行降维处置惩罚:

共66条数据。
  导入所需库

  1. from sklearn.decomposition import PCA
  2. import pandas as pd
复制代码
导入数据集

  1. data = pd.read_excel('hua.xlsx') # 数据读取
复制代码
对数据进行处置惩罚

  1. # 取除最后一列外的所有列作为特征变量
  2. x = data.iloc[:,:-1]
  3. # 取最后一列作为目标变量
  4. y = data.iloc[:,-1]
复制代码
创建PCA模型并训练

  1. # 实例化 PCA 对象,设置主成分解释的方差比例为 0.90
  2. pca = PCA(n_components=0.90)
  3. # 对特征变量 x 进行 PCA 训练,不需要传入目标变量 y
  4. pca.fit(x)
复制代码
查看训练结果

  1. print("特征所占百分比:{}".format(sum(pca.explained_variance_ratio_)))
  2. print(pca.explained_variance_ratio_)
  3. print("PCA 降维后数据:")
  4. # 将数据 x 从原始特征空间转换到主成分空间
  5. new_x = pca.transform(x)
  6. print(new_x)
复制代码

对降维数据进行分别数据集

  1. from sklearn.model_selection import train_test_split
  2. # 将降维后的数据 new_x 和目标变量 y 划分为训练集和测试集,测试集比例为 0.2,随机种子为 0
  3. x_train,x_test,y_train,y_test = train_test_split(new_x,y,test_size=0.2,random_state=0)
复制代码
进行逻辑回归模型训练

  1. # 导入逻辑回归分类器
  2. from sklearn.linear_model import LogisticRegression
  3. # 实例化逻辑回归分类器
  4. classifier = LogisticRegression()
  5. # 使用训练集数据进行逻辑回归分类器的训练,传入特征变量 x_train 和目标变量 y_train
  6. classifier.fit(x_train,y_train)  
复制代码
自测和使用测试集测试并打印分类报告

  1. from sklearn import metrics
  2. # 使用训练好的分类器对训练集进行预测
  3. train_pred = classifier.predict(x_train)
  4. # 打印训练集的分类报告,评估分类器在训练集上的性能
  5. print(metrics.classification_report(y_train,train_pred))
  6. print(train_pred)
  7. # 使用训练好的分类器对测试集进行预测
  8. test_pred = classifier.predict(x_test)
  9. # 打印测试集的分类报告,评估分类器在测试集上的性能
  10. print(metrics.classification_report(y_test,test_pred))
  11. print(test_pred)
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表