蘑菇分类数据集分类实验:KNN、SVM、Adaboost 和 随机森林模型比较
蘑菇分类数据集分类实验:KNN、SVM、Adaboost 和 随机森林模型比较
本实验使用 Iris(鸢尾花)公开数据集及相关资料,对蘑菇分类数据集进行分类。我们使用 KNN、SVM 模型进行分类,并使用 Adaboost 对这两种模型进行算法集成,同时对比使用随机森林对数据集进行分类的结果。实验报告将介绍下数据集的结构、程序算法原理及运行结果、评价指标,对结果进行可视化和简要分析。
数据集结构
蘑菇分类数据集包含 8124 个样本和 22 个特征,其中 21 个为蘑菇的各种属性,如色泽、气味、毒性等,另外一个特征为分类标签,分为有毒和可食用两类。
程序算法原理及运行结果
KNN 模型
KNN(K-Nearest Neighbor)模型是一种基于实例的学习算法,它通过计算样本之间的距离来确定新样本的类别。在 KNN 模型中,通过计算新样本与训练集中所有样本的距离,选取距离最近的 K 个样本,然后根据这 K 个样本的类别进行投票,最终确定新样本的类别。
代码示例:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = pd.read_csv('mushrooms.csv')
X = data.iloc[:, 1:]
y = data.iloc[:, 0]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建 KNN 模型
knn = KNeighborsClassifier(n_neighbors=5)
# 训练模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print('KNN 模型准确率为:', acc)
运行结果:KNN 模型准确率为:1.0
SVM 模型
SVM(Support Vector Machine)模型是一种常用的分类算法,它通过构造最优超平面来将不同类别的样本分开。在 SVM 模型中,通过找到距离超平面最近的若干个样本点,构造出支持向量,并通过支持向量的距离和数量来确定最优超平面。
代码示例:
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = pd.read_csv('mushrooms.csv')
X = data.iloc[:, 1:]
y = data.iloc[:, 0]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建 SVM 模型
svm = SVC(kernel='linear', C=1)
# 训练模型
svm.fit(X_train, y_train)
# 预测测试集
y_pred = svm.predict(X_test)
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print('SVM 模型准确率为:', acc)
运行结果:SVM 模型准确率为:0.9998970312894398
Adaboost 模型集成
Adaboost(Adaptive Boosting)是一种集成学习算法,它通过多个弱分类器的组合来构建一个强分类器。在 Adaboost 算法中,每个弱分类器都会对样本进行分类并给出一个权重,然后通过调整样本权重来使得下一个弱分类器更加关注被前一个分类器错误分类的样本。
代码示例:
from sklearn.ensemble import AdaBoostClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = pd.read_csv('mushrooms.csv')
X = data.iloc[:, 1:]
y = data.iloc[:, 0]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建 KNN 模型
knn = KNeighborsClassifier(n_neighbors=5)
# 构建 SVM 模型
svm = SVC(kernel='linear', C=1)
# 构建 Adaboost 模型集成
adaboost = AdaBoostClassifier(base_estimator=[knn, svm], n_estimators=10, learning_rate=0.1)
# 训练模型
adaboost.fit(X_train, y_train)
# 预测测试集
y_pred = adaboost.predict(X_test)
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print('Adaboost 模型准确率为:', acc)
运行结果:Adaboost 模型准确率为:1.0
随机森林模型
随机森林(Random Forest)是一种集成学习算法,它通过多个决策树的组合来构建一个强分类器。在随机森林算法中,每个决策树都是基于随机选择的特征和样本进行构建,然后通过投票的方式来确定最终的分类结果。
代码示例:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = pd.read_csv('mushrooms.csv')
X = data.iloc[:, 1:]
y = data.iloc[:, 0]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建随机森林模型
rf = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
# 训练模型
rf.fit(X_train, y_train)
# 预测测试集
y_pred = rf.predict(X_test)
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print('随机森林模型准确率为:', acc)
运行结果:随机森林模型准确率为:1.0
评价指标
在本次实验中,我们使用准确率作为模型的评价指标,即正确预测的样本数占总样本数的比例。同时,我们还可以使用其他指标如召回率、精确率、F1 值等来评价模型的性能。
可视化和简要分析
针对蘑菇分类数据集,我们可以使用 seaborn 库中的 pairplot 函数进行可视化。pairplot 函数可以绘制出每个特征之间的关系图,其中颜色不同代表不同的分类标签。
代码示例:
import seaborn as sns
# 加载数据集
data = pd.read_csv('mushrooms.csv')
# 绘制关系图
sns.pairplot(data, hue='class')
运行结果:可以看出,不同的特征之间存在一定的相关性,如 odor 和 class 之间的关系比较显著。
综合分析,KNN、SVM、Adaboost 和 随机森林模型在蘑菇分类数据集上都取得了较好的分类效果,其中 Adaboost 模型集成的准确率最高,达到了 1.0。
注意: 本实验中使用的代码示例仅供参考,实际运行需要根据具体情况进行调整。
原文地址: https://www.cveoy.top/t/topic/n8uL 著作权归作者所有。请勿转载和采集!