利用KNN算法,K=3对iris数据集进行分类。将训练集和测试集按照90%,10%比例分割。画出决策边界,绘制预测结果图,输出准确率和相关评分
时间: 2024-03-14 20:46:40 浏览: 72
好的,针对您的问题,我可以给出以下解答:
首先,需要加载iris数据集,并将其划分为训练集和测试集:
``` python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.1, random_state=42)
```
然后,创建一个KNN分类器,并使用训练集对其进行拟合:
``` python
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
```
接下来,我们可以使用测试集对模型进行评估,并计算准确率和相关评分:
``` python
from sklearn.metrics import accuracy_score, classification_report
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)
print(f"Accuracy: {accuracy}")
print(f"Report:\n{report}")
```
最后,我们可以绘制决策边界和预测结果图:
``` python
import numpy as np
import matplotlib.pyplot as plt
from mlxtend.plotting import plot_decision_regions
# 将数据集转换为二维数组,以便进行绘制
X = iris.data[:, :2]
y = iris.target
# 训练模型
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X, y)
# 绘制决策边界和预测结果图
plot_decision_regions(X, y, clf=knn, legend=2)
plt.xlabel("Sepal length (cm)")
plt.ylabel("Sepal width (cm)")
plt.title("KNN on Iris Dataset")
plt.show()
```
以上就是利用KNN算法,K=3对iris数据集进行分类的解答,希望能对您有所帮助。
阅读全文