PCA数据降维

主成分分析(Principal Component Analysis, PCA)是一种常用的数据降维技术,它可以在保留数据集中最重要的特征的同时,减少数据的维度。PCA通过创建一个新的特征空间来实现这一点,这个新空间是由原始数据的主成分(即方差最大的方向)定义的。

一、降维

数据的特征又叫做数据的维度,所谓降维,即是减少数据的特征。

相较于随机森林的不同,随机森林是筛选出权重较大的特征,其余的特征都进行特征工程处理(即去除)。

但是PCA降维可以理解为将所有的特征压缩到另一个特征空间,将多个维度的特征映射在一个维度上,从而减少它总的维度。

二、优缺点

优点

  1. 计算方法简单,容易实现。
  2. 可以减少指标筛选的工作量。
  3. 消除变量间的多重共线性。
  4. 在一定程度上能减少噪声数据。

缺点

  1. 特征必须是连续型变量。
  2. 无法解释降维后的数据是什么。
  3. 贡献率小的成分有可能更重要。

三、参数

from sklearn.decomposition import PCA

从sklearn.decomposition导入PCA函数

PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’,
 	tol=0.0, iterated_power=’auto’, random_state=None)

n_components
功能:决定PCA算法应该保留的主成分数量。 取值: 整数k:表示保留前k个主成分。
小数(0,1]之间的数:表示保留的主成分的方差百分比,例如0.9表示保留90%的方差。 如果设置为None(默认值),则保留所有主成分。
copy
功能:是否在运行算法时,将原始训练数据复制一份。 取值: True(默认值):复制数据,以免修改原始数据。
False:直接在原始数据上进行计算。

Attributes属性:

components_array, shape (n_components, n_features) 表示主成分系数矩阵

explained_variance_降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。

explained_variance_ratio_降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。【一般看比例即可 >90%】

四、实例应用

目标流程:使用PCA进行特征降维 -----> 使用逻辑回归模型进行分类任务

1. 读取文件

使用pandas库的read_excel函数读取名为’hua.xlsx’的Excel文件,并将内容存储在DataFrame 类型数据data中。

import pandas as pd  
data = pd.read_excel('hua.xlsx')
2. 分离特征和目标变量

通过iloc索引器,x被设置为DataFrame中除最后一列外的所有列(即特征),而y被设置为最后一列(即目标变量或标签)。

x = data.iloc[:,:-1]  
y = data.iloc[:,-1]
3. 使用PCA进行降维

导入PCA类并创建一个PCA实例,设置n_components=0.90意味着希望保留的数据方差比例为90%。然后,使用fit方法计算数据的主成分。

from sklearn.decomposition import PCA  
pca = PCA(n_components=0.90)  
pca.fit(x)
4. 打印特征所占百分比和具体比例

这两行代码分别打印了保留的总方差百分比和每个主成分解释的方差比例。

print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))  
print(pca.explained_variance_ratio_)
--------------------
特征所占百分比:0.9287327483408421	#百分结果通常不会与设定值正好相同,但肯定会比设定值大
[0.84389796 0.08483479]
5. PCA降维后的数据

使用transform方法将原始特征x映射到PCA的主成分空间中,得到降维后的数据new_x。

new_x = pca.transform(x)  
print(new_x)
---------------
PCA降维后数据:
[	#展示部分结果
 [-0.64329795  0.06460986]
 [-1.17974815  0.04201328]
 [-0.10025387  0.3220728 ]
 [ 0.12824342  0.03129845]
 [-1.99954745  0.05762851]
 …… ……
]
6. 划分数据集

使用train_test_split函数将降维后的特征new_x和目标变量y划分为训练集和测试集,测试集占20%。

x_train,x_test,y_train,y_test = train_test_split(new_x,y,test_size=0.2,random_state=0)
7. 训练逻辑回归模型

导入LogisticRegression类并创建一个实例,然后使用训练数据x_train和y_train来训练模型。

from sklearn.linear_model import LogisticRegression  
classifier_PCA = LogisticRegression()  
classifier_PCA.fit(x_train,y_train)
8. 评估模型性能

使用训练好的模型对训练集和测试集进行预测,并使用classification_report函数打印出分类报告,包括精确度、召回率、F1分数等指标,以评估模型在训练集和测试集上的性能。

  • 训练集
    from sklearn import metrics  
    train_pre = classifier_PCA.predict(x_train)  
    print(metrics.classification_report(y_train,train_pre)) 
    --------------------
                  precision    recall  f1-score   support
    
               0       0.92      0.96      0.94        25
               1       0.96      0.93      0.94        27
    
        accuracy                           0.94        52
       macro avg       0.94      0.94      0.94        52
    weighted avg       0.94      0.94      0.94        52
    

  • 测试集
    test_pre = classifier_PCA.predict(x_test)  
    print(metrics.classification_report(y_test,test_pre))
    -------------------
                  precision    recall  f1-score   support
    
               0       1.00      1.00      1.00         5
               1       1.00      1.00      1.00         9
    
        accuracy                           1.00        14
       macro avg       1.00      1.00      1.00        14
    weighted avg       1.00      1.00      1.00        14
    

    这样我们就完成了使用PCA进行特征降维,并使用逻辑回归模型进行分类任务的完整流程。

七、PCA的优缺点
优点:

计算方法简单,容易实现
可以减少指标筛选的工作量
消除变量间的多重共线性
在一定程度上能减少噪声数据
缺点:

特征必须是连续型变量
无法解释降维后的数据是是什么
贡献率小的成分有可能更重要
八、总结
PCA作为一种经典且强大的降维工具,在机器学习领域有着广泛的应用。理解其数学原理和实现细节,能够帮助我们在实际项目中更好地使用它。需要注意的是,PCA并非适用于所有场景,在使用前应该仔细评估数据特性和需求,选择最合适的降维方法。

希望本文能帮助您掌握PCA的核心概念和应用技巧!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐