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

机器学习之 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 特别适用于高维数据集,在保证数据信息不丢失的前提下,能够简化数据处理流程,提高模型的泛化能力。


http://www.kler.cn/a/296672.html

相关文章:

  • 开学季好物一览,新学期启航必备好物
  • 【即时通讯】轮询方式实现
  • windows下端口不能绑定 但是也没有被占用的解决
  • K8S(Kubernetes)开源的容器编排平台安装步骤详解
  • 最大矩阵和
  • 某云彩SRM2.0任意文件下载漏洞
  • Android studio 更换下载的gradle
  • Spring Boot 常用注解详解
  • 数据结构(五)----树(含堆)
  • 热血江湖2.0稀有资源单机架设 + 虚拟机一键端 +GM 工具
  • 【系统架构设计师】抽象工厂设计模式
  • Grafana进阶教程:使用Loki、Tempo进行日志与追踪可视化
  • 电脑物理地址怎么修改方法
  • 苹果被删视频怎么恢复?分享4个靠谱的方法
  • 机器学习:opencv图像识别--模版匹配
  • fastdmin数据表格顶部添加合并行/底部合计行并且改变颜色
  • CleanClip for mac(苹果电脑剪切板管理器)
  • 场景感知技术带您重塑未来生活的新篇章
  • VisualStudio环境搭建C++
  • 栈的括号匹配与循环队列