
贝叶斯算法实践-西瓜分类实践1、望大家在资料-机器学习农业数据集下载waltermellon数据集2、对该数据采用贝叶斯分类器算法进行分类3、在实践过程中要求使用LabelEncoder对特征进行编码因为该数据集比较小大家可以不用拆分训练集和测试集直接用全部数据训练和测试4、采用分类评估标准对结果进行评估完成比较快的同学请对比不同贝叶斯算法的区别完成比较快的同学请绘制混淆矩阵CategoricalNB — scikit-learn 1.8.0 文档https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.CategoricalNB.html贝叶斯算法实践-西瓜分类watermelon数据集 一、项目要求1.使用 watermelonfull.csv 数据集2.采用贝叶斯分类器CategoricalNB 或 MultinomialNB3.使用 LabelEncoder 对特征进行编码4.数据集较小不拆分训练集和测试集全数据训练并评估5.输出分类评估结果6.进阶对比不同贝叶斯算法7.进阶绘制混淆矩阵 二、完整代码importpandasaspdimportnumpyasnpfromsklearn.preprocessingimportLabelEncoderfromsklearn.naive_bayesimportCategoricalNB,MultinomialNB,GaussianNBfromsklearn.metricsimportaccuracy_score,classification_report,confusion_matriximportmatplotlib.pyplotaspltimportseabornassns# 设置中文字体plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False# 1. 加载数据集dfpd.read_csv(watermelonfull.csv,encodinggbk)# 注意编码print(数据形状:,df.shape)print(前5行:\n,df.head())# 2. 使用 LabelEncoder 对所有特征进行编码le_dict{}# 保存每个特征的编码器方便逆转换df_encodeddf.copy()forcolindf_encoded.columns:leLabelEncoder()df_encoded[col]le.fit_transform(df_encoded[col])le_dict[col]leprint(\n编码后数据前5行:\n,df_encoded.head())# 3. 分离特征与标签假设最后一列为好瓜Xdf_encoded.drop(好瓜,axis1)ydf_encoded[好瓜]print(特征形状:,X.shape,标签形状:,y.shape)# 4. 使用 CategoricalNB 训练专为离散特征设计model_catCategoricalNB()model_cat.fit(X,y)y_pred_catmodel_cat.predict(X)# 5. 评估结果print(\n*50)print( CategoricalNB 分类结果)print(*50)print(准确率:,accuracy_score(y,y_pred_cat))print(\n分类报告:)print(classification_report(y,y_pred_cat,target_names[坏瓜,好瓜]))# 6. 对比其他贝叶斯算法print(\n*50)print( 不同贝叶斯算法对比)print(*50)# 6.1 MultinomialNBmodel_mulMultinomialNB()model_mul.fit(X,y)y_pred_mulmodel_mul.predict(X)acc_mulaccuracy_score(y,y_pred_mul)print(fMultinomialNB 准确率:{acc_mul:.4f})# 6.2 GaussianNBmodel_gauGaussianNB()model_gau.fit(X,y)y_pred_gaumodel_gau.predict(X)acc_gauaccuracy_score(y,y_pred_gau)print(fGaussianNB 准确率:{acc_gau:.4f})# 6.3 CategoricalNBacc_cataccuracy_score(y,y_pred_cat)print(fCategoricalNB 准确率:{acc_cat:.4f})# 7. 绘制混淆矩阵fig,axesplt.subplots(1,3,figsize(15,5))forax,(model,name,y_pred)inzip(axes,[(model_cat,CategoricalNB,y_pred_cat),(model_mul,MultinomialNB,y_pred_mul),(model_gau,GaussianNB,y_pred_gau)]):cmconfusion_matrix(y,y_pred)sns.heatmap(cm,annotTrue,fmtd,cmapBlues,axax,xticklabels[坏瓜,好瓜],yticklabels[坏瓜,好瓜])ax.set_title(name)ax.set_xlabel(预测值)ax.set_ylabel(真实值)plt.suptitle(三种贝叶斯算法混淆矩阵对比,fontsize16)plt.tight_layout()plt.show()三、三种贝叶斯算法区别1.CategoricalNB适用于特征是离散类别变量的情况是此数据集的最佳选择。2.MultinomialNB适用于特征表示计数或频率的场景如文本分类中的词频。3.GaussianNB假设特征服从高斯正态分布适用于连续数值型特征。 四、算法选择建议-西瓜数据集特征均为离散类别应优先使用 CategoricalNB。-若特征为连续值使用 GaussianNB但需先标准化。-文本/频率数据使用 MultinomialNB。