k近邻学习

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、算法思想

二、算法优缺点

1、优点

2、缺点

三、python实现


一、算法思想

给定测试样本,基于某种距离度量找到训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。

在分类任务中可使用“投票法”(即选择这k个样本中出现最多的类别标记作为预测结果);在回归任务中可使用“平均法”(即将这k个样本的实际输出标记的平均值作为预测结果);还可以基于距离远近进行平均加权或加权投票,距离越近的样本权重越大。


二、算法优缺点

1、优点

  • 简单易用
  • 模型训练时间快(惰性算法)
  • 对异常值不敏感

2、缺点

  • 对内存要求较高(因为该算法存储了所有训练数据)
  • 预测阶段可能很慢
  • 对不相关的功能和数据规模敏感

三、python实现

from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import numpy as np
import seaborn as sns
from sklearn.neighbors import KNeighborsClassifier

iris = datasets.load_iris()# 导入鸢尾花数据集
data = iris.data[:, :2]
target = iris.target

#分出训练集和测试集
train_x,test_x,train_y,test_y = train_test_split(data, target,test_size=0.4,random_state=0)
# 训练并预测,其中选取k=15
clf = KNeighborsClassifier(15, 'distance')
clf.fit(train_x, train_y)
Z = clf.predict(test_x)
print('准确率:' ,clf.score(test_x, test_y))

colormap = dict(zip(np.unique(target), sns.color_palette()[:3]))
plt.scatter(train_x[:,0], train_x[:,1], edgecolors=[colormap[x] for x in train_y],c='', s=40, label='train_data')
plt.scatter(test_x[:,0], test_x[:,1], marker='*', color=[colormap[x] for x in Z], s=10, label='pre_data')
plt.legend()
plt.show()

result:

k近邻学习_第1张图片


欢迎大家在评论区批评指正,谢谢~

你可能感兴趣的:(机器学习,knn,机器学习)