机器学习之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


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐