机器学习之kNN算法
机器学习之kNN算法
第一个机器学习算法:kNN(k-Nearest Neighbors)算法。
优点:
kNN算法比较容易掌握,同时也比较有效。
缺点:
当数据实例很大的时候,比较耗内存,同时kNN算法不能反映数据实例的内部特性。
举例一,对电影类型进行判断,根据kiss和kick数来判断电影是动作片还是爱情片,还是其他。。。:
对于如下的数据集
1.导入数据, 下列源代码保存在kNN.py中。
from numpy import *
import operator
def createDataSet():
group = array([[3,104], [2, 100], [1, 81], [101, 10], [99, 5], [98, 2]])
labels = ['romance','romance','romance', 'action', 'action', 'action']
return group, labels
2.实现k-NN算法,下列源代码保存在kNN.py中
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistances = sqDiffMat.sum(axis = 1)
distances = sqDistances ** 0.5
sortedDistIndicies = distances.argsort()
classCount = {}
for i in range (k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
print(classCount)
sortedClassCount = sorted(classCount.iteritems(), key = operator.itemgetter(1), reverse = True)
print(sortedClassCount)
return sortedClassCount[0][0]
3. 测试,待分类的数据为inX=[18, 90]。下列源代码保存在test.py中
import kNN
from numpy import *
trainSet, labels = kNN.createDataSet()
inX = array([[18, 90]])
k = 3
result = kNN.classify0(inX, trainSet, labels, k)
print(result)
运行的输出结果为
romance