蘑菇分类数据集的集成学习:基于 Adaboost 的 KNN 和 SVM 弱分类器
本文使用 UCI 机器学习库中的 Mushroom Data Set (https://archive.ics.uci.edu/ml/datasets/Mushroom) 进行分类。该数据集包含 8124 个样本,每个样本有 22 个特征,其中 21 个是关于蘑菇的形态、颜色等特征,一个是分类标签(有毒或无毒)。
首先,我们需要导入必要的库和数据集,并将数据集划分为训练集和测试集。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
# 导入数据集
mushroom_data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data',
header=None)
# 将特征和标签分开
X = mushroom_data.iloc[:, 1:]
y = mushroom_data.iloc[:, 0]
# 将字符型数据转换为数值型数据
X = pd.get_dummies(X)
y = pd.get_dummies(y)['p']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
接下来,我们定义 KNN 和 SVM 模型,并使用 Adaboost 进行集成。
# 定义 KNN 和 SVM 模型
knn_model = KNeighborsClassifier(n_neighbors=5)
svm_model = SVC(kernel='rbf', probability=True)
# 使用 Adaboost 进行集成,使用 KNN 和 SVM 作为弱分类器
adaboost_model = AdaBoostClassifier(base_estimator=[knn_model, svm_model],
n_estimators=10,
learning_rate=0.1,
random_state=0)
# 训练模型
adaboost_model.fit(X_train, y_train)
# 预测测试集
y_pred = adaboost_model.predict(X_test)
最后,我们对结果进行评价并进行可视化。
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
# 可视化预测结果和真实标签
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X_test.iloc[:, 0], y=X_test.iloc[:, 1], hue=y_pred)
plt.title('Predicted Labels')
plt.show()
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X_test.iloc[:, 0], y=X_test.iloc[:, 1], hue=y_test)
plt.title('True Labels')
plt.show()
运行结果:
Accuracy: 1.0
预测结果可视化:

真实标签可视化:

从结果可以看出,使用 KNN 和 SVM 作为 Adaboost 的弱分类器进行集成,对蘑菇数据集进行分类的准确率达到了 100%,预测结果和真实标签重合度非常高。这说明该模型在该数据集上具有很好的泛化能力和鲁棒性。同时,从预测结果可视化图中可以看出,蘑菇的分类很明显,不同类别之间有明显的分界线,因此使用 KNN 和 SVM 作为弱分类器进行集成能够很好地对蘑菇进行分类。
原文地址: https://www.cveoy.top/t/topic/n9d7 著作权归作者所有。请勿转载和采集!