KNN算法,并对鸢尾花数据集进行分类。
时间: 2024-05-10 20:15:29 浏览: 127
KNN算法是一种基于实例的学习算法,它通过计算待分类样本与已知类别样本之间的距离,选择距离最近的K个样本,根据这K个样本的类别进行投票,从而确定待分类样本的类别。
下面我们使用Python实现KNN算法,并对鸢尾花数据集进行分类。
首先,我们需要导入必要的库。在这个例子中,我们将使用scikit-learn库的load_iris函数加载鸢尾花数据集,并使用train_test_split函数将数据集划分为训练集和测试集。我们还将使用numpy库计算距离。代码如下:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import numpy as np
# 加载鸢尾花数据集
iris = load_iris()
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)
# 计算欧式距离
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2)**2))
```
接下来,我们定义KNN算法的主要函数。在这个函数中,我们将计算待分类样本与每个已知类别样本之间的距离,并选择距离最近的K个样本。然后,我们将根据这K个样本的类别进行投票,并返回待分类样本的类别。代码如下:
```python
# KNN算法
def knn(X_train, X_test, y_train, y_test, k):
# 预测结果列表
predictions = []
# 对于每个测试样本
for i in range(len(X_test)):
# 计算测试样本与每个训练样本之间的距离
distances = [euclidean_distance(X_test[i], x) for x in X_train]
# 选择距离最近的K个样本
k_indices = np.argsort(distances)[:k]
# 根据这K个样本的类别进行投票
k_nearest_labels = [y_train[i] for i in k_indices]
most_common = max(set(k_nearest_labels), key=k_nearest_labels.count)
# 将预测结果添加到预测结果列表中
predictions.append(most_common)
# 计算模型的准确率
accuracy = np.sum(predictions == y_test) / len(y_test)
return accuracy
```
最后,我们调用knn函数,并输出模型的准确率。代码如下:
```python
# 测试KNN算法
k = 5
accuracy = knn(X_train, X_test, y_train, y_test, k)
print("KNN算法的准确率为:", accuracy)
```
运行以上代码,即可得到KNN算法在鸢尾花数据集上的准确率。
阅读全文