当前位置: 首页 > news >正文

PCA降维

主成分分析(Principal Component Analysis,PCA)降维是一种广泛使用的无监督机器学习技术,主要用于数据预处理阶段,其目的是在尽量保留数据重要信息的前提下,减少数据的维度。

PCA 的原理​
PCA 的核心思想是通过线性变换将原始数据投影到一组新的正交基上,这些新的基被称为主成分。主成分的选择遵循以下原则:第一个主成分方向是数据方差最大的方向,第二个主成分方向是与第一个主成分正交且方差次大的方向,以此类推。通过这种方式,我们可以用较少的主成分来近似表示原始数据,从而达到降维的目的。

代码实战:用 PCA 优化逻辑回归模型

1. 数据准备

首先,我们使用pandas库读取鸢尾花数据集。鸢尾花数据集包含 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和 1 个标签(鸢尾花的品种),共 150 条数据。

import pandas as pddata = pd.read_csv('iris.csv')

数据划分

X = data.iloc[:, :-1]y = data.iloc[:, -1]

2. PCA 降维

接下来,使用sklearn库中的PCA模块进行降维操作。这里我们设置n_components=0.90,表示保留能够解释 90% 方差的主成分数量。

from sklearn.decomposition import PCApca = PCA(n_components=0.90) # 实例化PCA对象pca.fit(X) # 进行训练,不需要传入yprint('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))print(pca.explained_variance_ratio_)print('PCA降维后数据:')new_x = pca.transform(X)print(new_x) # 数据X在主成分空间中的表示,具体来说,这个方法将数据X从原始特征空间转换到主成分空间

通过上述代码,我们可以得到降维后保留的主成分所解释的方差比例,以及降维后的数据。

3. 模型训练与评估

为了对比降维前后模型的性能,我们分别使用降维后的数据和原始数据训练逻辑回归模型,并进行评估。

from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn import metricsfrom sklearn.metrics import classification_reportxtrain, xtest, ytrain, ytest = train_test_split(new_x, y, test_size=0.2, random_state=0)xtrain1, xtest1, ytrain1, ytest1 = train_test_split(X, y, test_size=0.2, random_state=0)# 导入逻辑回归分类器classifier = LogisticRegression()classifier1 = LogisticRegression()classifier.fit(xtrain, ytrain)classifier1.fit(xtrain1, ytrain1)# 训练测试集train_pred = classifier.predict(xtrain)print(classification_report(ytrain, train_pred))test_pred = classifier.predict(xtest)print(classification_report(ytest, test_pred))print(classifier.score(xtest, ytest))train1_pred = classifier1.predict(xtrain1)print(classification_report(ytrain1, train1_pred))test1_pred = classifier1.predict(xtest1)print(classification_report(ytest1, test1_pred))print(classifier1.score(xtest1, ytest1))

通过对比分类报告和模型得分,我们可以直观地看到 PCA 降维对模型性能的影响。在这个例子中,降维后的数据虽然减少了特征维度,但模型依然保持了较高的准确率和召回率,说明 PCA 在保留数据关键信息的同时,还能简化模型结构,提高训练效率。

PCA降维参数

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 的原理,还通过代码验证了其在实际应用中的效果。

然而,PCA 也并非完美无缺。它是一种无监督学习方法,在降维过程中没有考虑数据的标签信息,可能会丢失一些对分类任务至关重要的特征。此外,PCA 的结果依赖于数据的分布,对于非线性数据,降维效果可能不理想。

在实际应用中,我们需要根据数据特点和任务需求,合理选择降维方法,灵活运用 PCA 等技术,为机器学习模型的优化提供有力支持。希望本文能帮助你更好地理解和应用 PCA 降维技术,在数据科学的道路上更进一步!

以上代码展示了 PCA 降维在鸢尾花数据集上的应用效果。你若想尝试其他数据集,或调整模型参数,都能探索出更多有趣的结果,欢迎和我分享你的想法

相关文章:

  • 操作系统导论——第27章 插叙:线程API
  • 单例模式的两种设计
  • 手动修改uart16550的FIFO深度?
  • 从0开始学习大模型--Day04--大模型的框架以及基本元素
  • 深入探索Laravel框架中的Blade模板引擎
  • C语言 第六章 结构体(2)
  • MySQL核心内容【持续更新中】
  • 简述Linux操作系统并安装配置Linux
  • 26考研——中央处理器_指令执行过程(5)
  • 【 SVG动态拼接】前端生成阻抗电路图
  • 仁合医疗核心产品:引领医疗科技新潮流
  • LLM量化方法:ZeroQuant、LLM.int8()、SmoothQuant、GPTQ、AWQ
  • CRC 循环冗余校验
  • Vue3 + Element Plus 动态表单实现
  • vscode离线安装python插件
  • git高效杀器——cz-customizable 搭配 commitlint
  • 抖音到店摸着京东外卖过河
  • 树初步 #1(插排串联 - 辽宁省2024CCPC)
  • 【八股消消乐】你在项目中如何优化垃圾回收机制?
  • 动态规划之背包问题:组合优化中的经典NP挑战
  • 碧桂园:砸锅卖铁保交房、持续推进保主体,尽快让公司恢复正常经营
  • 花2万多在海底捞办婚礼,连锁餐企要抢酒楼的婚宴生意?
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 华泰柏瑞基金总经理韩勇因工作调整卸任,董事长贾波代为履职
  • 欧洲承诺投资6亿欧元吸引外国科学家
  • 英国和美国就关税贸易协议条款达成一致