2025-06-24 12:07:13
来源:新华网
作者:小白熊
作者简介:精通c#、Halcon、Python、Matlab,擅长机器视觉、机器学习、深度学习、数字图像处理、工业检测识别定位、用户界面设计、目标检测、图像分类、姿态识别、人脸识别、语义分割、路径规划、智能优化算法、大数据分析、各类算法融合创新等等。
联系邮箱:xbx3144@163.com
科研辅导、知识付费答疑、个性化定制以及其他合作需求请联系作者~
在本篇博文中,我们将详细介绍如何使用Python及其相关的机器学习库来构建一个用于葡萄酒分类的模型。我们不仅会讲解代码的具体实现,还会深入探讨背后的理论基础,帮助读者更好地理解和应用这些技术。
机器学习是一种让计算机从数据中自动学习的方法。它通过构建模型来解析数据,从而对新数据做出决策或预测。在本案例中,我们将使用逻辑回归模型对葡萄酒数据集进行分类,该数据集包含不同类型的葡萄酒及其化学特性。
逻辑回归(Logistic Regression)是一种广泛使用的分类算法,尽管名字中带有“回归”二字,但它实际上是一种分类方法。逻辑回归通过 logistic 函数(也称为 sigmoid 函数)将线性组合的结果映射到 (0, 1) 区间,从而输出概率值。对于多分类问题,通常使用 softmax 函数来扩展 logistic 回归,使其能够处理多个类别。
数据标准化(Standardization)是数据预处理的一个重要步骤,它通过减去均值并除以标准差,将特征值缩放到零均值和单位方差。这有助于提高模型的收敛速度和性能,尤其是在使用梯度下降等优化算法时。
交叉验证(Cross-Validation)是一种评估模型性能的技术,它通过将数据集划分为多个子集,多次训练和测试模型,从而更准确地估计模型的泛化能力。常见的交叉验证方法有 k 折交叉验证(k-Fold Cross-Validation),即将数据集分成 k 个子集,每次使用 k-1 个子集进行训练,剩下的一个子集进行测试,重复 k 次。
importnumpy asnpimportpandas aspdfromsklearn.model_selection importtrain_test_split,cross_val_score,KFoldfromsklearn.preprocessing importStandardScalerfromsklearn.linear_model importLogisticRegressionfromsklearn.metrics importaccuracy_score,precision_score,recall_score,f1_score,confusion_matriximportseaborn assnsfromsklearn.datasets importload_wineimportmatplotlib.pyplot aspltimportwarnings
加载葡萄酒数据集并进行初步的数据处理,包括检查缺失值和数据标准化。
warnings.filterwarnings("ignore")# 设置中文字体为SimHeiplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False# 加载数据集data =load_wine()# 数据转换df =pd.DataFrame(data.data,columns=data.feature_names)df['Target']=data.target# 缺失值检测missing_values =df.isnull().sum()print("缺失值检测结果:\n",missing_values)# 数据提取X =df.drop('Target',axis=1)y =df['Target']# 数据标准化scaler =StandardScaler()X_scaled =scaler.fit_transform(X)
将数据集划分为训练集和验证集,以便评估模型的性能。
X_train,X_val,y_train,y_val =train_test_split(X_scaled,y,test_size=0.2,random_state=42)
使用逻辑回归模型进行多分类任务,并通过交叉验证评估模型的性能。
model =LogisticRegression(multi_class='multinomial',solver='lbfgs',max_iter=1000)# 十折交叉验证kf =KFold(n_splits=10,shuffle=True,random_state=42)cv_scores =cross_val_score(model,X_train,y_train,cv=kf,scoring='accuracy')print(f"平均准确率: {np.mean(cv_scores)}")# 训练模型model.fit(X_train,y_train)
对模型在验证集上的表现进行评估,计算各种性能指标。
y_val_pred =model.predict(X_val)# 计算混淆矩阵conf_matrix =confusion_matrix(y_val,y_val_pred)# 计算分类评估指标accuracy_val =accuracy_score(y_val,y_val_pred)precision_val =precision_score(y_val,y_val_pred,average='weighted')recall_val =recall_score(y_val,y_val_pred,average='weighted')f1_val =f1_score(y_val,y_val_pred,average='weighted')print(f"准确率: {accuracy_val}")print(f"精确率: {precision_val}")print(f"召回率: {recall_val}")print(f"F1分数: {f1_val}")
使用 Seaborn 库可视化混淆矩阵,以便更直观地理解模型的分类效果。
sns.heatmap(conf_matrix,annot=True,fmt='d',cmap='Blues',xticklabels=data.target_names,yticklabels=data.target_names)plt.title(f'混淆矩阵')plt.xlabel("预测值")plt.ylabel("真实值")plt.show()
importnumpy asnpimportpandas aspdfromsklearn.model_selection importtrain_test_split,cross_val_score,KFoldfromsklearn.preprocessing importStandardScalerfromsklearn.linear_model importLogisticRegressionfromsklearn.metrics importaccuracy_score,precision_score,recall_score,f1_score,confusion_matriximportseaborn assnsfromsklearn.datasets importload_wineimportmatplotlib.pyplot aspltimportwarningswarnings.filterwarnings("ignore")# 设置中文字体为SimHeiplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False# 加载数据集data =load_wine()# 数据转换df =pd.DataFrame(data.data,columns=data.feature_names)df['Target']=data.target# 缺失值检测missing_values =df.isnull().sum()print("缺失值检测结果:\n",missing_values)# 数据提取X =df.drop('Target',axis=1)y =df['Target']# 数据标准化scaler =StandardScaler()X_scaled =scaler.fit_transform(X)# 划分训练集和验证集X_train,X_val,y_train,y_val =train_test_split(X_scaled,y,test_size=0.2,random_state=42)# 构建模型model =LogisticRegression(multi_class='multinomial',solver='lbfgs',max_iter=1000)# 十折交叉验证kf =KFold(n_splits=10,shuffle=True,random_state=42)cv_scores =cross_val_score(model,X_train,y_train,cv=kf,scoring='accuracy')print(f"平均准确率: {np.mean(cv_scores)}")# 训练模型model.fit(X_train,y_train)# 模型预测y_val_pred =model.predict(X_val)# 计算混淆矩阵conf_matrix =confusion_matrix(y_val,y_val_pred)# 计算分类评估指标accuracy_val =accuracy_score(y_val,y_val_pred)precision_val =precision_score(y_val,y_val_pred,average='weighted')recall_val =recall_score(y_val,y_val_pred,average='weighted')f1_val =f1_score(y_val,y_val_pred,average='weighted')print(f"准确率: {accuracy_val}")print(f"精确率: {precision_val}")print(f"召回率: {recall_val}")print(f"F1分数: {f1_val}")# 可视化混淆矩阵sns.heatmap(conf_matrix,annot=True,fmt='d',cmap='Blues',xticklabels=data.target_names,yticklabels=data.target_names)plt.title(f'混淆矩阵')plt.xlabel("预测值")plt.ylabel("真实值")plt.show()
通过上述步骤,我们不仅构建了一个可以对葡萄酒进行分类的模型,还深入理解了逻辑回归、数据标准化、交叉验证和性能评估的基本原理。这些知识和技术在许多实际问题中都具有广泛的应用价值,希望本文能为读者提供有益的参考和启发。如果大家有任何问题或建议,欢迎随时交流讨论!