如果一个样本在特征空间中的k个最“相似”
(即特征空间中最邻近)的样本中的大多数属于某一个类别,
则该样本也属于这个类别
相似度:即两个点的距离来衡量 距离越近 越近 相似度越高
K近临 算法步骤
- 计算已知类别数据集中的点与当前点之间的距离;
- 按照距离递增次序排序;
- 选取与当前点距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前k个点出现频率最高的类别作为当前点的预测分。
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
if __name__ == '__main__':
# 加载测试数据
dataset = load_iris()
X = dataset.data
y = dataset.target
# 将数组或矩阵拆分为 随机训练 和 测试子集
Xd_train, Xd_test, y_train, y_test = train_test_split(X, y, random_state=14)
# 使用 K近邻 算法
# KNeighborsClassifier是K近邻算法的一个类,一般都使用欧式距离进行测量
# n_neighbors:就是选取最近的点的个数:k
# leaf_size:这个是构造树的大小,值一般选取默认值即可,太大会影响速度。
# n_jobs :默认值1,选取 - 1 占据CPU比重会减小,但运行速度也会变慢,所有的core都会运行。
# 使用X作为训练数据 和 y作为目标值来拟合模型
clf = KNeighborsClassifier(n_neighbors=3).fit(Xd_train, y_train)
y_predicted = clf.predict(Xd_test)
# 准确率
accuracy = np.mean(y_predicted == y_test) * 100
print("y_test ", y_test) # 测试数据
print("y_predicted", y_predicted) # 预测数据
print("accuracy:", accuracy) # 准确率