您的位置:首页 > 其它

机器学习实战之k-近邻算法(3)---如何可视化数据

2014-11-29 17:23 513 查看
关于可视化:

《机器学习实战》书中的一个小错误,P22的datingTestSet.txt这个文件,根据网上的源代码,应该选择datingTestSet2.txt这个文件。主要的区别是最后的标签,作者原来使用字符串‘veryLike’作为标签,但是Python转换会出现ValueError: invalid literal for int() with base 10: 'largeDoses'的错误。所以改成后面的文件就可以了。后面直接用1 2 3 代表not like, general like, very like。这个错误一开始用百度查不到,改用Google(反向代理),第二个链接就是。哎。。。国内啊。。。

from numpy import *
import operator
#创建数据集
def createDataSet():
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels
#根据输入测试实例进行k-近邻分类
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
sortedClassCount = sorted(classCount.iteritems(), key = operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
#处理输入格式问题,从文件中读取数据
def file2matrix(filename, dim2):
fr = open(filename)
arrayOLines = fr.readlines()
numberOfLines = len(arrayOLines)
returnMat = zeros((numberOfLines, dim2))
classLabelVector = []
index = 0
for line in arrayOLines:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index, :] = listFromLine[0:dim2]
classLabelVector.append(int(listFromLine[-1]))
index += 1
return returnMat, classLabelVector
>>>import kNN
>>> reload(kNN)
<module 'kNN' from 'kNN.pyc'>
>>> datingDataMat, datingLabels = kNN.file2matrix('datingTestSet2.txt', 3)

得到了约会网站的数据之后,我们可以可视化出来。

利用Matplotlib创建散点图,python(x, y)内嵌这个,直接import即可。

>>> mimport matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111) >>> ax.scatter(datingDataMat[:,1], datingDataMat[:,2])
>>> plt.show()






这个是“玩视频游戏消耗时间比”和“每周所消费的冰淇淋公升数”的二维图。

需要不同的颜色来得到更好的可视化效果。

scatter函数的使用。

ax.scatter(datingDataMat[:,1], datingDataMat[:, 2], 15.0*array(datingLabels), 15.0*array(datingLabels))

这句代码替换前面的对应代码,如果出现name 'array' is not defined ,请在前面加这句:

from numpy import *
下面是青色,暗红色,黑色三种点,是利用了15 * datingLabels的1, 2, 3作为不同点的颜色和尺寸。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: