knn 实现鸢尾花分类预测 python并画出不同k值下的错误率图标
时间: 2024-12-08 19:25:01 浏览: 28
KNN(K-Nearest Neighbors)算法是一种基于实例的学习方法,常用于分类任务,通过测量样本之间的距离来确定新数据点所属类别。在Python中,我们可以使用sklearn库中的`KNeighborsClassifier`来实现鸢尾花(Iris)数据集的分类,并绘制不同k值下错误率的变化图。
首先,你需要安装必要的库,如sklearn、matplotlib等:
```bash
pip install sklearn matplotlib numpy
```
然后,你可以按照以下步骤操作:
1. 加载鸢尾花数据:
```python
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
```
2. 划分训练集和测试集:
```python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
3. 创建一个KNN分类器并遍历不同的k值:
```python
import matplotlib.pyplot as plt
import numpy as np
error_rate = []
for k in range(1, 51): # 遍历1到50的k值
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
predictions = knn.predict(X_test)
error_rate.append(np.mean(predictions != y_test)) # 计算错误率
k_values = list(range(1, len(error_rate) + 1))
```
4. 绘制错误率图表:
```python
plt.figure(figsize=(8, 6))
plt.plot(k_values, error_rate, 'r-o')
plt.title('Error Rate vs. K values (KNN)')
plt.xlabel('Number of Neighbors (K)')
plt.ylabel('Classification Error Rate')
plt.grid(True)
plt.show()
```
这将生成一张显示不同k值下错误率变化的折线图。图表中横坐标表示k值,纵坐标表示错误率,你可以从图中观察随着k值增加,错误率的趋势。
阅读全文