AIStudio数据集红葡萄酒分类实战:决策树与随机森林模型评估全解析

1次阅读
没有评论

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

image.webp

背景介绍

红葡萄酒数据集是经典的分类数据集,常用于机器学习入门实践。该数据集通常包含酒精含量、苹果酸浓度、灰分碱度等 12-13 个化学特征,目标是根据这些特征预测葡萄酒质量等级(通常分为 3 - 5 个类别)。在 AIStudio 平台提供的版本中,数据已经过初步清洗,但仍需注意特征量纲差异和可能的类别不平衡问题。

AIStudio 数据集红葡萄酒分类实战:决策树与随机森林模型评估全解析

算法原理对比

决策树

  1. 核心思想:通过递归划分特征空间构建树形结构,每个节点代表一个特征判断
  2. 优点
  3. 模型可解释性强,可直接可视化决策路径
  4. 对数据分布假设较少,能处理混合类型特征
  5. 自动特征选择(通过信息增益 / 基尼系数)
  6. 缺点
  7. 容易过拟合,对噪声敏感
  8. 不稳定,小数据变化可能导致完全不同的树

随机森林

  1. 核心思想:集成多棵决策树,通过投票机制提高泛化能力
  2. 优点
  3. 天然抗过拟合(通过 bagging 和随机特征子集)
  4. 能处理高维特征,对异常值不敏感
  5. 提供特征重要性评估
  6. 缺点
  7. 模型解释性降低
  8. 训练和预测速度较慢

代码实现

数据预处理

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

# 假设 df 是已加载的 DataFrame
X = df.drop('quality', axis=1)
y = df['quality']

# 标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42, stratify=y)

模型构建

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

# 决策树(限制深度防止过拟合)dtree = DecisionTreeClassifier(
    max_depth=5,
    min_samples_split=10,
    criterion='gini',
    random_state=42
)

# 随机森林(设置树的数量和特征采样比例)rforest = RandomForestClassifier(
    n_estimators=100,
    max_features='sqrt',
    max_depth=7,
    random_state=42
)

模型评估

from sklearn.metrics import classification_report
from sklearn.model_selection import cross_val_score

# 交叉验证评估
def evaluate_model(model, X, y):
    scores = cross_val_score(model, X, y, cv=5, scoring='f1_weighted')
    print(f"CV F1-score: {scores.mean():.3f} (±{scores.std():.3f})")

    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    print(classification_report(y_test, y_pred))

# 执行评估
print("Decision Tree Evaluation:")
evaluate_model(dtree, X_scaled, y)

print("\nRandom Forest Evaluation:")
evaluate_model(rforest, X_scaled, y)

结果分析

典型输出对比示例:

指标 决策树 随机森林
准确率 0.78 0.85
加权 F1 0.76 0.83
类别 3 召回率 0.65 0.81

可视化建议:
1. 使用混淆矩阵热力图对比分类效果
2. 绘制 ROC 曲线(需转换为二分类问题)
3. 特征重要性柱状图(随机森林特有)

避坑指南

类别不平衡处理

  1. 使用 class_weight='balanced' 参数自动调整类别权重
  2. 过采样少数类(SMOTE 算法)或欠采样多数类
  3. 选择适合的评估指标(如 F1-score 而非准确率)

避免过拟合技巧

  1. 决策树:
  2. 设置 max_depth 限制树深度
  3. 增加 min_samples_splitmin_samples_leaf
  4. 随机森林:
  5. 控制 max_depthmin_samples_leaf
  6. 减少 n_estimators 数量(50-200 通常足够)

特征分析

# 随机森林特征重要性
importances = rforest.feature_importances_
feat_importances = pd.Series(importances, index=X.columns)
feat_importances.nlargest(5).plot(kind='barh')

扩展优化方向

  1. 特征工程
  2. 尝试多项式特征组合
  3. 使用 PCA 降维
  4. 超参数调优
  5. 网格搜索(GridSearchCV)
  6. 贝叶斯优化
  7. 模型融合
  8. 结合 XGBoost/LightGBM 等梯度提升树
  9. 设计投票 / 堆叠集成策略

实验复现建议

AIStudio 平台已预置该数据集,读者可以:
1. 新建 Notebook 并导入示例数据集
2. 复制本文代码逐步执行
3. 尝试调整超参数观察效果变化
4. 分享自己的优化方案和结果对比

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