主成分分析(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 以及如何选择合适的主成分数量,还需要根据数据集的特点和具体的任务需求进行综合考虑。在实际的机器学习项目中,不断尝试不同的数据预处理方法和模型,进行性能对比和调优,是提高模型效果的关键所在。希望本文的实践案例能够为大家在数据降维和模型选择方面提供一些有益的参考和启发。

相关推荐
汤姆yu1 小时前
基于python的化妆品销售分析系统
开发语言·python·化妆品销售分析
上去我就QWER2 小时前
Python下常用开源库
python·1024程序员节
程序员杰哥3 小时前
Pytest之收集用例规则与运行指定用例
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
Jyywww1213 小时前
Python基于实战练习的知识点回顾
开发语言·python
朝朝辞暮i4 小时前
从0开始学python(day2)
python
程序员黄同学4 小时前
Python中的列表推导式、字典推导式和集合推导式的性能和应用场景?
开发语言·python
AI小云4 小时前
【Python高级编程】类和实例化
开发语言·人工智能·python
道之极万物灭4 小时前
Python uv虚拟环境管理工具详解
开发语言·python·uv
高洁014 小时前
【无标题】大模型-模型压缩:量化、剪枝、蒸馏、二值化 (2
人工智能·python·深度学习·神经网络·知识图谱