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

🍷 机器学习实战:使用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的优点和缺点
优点

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

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

相关推荐
梦幻精灵_cq1 天前
Linux.date格式化标识“制作”极简台历 vs Python.datetime.strftime格式化“精美”日历牌(时间工具依情境选择也是一种“智慧)
linux·python
新元代码1 天前
Function Calling的现状和未来的发展
人工智能
jinxinyuuuus1 天前
订阅指挥中心:数据可移植性、Schema设计与用户数据主权
数据仓库·人工智能
ASS-ASH1 天前
视觉语言大模型Qwen3-VL-8B-Instruct概述
人工智能·python·llm·多模态·qwen·视觉语言模型·vlm
Xy-unu1 天前
[LLM]AIM: Adaptive Inference of Multi-Modal LLMs via Token Merging and Pruning
论文阅读·人工智能·算法·机器学习·transformer·论文笔记·剪枝
kangk121 天前
统计学基础之概率(生物信息方向)
人工智能·算法·机器学习
再__努力1点1 天前
【77】积分图像:快速计算矩形区域和核心逻辑
开发语言·图像处理·人工智能·python·算法·计算机视觉
matlabgoodboy1 天前
程序代做python代编程matlab代码设计plc深度学习java编写C++代写
python·深度学习·matlab
福客AI智能客服1 天前
露营装备行业智能 AI 客服:从 “售后救火” 到 “售前场景赋能” 的转型路径
人工智能
ccLianLian1 天前
DINO系列
人工智能·计算机视觉