knn算法python代码
时间: 2023-07-22 10:24:57 浏览: 67
下面是一个简单的 KNN 算法 Python 代码示例:
```python
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_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]
```
使用方法:
```python
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 导入数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化 KNN 模型,k=3
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)
```