机器学习之主成分分析案例-红酒主成分分析

🍷 机器学习实战:使用PCA与sklearn红酒数据集进行特征降维与模型预测对比

在机器学习中,主成分分析(PCA)是一种有效的降维技术,它通过寻找数据中的主成分来减少特征数量,同时尽量保留数据的结构。本案例将使用Python的scikit-learn库,结合红酒数据集,展示如何使用PCA进行特征降维,并比较降维前后模型预测性能的变化。

📚 数据集介绍

红酒数据集是scikit-learn内置的数据集之一,它包含了178个样本,每个样本有13个特征,描述了红酒的物理化学特性,以及一个表示红酒原产地的目标变量。

🤖 案例分析

我们将通过以下步骤进行PCA分析和模型预测对比:

  1. 加载数据并分割数据集。
  2. 使用PCA进行数据降维。
  3. 训练分类模型(使用降维后数据)。
  4. 训练同样的分类模型(不使用PCA)。
  5. 对比两种情况下模型的预测性能。
📝 Python代码实现
python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加载红酒数据集
wine = load_wine()
X, y = wine.data, wine.target

# 数据预处理:标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 创建PCA模型,设置要保留的主成分数量
pca = PCA(n_components=2)

# 应用PCA降维
X_pca = pca.fit_transform(X_scaled)

# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
X_train_pca, X_test_pca = train_test_split(X_pca, test_size=0.2, random_state=42)

# 创建分类模型
classifier = LogisticRegression(max_iter=10000)

# 训练模型(使用原始数据)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
accuracy_no_pca = accuracy_score(y_test, y_pred)

# 训练模型(使用PCA降维后的数据)
classifier.fit(X_train_pca, y_train)
y_pred_pca = classifier.predict(X_test_pca)
accuracy_with_pca = accuracy_score(y_test, y_pred_pca)

# 评估模型
print("Accuracy without PCA:", accuracy_no_pca)
print("Accuracy with PCA:", accuracy_with_pca)
print("Report without PCA",classification_report(y_test, y_pred))
print("Report with PCA",classification_report(y_test, y_pred_pca))

# 打印解释的方差比
explained_variance = pca.explained_variance_ratio_.sum()
print(f"Total explained variance by the first 2 components: {explained_variance:.2%}")

# 可视化PCA降维后的数据
plt.figure(figsize=(10, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, edgecolor='none', alpha=0.5, cmap='viridis')
plt.colorbar()
plt.title('PCA of Wine Dataset')
plt.show()
🔍 代码解析
  1. 数据加载与预处理:

    • 使用load_wine()加载红酒数据集。
    • 利用StandardScaler()对数据进行标准化。
  2. PCA降维:

    • 使用PCA类进行降维,这里选择保留2个主成分。
    • fit_transform方法用于拟合模型并转换数据。
  3. 模型训练与预测:

    • 使用LogisticRegression分类器进行训练和预测。
    • 对比使用原始数据和PCA降维后的数据进行模型训练的结果。
  4. 评估模型:

    • 使用accuracy_score来评估模型的准确率。
  5. 分析PCA效果:

    • explained_variance_ratio_.sum()计算所选主成分解释的总方差比例。
  6. 可视化:

    • 使用散点图可视化降维后的数据,颜色代表红酒的类别。
执行效果:


🎯 结论

通过PCA,我们成功地将红酒数据集从13维降至2维,同时保留了数据的大部分信息。然后,我们使用降维后的数据训练了逻辑回归分类器,并与未降维的数据进行了预测性能的对比。结果表明,尽管PCA降维后的数据丢失了一些信息,但模型的预测准确率并没有显著下降,这表明PCA有效地保留了数据中的关键特征,同时减少了模型训练的复杂性和潜在的过拟合风险。此外,通过计算解释的方差比例,我们确认了前2个主成分足以保留数据的主要特征,从而验证了PCA降维策略的合理性。最后,通过可视化,我们可以直观地看到不同类别的红酒在降维后的空间中是如何分布的,这有助于我们理解PCA如何捕捉数据的关键结构。
PCA的优点和缺点
优点

  • 最常用的降维方法之一,易于理解和实现。
  • 能够捕捉数据中的主要变化方向。
  • 通过线性变换可以减少特征的数量。
    缺点
  • 对于非线性关系的数据降维效果可能不佳。
  • 不考虑类别信息。

别忘了给这篇帖子点个赞👍,如果喜欢的话,也可以收藏,关注我了解更多人工智能相关知识哦!😉

相关推荐
花生了什么树~.11 分钟前
python基础知识(四)--if语句,for\while循环
python
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
luthane2 小时前
python 实现average mean平均数算法
开发语言·python·算法
xuanyu222 小时前
Linux常用指令
linux·运维·人工智能
静心问道2 小时前
WGAN算法
深度学习·算法·机器学习
码农研究僧2 小时前
Flask 实现用户登录功能的完整示例:前端与后端整合(附Demo)
python·flask·用户登录
Ylucius2 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
凡人的AI工具箱2 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
sleP4o2 小时前
Python操作MySQL
开发语言·python·mysql
晓星航2 小时前
Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
人工智能·docker·机器人