K-Nearest Neighbors (KNN) 是一种简单而强大的分类算法,它根据一个样本最近邻的标签来预测该样本的标签。下面是一个使用 Python 语言和 scikit-learn 库实现 KNN 分类器的基本示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载数据集
iris = 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 = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
这段代码首先加载了鸢尾花(Iris)数据集,这是一个常用的分类数据集。然后,它将数据集分为训练集和测试集。接着,创建了一个 KNeighborsClassifier
实例,其中 n_neighbors
参数设置为 3,这意味着分类决策将基于最近的 3 个邻居。之后,使用训练集数据训练模型,并在测试集上进行预测。最后,计算并打印出模型的准确率。
如果你想要从头开始实现 KNN 算法,不使用 scikit-learn 库,下面是一个基本的 KNN 分类器的实现示例:
import numpy as np
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 = np.sqrt((self.X_train - x) ** 2).sum(axis=1)
# 获取最近的 K 个邻居的索引
k_indices = distances.argsort()[:self.k]
# 获取这些邻居的标签
k_nearest_labels = self.y_train[k_indices]
# 投票获取最常见的标签
most_common = np.argmax(np.bincount(k_nearest_labels))
return most_common
# 示例使用
if __name__ == "__main__":
# 假设有一些数据和标签
X_train = np.array([[1, 2], [2, 3], [3, 1], [6, 5], [7, 7], [8, 6]])
y_train = np.array([0, 0, 0, 1, 1, 1])
X_test = np.array([[0, 0], [5, 5]])
knn = KNN(k=3)
knn.fit(X_train, y_train)
predictions = knn.predict(X_test)
print(predictions)