knn算法实现鸢尾花分类
时间: 2023-11-17 09:08:35 浏览: 24
KNN算法是一种基于实例的学习方法,它通过测量不同特征值之间的距离进行分类。在鸢尾花分类问题中,我们需要根据花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width)这四个特征值来判断鸢尾花的种类。
以下是使用Python实现KNN算法进行鸢尾花分类的代码:
```python
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 切分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 定义KNN模型
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for i in range(len(X)):
# 计算测试数据与训练数据之间的距离
distances = np.sqrt(np.sum(np.square(self.X_train - X[i, :]), axis=1))
# 获取距离最近的k个训练数据的索引
k_nearest_neighbors = np.argsort(distances)[:self.k]
# 统计k个训练数据中出现次数最多的类别
y_pred.append(np.argmax(np.bincount(self.y_train[k_nearest_neighbors])))
return y_pred
# 使用KNN模型进行鸢尾花分类
knn = KNN(k=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
# 计算模型准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
该代码首先加载鸢尾花数据集,然后将数据集切分为训练集和测试集。接着定义了一个KNN类,包含模型的训练和预测方法。在预测方法中,我们首先计算测试数据与训练数据之间的距离,然后获取距离最近的k个训练数据的索引,最后统计k个训练数据中出现次数最多的类别作为预测结果。最后使用KNN模型进行鸢尾花分类,并计算模型准确率。