17-XGBoost-红葡萄酒品质分类预测

发布时间:2026/7/26 8:35:52
17-XGBoost-红葡萄酒品质分类预测 1. 需求分析用XGBoost算法对葡萄酒品质进行多分类预测2. 数据说明葡萄牙北部绿酒Vinho Verde理化检测 人工感官评分数据集2009 年 Cortez 发布于 UCI 机器学习库同时支持回归预测分数、分类划分品质等级两大任务。红葡萄酒winequality-red.csv1599 行11 特征 1 标签白葡萄酒winequality-white.csv4898 行11 特征 1 标签特征列英文名称中文释义业务意义fixed acidity固定酸度酒石酸、苹果酸等不易挥发有机酸决定基础酸度volatile acidity挥发性酸度乙酸过高会出现醋味大幅降低品质citric acid柠檬酸提升果香少量可柔化口感residual sugar残糖甜味来源干型 / 甜型酒区分核心指标chlorides氯化物含盐量过高带来咸味、劣质口感free sulfur dioxide游离二氧化硫抑菌抗氧化过量产生刺鼻硫磺味total sulfur dioxide总二氧化硫游离 结合 SO₂食品安全限制指标density密度与酒精度、含糖量强相关pH酸碱度酸度平衡影响稳定性与风味sulphates硫酸盐提升葡萄酒香气alcohol酒精度高度数通常对应更高品质评分标签列quality人工感官打分区间 38 分无 1/2/9/10类别极度不均衡红酒主流5、6 分少量 3、4、7、8白酒主流5、6 分极少 3、4、8分类任务常用标签转换方案原始 quality 是有序多分类工程上三种主流处理方案 1二分类好酒quality ≥ 6 → label1差酒quality ≤ 5 → label0 适用逻辑回归、SVM、二分类树、AUC/KS 评估方案 2三分类低档3,4中档5,6高档7,8 适用有序分类模型Ordinal Logistic、XGBoost 序分类方案 3原始多分类6 类3,4,5,6,7,8直接以分数为 6 分类标签样本分布极不均衡适合类别不平衡建模加权损失、过采样3. 建模import pandas as pd from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split, GridSearchCV import xgboost as xgb # xgboost包 import joblib3.1 加载数据# 1. 获取数据 train pd.read_csv(./data/winequality-red.csv, sep;) train.head()3.2 数据预处理提取特征和标签缺失值处理标签处理划分数据集# 2. 数据预处理 # 2.1 提取特征和标签 x train.iloc[:, :-1] y train[quality] y.value_counts() # 2.4 标签处理xgboost可预测多分类标签要从0开始 y y - 3 # 2.5 划分数据集 x_train, x_test, y_train, y_test train_test_split(x, y, test_size0.2, random_state14, stratifyy)3.3 特征工程无3.4 模型训练# 4 模型训练 # 4.1 场景2XGBoost默认参数 # 参数解释objective目标函数多分类问题使用multi:softmaxnum_class标签数量 estimator1 xgb.XGBClassifier(objectivemulti:softmax, num_classlen(y.unique()), random_state666) estimator1.fit(x_train, y_train) y_pre1 estimator1.predict(x_test) print(XGBoost默认参数分类报告\n, classification_report(y_test, y_pre1, zero_division0))3.5 模型评估# 5. 模型评估 estimator xgb.XGBClassifier(learning_rate0.05, max_depth10, n_estimators120, objectivemulti:softmax, num_classlen(y.unique()), random_state666) estimator.fit(x_train, y_train) y_pre estimator.predict(x_test) print(分类报告\n, classification_report(y_test, y_pre, zero_division0))3.6 模型保存# 6. 模型保存 joblib.dump(estimator, ./model/xgb_wine_red_model.pkl)3.7 模型应用预测# 7. 加载模型 estimator joblib.load(./model/xgb_wine_red_model.pkl) # 8.模型预测 y_pre estimator.predict(x_test) y_pre