#2-2 将文本记录转换为NumPy的解析程序
def file2matrix(filename):
fr = open(filename)
arrayOLines = fr.readlines()
numberOfLines = len(arrayOLines)
returnMat = zeros((numberOfLines,3))#三列数据
classLabelVector = []
index = 0
for line in arrayOLines:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1]))#这里必须加整型,不然会被当做字符串来处理
index += 1
return returnMat,classLabelVector
file2matrix('datingTestSet2.txt')
open()函数,打开文件,这个文件如果不写路径必须在.py一个子文件夹里。
read()、readline()、readlines()区别:read:读出全文、readline每次读出一行,readlines读取整个文件所有行,保存在一个列表(list)变量,读取这个矩阵的长度,并创建一个新的矩阵。
strip()去除掉数据中的空格、回车等特殊字符串。split()每个字符串加个TAB,选取前3个元素,将它们储存到特征矩阵中。
索引值-1表示列表的最后一列元素,这里将这些元素储存到classLabelVector中。
2.2.2使用Matplotlib创建散点图
fig = plt.figure()
ax = fig.add_subplot(111) #参数111:将画布分割成1行1列,图像画在从左到右,从上到下第一块
ax.scatter(datingDataMat[:1],datingDataMat[:2])
plt.show()
#2.2.3归一化数值,准备数据阶段
def autoNorm(dataSet):
minVals = dataSet.min(0)
maxVals = dataSet.max(0)
ranges = maxVals - minVals
normDataSet = zeros(shape(dataSet))
m = dataSet.shape[0]
normDataSet = dataSet - tile(minVals,(m,1))
normDataSet = normDataSet/tile(ranges,(m,1))
return normDataSet,ranges,minVals
#2.24测试算法的错误率
def datingClassTest():
hoRatio = 0.10
datingDataMat,datingLabels = file2matrix('datingTestSet.txt')
normMat,ranges,minVals = autoNorm(datingDataMat) #归一化
m = normMat.shape[0] #读取长度
numTestVecs = int(m*hoRatio)
errorCount = 0.0
for i in range (numTestVecs):
classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
print ("the classifier came back with: %d,the real answer is: %d"%(classifierResult,datingLabels[i]))
if(classifierResult != datingLabels[i]):
errorCount += 1.0
print("the total error rate is : %f" % (errorCount/float(numTestVecs)))
为什么需要归一化数据?
我的理解:因为数据大小有大有小,不同类别的数据,相互之间的数据数量级可能差别特别大,所以需要统计进行归一化处理。
用公式:newValue = (oldValue-min)/(max-min)进行归一化
min(0):返回每一列的最小值 min(1):返回每一行的最小值
这里特征值矩阵有1000*3个值,而最小值minVals和range的值都为1*3。所以这里要有tile()函数来将变量内容复制成输入矩阵同样大小的矩阵。
扫描二维码关注公众号,回复:
9010407 查看本文章