KNN-K近邻 分类算法原理
# 从训练集中找到和新数据最接近的K条记录,然后根据他们的主要分类来决定新的数据的类别
# 图中的数据集是良好的数据,即都打好了label,一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆形是我们待分类的数据。
# 具体是每次来一个未知的样本点,就在附近找K个最近的点进行投票
# 如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。
# 如果K=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形。
# KNN本质是基于一种数据统计的方法!其实很多机器学习算法也是基于数据统计的。
# K的含义:来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c
# 抽样方法
# 打乱顺序后的随机数组 = numpy.random.permutation(n_随机样本的个数)
# API neighbors.KNeighborsClassifier KNN建模的方法
# knnModel = neighbors.KNeighborsClassifier(n_neigbors = 5)
# n_neighbors n的个数
# 返回 KNN模型
# knnModel.fit(tData_训练数据的属性数据,tTarget_训练数据的目标数据) KNN训练方法
# sklearn包
# knnModel.score(sData_测试数据的属性数据,sTarget测试数据的目标数据) KNN评分方法
# knnModel.predict(pdata_需要预测的属性数据) --》模型预测的结果
KNN-K近邻 源代码
import numpy
from sklearn import datasets
#引入数据集
iris = datasets.load_iris()
#查看数据的规模
iris.data.shape # shape数据的规模
#查看训练目标的总类
numpy.unique(iris.target) # count(distinct target)
#随机重排列
permutation = numpy.random.permutation(iris.target.size) # iris.target.size -->len(iris.target)
iris.data = iris.data[permutation] # 随机的分类对应的数据
iris.target = iris.target[permutation] # 重排
from sklearn import neighbors
#搭建KNN模型
knnModel = neighbors.KNeighborsClassifier(n_neighbors=3) # 训练目标为三类
#训练模型
knnModel.fit(iris.data[:100], iris.target[:100]) # 前100列
from sklearn import cross_validation
#对模型进行评价
knnModel.score(iris.data[100:], iris.target[100:])
cross_validation.cross_val_score(
knnModel,
iris.data[100:],
iris.target[100:]
) # 交叉评分,三个分类的命中率,0,1,2 的命中率
#使用模型进行预测
knnModel.predict([[0.1, 0.2, 0.3, 0.4]])
参考文献
作者A:ken