机器学习——KNN算法

一、什么是KNN

k近邻法(k-nearest neighbor,k-NN)是一种基本的分类和回归方法,是监督学习方法里的一种常用方法。k近邻算法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例类别,通过多数表决等方式进行预测。

如何理解KNN

如下图所示:

当KNN的K定义为3,则在五角星最近的3个点内,分类为B的点最多,则五角星的分类为B

当KNN的K定义为6,则在五角星最近的6个点内,分类为A的点最多,则五角星的分类为A

机器学习——KNN算法_第1张图片

二、三要素

距离度量算法

一般使用的是欧氏距离。也可以使用其他距离:曼哈顿距离、切比雪夫距离、闵可夫斯基距离等。各种距离方法见链接

k值的确定

在许多实际应用中数据是不充足的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据,把给定的数据进行切分,将切分的数据组合为训练集与测试集,在此基础上反复进行训练测试以及模型的选择。在实现过程中将采用sklearn.model_selection.cross_val_score()实现交叉验证选取k值。

分类决策

knn使用的分类决策规则是多数表决,如果损失函数为0-1损失函数,那么要使误分类率最小即使经验风险最小,多数表决规则实际上就等同于经验风险最小化。

三、KNN算法实现

原文链接

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,
                                       weights='uniform',
                                       algorithm='auto',
                                       leaf_size=30,
                                       p=2,
                                       metric='minkowski',
                                       metric_params=None,
                                       n_jobs=None
                                       )

参数如下:

机器学习——KNN算法_第2张图片

属性如下:

机器学习——KNN算法_第3张图片

方法如下:

机器学习——KNN算法_第4张图片

四、KNN进行简单二维坐标分类

数据集

机器学习——KNN算法_第5张图片
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

# 载入数据
data = np.genfromtxt("../data.csv", delimiter=",")
x = data[:, 0:-1]
y = data[:, -1]
机器学习——KNN算法_第6张图片
#训练集和测试集切割
x_train, x_test , y_train, y_test = train_test_split(x, y, test_size = 0.3)
print(y_train)
print(y_test)
#[1. 0. 0. 0. 0. 1. 1. 0. 0. 1. 0. 1. 1. 1.]
#[1. 1. 0. 0. 1. 0.]

#knn
knn = KNeighborsClassifier()
knn.fit(x_train, y_train)
print(knn.predict(x_test))#打印预测内容
print(y_test)#实际标签
# [1. 1. 0. 0. 1. 0.]
# [1. 1. 0. 0. 1. 0.]

#自己用个点测试一下
print(knn.predict([[3.2, 2.1]]))
# [1.]

你可能感兴趣的:(机器学习——KNN算法)