用鸢尾花数据集实现KNN算法理论
时间: 2023-07-24 10:09:52 浏览: 93
手工实现KNN和朴素贝叶斯算法对鸢尾花数据进行自动分类 完整代码+数据 可直接运行
5星 · 资源好评率100%
下面是使用鸢尾花数据集实现KNN算法的代码示例:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
import numpy as np
def euclidean_distance(x1, x2):
"""
计算两个向量之间的欧氏距离
"""
return np.sqrt(np.sum((x1 - x2)**2))
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 = [self._predict(x) for x in X]
return np.array(y_pred)
def _predict(self, x):
# 计算输入样本与所有训练样本之间的距离
distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
# 选取距离最近的k个样本
k_indices = np.argsort(distances)[:self.k]
# 根据这k个样本的类别来预测输入样本的类别
k_nearest_labels = [self.y_train[i] for i in k_indices]
# 进行投票,选择出现最多的类别作为预测结果
most_common = Counter(k_nearest_labels).most_common(1)
return most_common[0][0]
if __name__ == '__main__':
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
knn = KNN(k=3)
knn.fit(X_train, y_train)
# 预测
y_pred = knn.predict(X_test)
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print('Accuracy:', acc)
```
上述代码中,首先使用`load_iris`函数加载鸢尾花数据集,然后使用`StandardScaler`进行数据预处理,将数据进行标准化,再使用`train_test_split`函数进行训练集和测试集的划分。接着,使用我们实现的KNN算法进行训练和预测,并使用`accuracy_score`函数计算模型的准确率。
阅读全文