机器学习----K邻近(K-Nearest Neighbors,KNN)算法原理及python实现
k近邻(k-Nearest Neihbor , kNN)学习就是一种常用的监督学习方法。它的工作机制:给定测试样本,基于距离度量找出训练集中与测试样本最靠近的k个训练样本,然后基于这k个邻居的信息来进行预测。K近邻算法通过在整个训练集中搜索 K个最相似的实例(欧氏距离最近的k个),并为所有这些K个实例分配一个公共输出变量,来对预测对象进行分类。属于有监督学习,是一种基于实例的学习,是局部近似和将所
·
- k近邻(k-Nearest Neihbor , kNN)学习就是一种常用的监督学习方法。它的工作机制:给定测试样本,基于距离度量找出训练集中与测试样本最靠近的k个训练样本,然后基于这k个邻居的信息来进行预测。
K近邻算法通过在整个训练集中搜索 K个最相似的实例(欧氏距离最近的k个),并为所有这些K个实例分配一个公共输出变量,来对预测对象进行分类。属于有监督学习,是一种基于实例的学习,是局部近似和将所有计算推迟到分类之后的惰性学习。用最近的邻居(k)来预测未知数据点。
k 值是预测精度的一个关键因素,无论是分类还是回归,衡量邻居的权重都非常有用,较近邻居的权重比较远邻居的权重大。
python代码实现为:
# coding:utf-8
from numpy import *
import operator
def creataDataSet():
'''
labels中 A代表爱情片 B代表动作片
:return:
'''
#坐标代表在二维中的点,x坐标表示动作元素,y坐标表示吻戏元素
group = array([[1, 101], [5, 89], [108, 5], [115, 8]])
#labels表示上面四个坐标分别属于哪一类,
labels = ['爱情片', '爱情片', '动作片', '动作片']
return group, labels
# k-近邻算法
def knn(inX, dataSet, labels, k):
# shape读取数据矩阵第一维度的长度
dataSetSize = dataSet.shape[0]
# tile重复数组inX,有dataSet行 1个dataSet列,减法计算差值
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
# **是幂运算的意思,这里用的欧式距离
sqDiffMat = diffMat ** 2
# 普通sum默认参数为axis=0为普通相加,axis=1为一行的行向量相加
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances ** 0.5
# argsort返回数值从小到大的索引值(数组索引0,1,2,3)
sortedDistIndicies = distances.argsort()
# 选择距离最小的k个点
classCount = {}
for i in range(k):
# 根据排序结果的索引值返回靠近的前k个标签
voteLabel = labels[sortedDistIndicies[i]]
# 各个标签出现频率
classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
# reverse默认升序 key关键字排序itemgetter(1)按照第一维度排序(0,1,2,3)
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] #这里面存储的就是离目标点最近的类别名
if __name__ == '__main__':
group, labels = creataDataSet()
knn = knn([100, 20], group, labels, 3) #k=3
print("[100,20]属于",knn)
训练集所表示意思在代码中注释出了,最终输入一个二维测试点,代码输出它所属的类别:
[100,20]属于 动作片
更多推荐


所有评论(0)