现在我们已经从文文件中导入了数据,并将其格式化为想要的格式,接着我们需要了解数据的真是含义,我们可以直观的浏览文本文件,但是这种方法非常不友好,一般来说,我们会采用图形化的方式直观的展示数据。下面我们就用Python图形化工具来图形化展示数据内容,以便辨识出一些数据模式。
- 分析数据,使用
Matplotlib
创建散点图
pip install matplotlib
接下来打开python命令行,我们对刚才读入的内容进行测试的展示
>>> from matplotlib import *>>> import matplotlib.pyplot as plt>>> import kNN>>> import numpy as np>>> mat, vec = kNN.file2matrix('datingTestSet2.txt')>>> fig = plt.figure()>>> ax = fig.add_subplot(111)>>> ax.scatter(mat[:, 1], mat[:, 2], 15.0*np.array(vec), 15.0*np.array(vec))<matplotlib.collections.PathCollection object at 0x1087cf0d0>>>> plt.show()
这个时候,我们展示的是数据集的第一列与第二列所绘制的图,这里我们很难看出来什么端倪,所以我们尝试使用第一列和第二列作为特征来绘图,重新书写上边代码:
ax.scatter(mat[:, 0], mat[:, 1], 15.0*np.array(vec), 15.0*np.array(vec))
然后我们得到了以下数据图:
这次,我们可以看到,图中清晰的标识了3个不同的样本分类区域。
- 准备数据,归一化数值
我们随便的抽取了4组差异比较大的数据
玩游戏所消耗时间里程数冰激凌公升数样本分类10.84000.51212134000.9330200001.12467320000.12我们很容易发现,如果我们计算样本3和样本4之间的距离,可以使用下边的方法
$\sqrt{(0-67)^2 + (20000 + 32000)^2 + (1.1-0.1)^2}$
但是这些大的值堆结果的影响比较大,因此,作为比较重要的特征属性,不应该如此的影响计算结果,所以在处理数据的时候,我们对数据进行归一化处理,将取值的范围处理到0 - 1或者-1 ~ -1之间,下面的公事,可以将任意范围内的特征值转换为0-1区间内的值: