运行结果
从结果可以分析出已经将文本文件导入了数据,并将其转换了想要的格式,接下来就可以采用图形化的方式直观地展示数据 。
2.2 可视化数据
文章插图
我们使用制作了文本数据的散点图,我们可以根据图形实现数据的分析 。
from numpy import *import matplotlibimport matplotlib.pyplot as pltfrom matplotlib.patches import Rectanglen = 1000# number of points to createxcord1 = []ycord1 = []xcord2 = []ycord2 = []xcord3 = []ycord3 = []markers = []colors = []fw = open('testSet.txt', 'w')for i in range(n):[r0, r1] = random.standard_normal(2)myClass = random.uniform(0, 1)if (myClass <= 0.16):fFlyer = random.uniform(22000, 60000)tats = 3 + 1.6*r1markers.append(20)colors.append(2.1)classLabel = 1# 'didntLike'xcord1.append(fFlyer)ycord1.append(tats)elif ((myClass > 0.16) and (myClass <= 0.33)):fFlyer = 6000*r0 + 70000tats = 10 + 3*r1 + 2*r0markers.append(20)colors.append(1.1)classLabel = 1# 'didntLike'if (tats < 0): tats = 0if (fFlyer < 0): fFlyer = 0xcord1.append(fFlyer); ycord1.append(tats)elif ((myClass > 0.33) and (myClass <= 0.66)):fFlyer = 5000*r0 + 10000tats = 3 + 2.8*r1markers.append(30)colors.append(1.1)classLabel = 2# 'smallDoses'if (tats < 0): tats = 0if (fFlyer < 0): fFlyer = 0xcord2.append(fFlyer); ycord2.append(tats)else:fFlyer = 10000*r0 + 35000tats = 10 + 2.0*r1markers.append(50)colors.append(0.1)classLabel = 3# 'largeDoses'if (tats < 0): tats = 0if (fFlyer < 0): fFlyer = 0xcord3.append(fFlyer)ycord3.append(tats)fw.close()fig = plt.figure()ax = fig.add_subplot(111)# ax.scatter(xcord,ycord, c=colors, s=markers)type1 = ax.scatter(xcord1, ycord1, s=20, c='red')type2 = ax.scatter(xcord2, ycord2, s=30, c='green')type3 = ax.scatter(xcord3, ycord3, s=50, c='blue')ax.legend([type1, type2, type3], ["Did Not Like", "Liked in Small Doses", "Liked in Large Doses"], loc=2)ax.axis([-5000, 100000, -2, 25])plt.xlabel('Frequent Flyier Miles Earned Per Year')plt.ylabel('Percentage of Time Spent Playing Video Games')plt.show()
![在这里插入图片描述](,,,ogpY=,,,t_70,g_se,x_16
2.3 归一化数据
表2-3给出了提取的四组数据,如果想要计算样本三和样本四之间的距离可以采用下面的方法 。
我们很容易发现,上面方程中数字差值最大的属性对计算结果的影响最大,也就是说,每年获取的飞行常客里程数对于计算结果的影响将远远大于表2.1中其他两个特征-玩视频游戏所耗时间占比和每周消费冰淇淋公斤数的影响 。而产生这种现象的唯一原因,仅仅是因为飞行常客里程数远大于其他特征值 。但海伦认为这三种特征是同等重要的,因此作为三个等权重的特征之一,飞行常客里程数并不应该如此严重地影响到计算结果 。
在处理这种不同取值范围的特征值时,我们通常采用的方法是将数值归一化,如将取值范围处理为0到1或者-1到1之间 。下面的公式可以将任意取值范围的特征值转化为0到1区间内的值:
newValue = http://www.kingceram.com/post/(oldValue - min) / (max - min)
其中min和max分别是数据集中的最小特征值和最大特征值 。虽然改变数值取值范围增加了分类器的复杂度,但为了得到准确结果,我们必须这样做 。
import numpy as npdef autoNorm(dataSet):minVals = dataSet.min(0)maxVals = dataSet.max(0)ranges = maxVals - minValsnormDataSet = zeros(shape(dataSet))m = dataSet.shape[0]normDataSet = dataSet - tile(minVals, (m, 1))normDataSet = normDataSet/tile(ranges, (m, 1))# element wise dividereturn normDataSet, ranges, minValsif __name__ == '__main__':#打开的文件名filename = "datingTestSet.txt"#打开并处理数据datingDataMat, datingLabels = file2matrix(filename)normDataSet, ranges, minVals = autoNorm(datingDataMat)print(normDataSet)print(ranges)print(minVals)
- 家庭垃圾分类小窍门 家庭垃圾分类小妙招有哪些
- SVM 支持向量机简介+SVM15种场景分类实例
- 算法设计与分析——最近点对问题
- LRU 最近最久未使用置换算法的C++实现
- 最近邻插值及Matlab实现
- Java实现之马踏棋盘算法
- 深度学习之电影二分类的情感问题
- matlab madian,马踏棋盘——贪心算法
- 迭代学习控制算法在自动驾驶车辆轨迹跟踪中的应用
- 又称骑士周游 算法-经典趣题-马踏棋盘