葡萄酒数据集(wine.data)分析实战:从决策树到模型优化的完整指南

1次阅读
没有评论

共计 1926 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景与数据理解

葡萄酒数据集是机器学习入门经典案例,记录了 178 个样本的 13 个化学指标(如酒精浓度、苹果酸含量等)和对应的 3 个产区类别。字段依次为:

葡萄酒数据集 (wine.data) 分析实战:从决策树到模型优化的完整指南

  1. Alcohol
  2. Malic acid
  3. Ash
  4. Alcalinity of ash
  5. Magnesium
  6. Total phenols
  7. Flavanoids
  8. Nonflavanoid phenols
  9. Proanthocyanins
  10. Color intensity
  11. Hue
  12. OD280/OD315
  13. Proline
  14. Class(目标变量)

数据预处理实战

常见痛点

  • 特征量纲差异大(如 Proline 数值在 1000 量级,Hue 在 1 量级)
  • 分类较均衡(各类别样本数约 60 左右)

标准化处理

import pandas as pd
from sklearn.preprocessing import StandardScaler

# 读取数据(注意第一列是类别)data = pd.read_csv('wine.data', header=None)
X = data.iloc[:, 1:]
y = data.iloc[:, 0]

# 标准化演示
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

模型构建对比

决策树基础版

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score

# 默认参数决策树
tree = DecisionTreeClassifier(random_state=42)
scores = cross_val_score(tree, X_scaled, y, cv=5)
print(f"平均准确率:{scores.mean():.2f}")

随机森林进阶

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf_scores = cross_val_score(rf, X_scaled, y, cv=5)
print(f"随机森林准确率:{rf_scores.mean():.2f}")

关键调参技巧

决策树深度控制

  • 通过 max_depth 参数防止过拟合
  • 建议从 3 开始逐步增加,观察验证集表现
# 网格搜索示例
from sklearn.model_selection import GridSearchCV

params = {'max_depth': [3, 5, 7, None]}
grid = GridSearchCV(tree, params, cv=5)
grid.fit(X_scaled, y)
print(f"最优深度:{grid.best_params_}")

特征重要性可视化

import matplotlib.pyplot as plt

rf.fit(X_scaled, y)
plt.barh(range(13), rf.feature_importances_, tick_label=data.columns[1:])
plt.title('特征重要性排序')
plt.show()

避坑指南

  1. 过拟合陷阱 :决策树默认参数容易完全拟合训练集,必须通过max_depthmin_samples_split限制
  2. 特征理解:Color intensity 和 Proline 常是关键特征,但需结合业务理解
  3. 类别权重:虽然本数据集平衡,但实际场景可用class_weight='balanced'

优化方向建议

  1. 尝试 PCA 降维后建模
  2. 对比 SVM 不同核函数效果
  3. 用 XGBoost 测试并调整学习率

完整代码模板

# 标准流程示例
from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(),
    RandomForestClassifier(n_estimators=100, max_depth=5)
)

# 一键训练评估
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
pipe.fit(X_train, y_train)
print(f"测试集准确率:{pipe.score(X_test, y_test):.2f}")

总结

通过本案例可以掌握:
– 标准化处理对树模型的影响
– 决策树与随机森林的核心差异
– 可视化辅助调参的方法

建议下一步尝试用 sklearn.metrics 输出分类报告,深入分析各类别的识别情况。

正文完
 0
评论(没有评论)