欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 机器学习之 PCA降维

机器学习之 PCA降维

2024/11/30 14:49:52 来源:https://blog.csdn.net/m0_73697499/article/details/141941805  浏览:    关键词:机器学习之 PCA降维

1.PCA 降维简介

主成分分析(Principal Component Analysis, PCA)是一种统计方法,用于在数据集中寻找一组线性组合的特征,这些特征被称为主成分。PCA 的目标是通过变换原始特征空间到新的特征空间,从而减少数据的维度,同时尽量保留数据中的重要信息。

PCA 的主要步骤包括:

  1. 计算协方差矩阵:反映各特征之间的相关性。
  2. 求解协方差矩阵的特征值和特征向量:特征值反映了主成分的重要性,特征向量指示了主成分的方向。
  3. 选择主成分:选择那些具有较大特征值的主成分,这些主成分能够解释数据的大部分变异。
  4. 数据投影:将原始数据投影到选定的主成分上,从而实现降维。

2.实例:

 接下来我们进行实例讲解:

实验数据

本次实验使用的数据集来自 Excel 文件 hua.xlsx。数据集包含多个特征和一个标签列。特征数据 X 包括所有除最后一列之外的列,而标签数据 y 则是最后一列。

代码讲解
  1. 读取数据并划分特征和标签

    import pandas as pd
    from sklearn.decomposition import PCA# 读取Excel文件中的数据
    data = pd.read_excel('hua.xlsx')# 数据划分:X表示特征数据,y表示标签数据
    X = data.iloc[:, :-1]
    y = data.iloc[:, -1]

    解释:

    • 使用 pd.read_excel 读取 Excel 文件。
    • 使用 iloc 选取特征数据和标签数据。
  2. 使用 PCA 进行主成分分析

    # 使用PCA进行主成分分析,保留累计贡献率达到90%的主成分
    pca = PCA(n_components=0.9)
    pca.fit(X)# 输出所有主成分的方差比率之和
    print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
    # 输出每个主成分的方差比率
    print(pca.explained_variance_ratio_)# 将原始特征数据转换到新的特征空间
    new_x = pca.transform(X)
    print('PCA降维后数据:\n', new_x)

    解释:

    • 使用 PCA 类进行主成分分析,n_components=0.9 表示保留累计贡献率达到 90% 的主成分。
    • fit 方法拟合 PCA 模型。
    • explained_variance_ratio_ 属性返回每个主成分的方差比率。
    • transform 方法将原始特征数据转换到新的特征空间。
    • 输出结果:。。。
  3. 数据划分与模型训练

    from sklearn.model_selection import train_test_split# 使用降维后的数据划分训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(new_x, y, test_size=0.2, random_state=0)# 创建逻辑回归分类器
    from sklearn.linear_model import LogisticRegression
    classifier = LogisticRegression()
    classifier.fit(x_train, y_train)# 对训练集进行预测
    ytrain_pred = classifier.predict(x_train)
    print(ytrain_pred)# 对测试集进行预测
    ytest_pred = classifier.predict(x_test)
    print(ytest_pred)# 导入评价指标模块
    from sklearn import metrics# 输出训练集上的分类报告
    print(metrics.classification_report(y_train, ytrain_pred))# 输出测试集上的分类报告
    print(metrics.classification_report(y_test, ytest_pred))

    解释:

    • 使用 train_test_split 方法将降维后的数据划分为训练集和测试集。
    • 使用 LogisticRegression 分类器进行训练和预测。
    • 使用 classification_report 打印分类报告。
    • 训练集和测试集的输出结果:
对比分析

为了更好地理解 PCA 降维的效果,我们可以在使用 PCA 降维之前和之后分别训练逻辑回归模型,并比较它们的性能。

  1. 使用原始数据划分训练集和测试集

    # 使用原始数据划分训练集和测试集
    x_train_orig, x_test_orig, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# 创建逻辑回归分类器
    classifier = LogisticRegression()
    classifier.fit(x_train_orig, y_train)# 对训练集进行预测
    ytrain_pred_orig = classifier.predict(x_train_orig)
    print(ytrain_pred_orig)# 对测试集进行预测
    ytest_pred_orig = classifier.predict(x_test_orig)
    print(ytest_pred_orig)# 导入评价指标模块
    from sklearn import metrics# 输出训练集上的分类报告
    print(metrics.classification_report(y_train, ytrain_pred_orig))# 输出测试集上的分类报告
    print(metrics.classification_report(y_test, ytest_pred_orig))

    解释:

    • 使用原始数据划分训练集和测试集。
    • 训练和预测逻辑回归模型。
    • 输出分类报告。
输出对比:

原始特征数据的分类报告:

降维特征数据的分类报告:

3.总结

通过以上步骤,我们完成了 PCA 降维的过程,并使用逻辑回归模型进行了分类任务。PCA 降维不仅可以减少数据的维度,还可以提高模型的训练效率。通过对比降维前后的分类报告,我们可以评估 PCA 降维对模型性能的影响。PCA 特别适用于高维数据集,在保证数据信息不丢失的前提下,能够简化数据处理流程,提高模型的泛化能力。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com