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

主成分分析(PCA)与逻辑回归在鸢尾花数据集上的实践与效果对比

在机器学习领域,数据预处理和模型选择是影响模型性能的关键因素。主成分分析(Principal Component Analysis,PCA)作为一种常用的降维技术,能够在保留数据主要信息的前提下,降低数据维度,减少计算复杂度,同时还能有效解决数据特征之间的相关性问题。本文将结合鸢尾花(Iris)数据集,详细介绍如何使用 PCA 进行数据降维,并对比降维前后逻辑回归模型的性能表现。

一、数据读取与基本信息查看

首先,我们使用pandas库读取鸢尾花数据集。鸢尾花数据集是机器学习领域中非常经典的数据集,包含 150 条记录,每条记录描述了鸢尾花的四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),以及对应的鸢尾花类别(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。

import pandas as pd
# 读取数据
data = pd.read_csv('iris.csv')

通过上述代码,我们将数据集读取到data变量中,后续将基于该数据集进行一系列操作。

二、数据划分

接下来,我们将数据集划分为特征矩阵X和标签向量y。特征矩阵X包含数据集的前四个列,即花的四个特征;标签向量y包含数据集的最后一列,即鸢尾花的类别信息。

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

三、主成分分析(PCA)降维

3.1 PCA 模型实例化与训练

我们使用sklearn.decomposition模块中的PCA类进行主成分分析。这里设置n_components=0.90,表示我们希望保留足够的主成分,使得累计解释方差比例达到 90%。

from sklearn.decomposition import PCA
pca = PCA(n_components=0.90)  # 实例化PCA对象
pca.fit(X)  # 进行训练,不需要传入y

在上述代码中,pca.fit(X)方法会对原始特征矩阵X进行计算,确定主成分的方向和解释方差比例。

3.2 查看主成分分析结果

我们可以通过explained_variance_ratio_属性查看每个主成分的解释方差比例,以及累计解释方差比例。

print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_)

运行上述代码后,我们能够直观地了解到每个主成分对原始数据信息的解释程度,以及最终保留的主成分累计能够解释多少原始数据的信息。

3.3 数据转换

完成 PCA 模型的训练后,我们使用transform方法将原始数据转换到主成分空间,得到降维后的数据new_x

print('PCA降维后数据:')
new_x = pca.transform(X)
print(new_x)  # 数据X在主成分空间中的表示,具体来说,这个方法将数据X从原始特征空间转换到主成分空间

此时的new_x就是经过 PCA 降维后的数据,其维度相较于原始数据X已经降低,但是保留了原始数据 90% 以上的信息。

四、数据集划分与模型训练

4.1 数据集划分

我们将原始数据和降维后的数据分别划分为训练集和测试集,用于后续的模型训练和评估。这里设置测试集大小为原始数据集的 20%,并通过random_state=0设置随机种子,确保每次运行代码时数据集划分的结果一致。

from sklearn.model_selection import train_test_split
xtrain, 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)

4.2 逻辑回归模型训练

我们使用sklearn.linear_model模块中的LogisticRegression类构建逻辑回归模型,并分别使用降维后的数据和原始数据进行训练。

from sklearn.linear_model import LogisticRegression
# 导入逻辑回归分类器
classifier = LogisticRegression()
classifier1 = LogisticRegression()
classifier.fit(xtrain, ytrain)
classifier1.fit(xtrain1, ytrain1)

上述代码中,classifier是基于降维后数据训练的逻辑回归模型,classifier1是基于原始数据训练的逻辑回归模型。

五、模型评估

我们使用classification_reportscore方法对两个模型在训练集和测试集上的性能进行评估。classification_report可以输出精确率、召回率、F1 值等详细的分类指标,score方法则直接返回模型在测试集上的准确率。

from sklearn import metrics
from sklearn.metrics import classification_report
# 训练测试集
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 作为一种强大的数据预处理技术,能够帮助我们在不损失过多信息的前提下降低数据维度,提高模型的训练效率和泛化能力。然而,并非在所有情况下降维都能提升模型性能,具体是否需要使用 PCA 以及如何选择合适的主成分数量,还需要根据数据集的特点和具体的任务需求进行综合考虑。在实际的机器学习项目中,不断尝试不同的数据预处理方法和模型,进行性能对比和调优,是提高模型效果的关键所在。希望本文的实践案例能够为大家在数据降维和模型选择方面提供一些有益的参考和启发。

http://www.xdnf.cn/news/279829.html

相关文章:

  • 【翻译、转载】MCP 工具 (Tools)
  • 【python实用小脚本-47】用Python打造高效的信息推送系统:从问题到解决方案的实战之旅
  • 【默子AI】Anthropic Claude LLM对齐伪装 解读
  • Temp Mail 1.7.0 | 创建和管理临时邮箱,防止垃圾邮件骚扰,保护隐私安全
  • 高效便捷的定时关机与任务管理工具
  • Java学习手册:MyBatis 框架作用详解
  • 【循环依赖(Circular Dependency)】
  • 2025信息安全网络安全意识培训资料汇编(24份)
  • Day 4:牛客周赛Round 91
  • 力扣刷题(第十六天)
  • Mamba+Attention+CNN 预测模型:破局长程依赖的计算机视觉新范式
  • 24:条码解析
  • 深度剖析:丝杆升降机与齿条的传动特性、应用场景及选型策略
  • go语言实现用户管理系统
  • [计算机网络]拓扑结构
  • Allegro23.1新功能之如何去除钻孔表中一钻钻头孔径和公差操作指导
  • Qt输入控件(QInput Widgets)详解:从基础到实战
  • 前端面经-VUE3篇(三)--vue Router(二)导航守卫、路由元信息、路由懒加载、动态路由
  • idea创建springboot项目无法创建jdk8原因及多种解决方案
  • 递归下降算法
  • 结构型模式:外观模式
  • Python 数据智能实战 (12):效果评估 - 超越传统指标
  • 平台介绍-开放API接口-IO说明
  • 阿里云服务器全栈技术指导手册(2025版)
  • 基于 PyQt 的YOLO目标检测可视化界面+ nuitka 打包
  • Spring AI 实战:第六章、Spring AI源码浅析之一山可容二虎
  • 实验四 增强型可靠文件传输系统
  • 电容电阻作用
  • PostgreSQL 表的年龄(age)详解
  • 从 Java 开发到 AI 工程师:全面学习指南