文章目录
实验一 分类技术——鸢尾花分类
采用所学分类算法,对鸢尾花数据进行分类,具体要求如下:
1.填补鸢尾花数据集中的缺失数据,并划分训练集、测试集
2.采用决策树、KNN、朴素贝叶斯对数据分类,比较其在测试集上的预测准确率;
3.可视化决策树模型,打印出特征属性的重要性。
一、分析及设计
1. 决策树
导入数据,将数据集分为70%训练集,30%测试集,调用tree库,将训练集放入clf这个原始模型中进行学习训练,随后得到一个具有特定参数的模型。最后,将测试集放入已经训练好的模型中进行预测。可视化决策树模型,更加直观的理解决策树的分类过程。
2. KNN
导入数据,将数据集分为70%训练集,30%测试集,调用K近邻算法库,将训练集放入knn这个原始模型中进行学习训练,随后得到一个具有特定参数的模型。最后,将测试集放入已经训练好的模型中进行预测。
3. 朴素贝叶斯
导入数据,将数据集分为70%训练集,30%测试集,调用GaussianNB库,随机划分训练集和测试集,将训练集放入clf这个原始模型中进行学习训练,随后得到一个具有特定参数的模型。最后,将测试集放入已经训练好的模型中进行预测。
二、详细实现
1. 决策树
(1) 导入数据
iris = datasets.load_iris()
(2) 将数据集分为70%训练集和30%测试集
X_train, X_test, y_train, y_test = train_test_split(
iris_X, iris_y, test_size=0.3)
(3) 训练决策树模型并打印预测结果
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train, y_train)
print(clf.predict(X_test))
(4) 预测准确率
accuracy = accuracy_score(y_test,clf.predict(X_test))
(5) 可视化决策树模型
tree.export_graphviz(clf)
feature_names = ['Calyx length',
'Calyx width',
'Petal length',
'petal width']
target_names = ['0','1','2']
dot_data = tree.export_graphviz(clf, out_file=None, feature_names = feature_names,
class_names=target_names,filled = True,rounded=True,special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png('iris.png')
2. KNN
(1) 导入数据
iris = datasets.load_iris()
(2) 将数据集分为70%训练集和30%测试集
X_train, X_test, y_train, y_test = train_test_split(
iris_X, iris_y, test_size=0.3)
(3) 训练KNN模型并打印预测结果
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
print(knn.predict(X_test))
(4) 预测准确率
accuracy = accuracy_score(y_test,knn.predict(X_test))
3. 朴素贝叶斯
(1) 导入数据
iris = datasets.load_iris()
(2) 将数据集分为70%训练集和30%测试集
X_train, X_test, y_train, y_test = train_test_split(
iris_X, iris_y, test_size=0.3)
(3) 训练KNN模型并打印预测结果
clf = GaussianNB()
clf = clf.fit(X_train, y_train)
print(clf.predict(X_test))
(4) 预测准确率
accuracy = accuracy_score(y_test,clf.predict(X_test))
三、实验结果
1. 决策树
(1)预测结果及准确率:
(2)可视化决策树
2. KNN
预测结果及准确率:
3. 朴素贝叶斯
预测结果及准确率:
由上述结果可以得到,KNN模型预测的准确率最高,约为98%