1 #准備數據:歸一化數值 2 def autoNorm(dataSet): #autoNorm()函數可以自動將數字特征值轉換為0到1的區間 3 minVals = dataSet.min(0) 4 maxVals = dataSet.max(0) #ddataSet.max(0)中的參數0使得函數可以從列中選取最小值 5 ranges = maxVals - minVals 6 normDataSet = zeros(shape(dataSet)) 7 m = dataSet.shape[0] 8 #newValue = (oldValue-min)/(max-min),該公式可以將任意取值范圍的特征值轉換為0到1區間內的值 9 #tile()函數將變量內容復制成輸入矩陣同樣大小的矩陣(具體特征值相除) 10 #在numpy庫中,矩陣除法需要使用函數linalg.solve(matA,matB) 11 normDataSet = dataSet - tile(minVals, (m,1)) 12 normDataSet = normDataSet/tile(ranges, (m,1)) 13 return normDataSet, ranges, minVals
運行結果:
1 >>>normMat, ranges, minVals = kNN.autoNorm(datingDataMat) 2 >>>normMat 3 array([[1., 1., 1.], 4 [0., 0., 0.], 5 [0., 0., 0.], 6 ..., 7 [0., 0., 0.], 8 [0., 0., 0.], 9 [0., 0., 0.]]) 10 >>>ranges 11 array([4.092000e+04, 8.326976e+00, 9.539520e-01]) 12 >>>minVals 13 array([0., 0., 0.])
出現的錯誤:
1 >>>normMat, ranges, minVals = kNN.autoNorm(datingDataMat) 2 Traceback (most recent call last): 3 File "<input>", line 1, in <module> 4 NameError: name 'kNN' is not defined 5 6 >>>normMat, ranges, minVals = kNN.autoNorm(datingDataMat) 7 Traceback (most recent call last): 8 File "<input>", line 1, in <module> 9 AttributeError: module 'kNN' has no attribute 'autoNorm'
解決辦法:
個人解決辦法:重啟PyCharm,運行kNN.py,重新完整的輸入運行命令,問題就解決了
1 >>>from numpy import * 2 >>>random.rand(4,4) 3 >>>randMat = mat(random.rand(4,4)) 4 >>>randMat.I 5 >>>invRandMat = randMat.I 6 >>>myEye = randMat*invRandMat 7 >>>myEye - eye(4) 8 >>>group,labels = kNN.createDataSet() 9 >>>group 10 >>>labels 11 >>>kNN.classify0([0,0], group, labels, 3) 12 >>>datingDataMat,datingLabels = kNN.file2matrix('datingTestSet.txt') 13 >>>datingDataMat 14 >>>datingLabels[0:16] 15 >>>import matplotlib 16 >>>import matplotlib.pyplot as plt 17 >>>fig = plt.figure() 18 >>>ax = fig.add_subplot(111) 19 >>>ax.scatter(datingDataMat[:,1], datingDataMat[:,2]) 20 >>>plt.show() 21 >>>normMat, ranges, minVals = kNN.autoNorm(datingDataMat) 22 >>>normMat 23 array([[1., 1., 1.], 24 [0., 0., 0.], 25 [0., 0., 0.], 26 ..., 27 [0., 0., 0.], 28 [0., 0., 0.], 29 [0., 0., 0.]]) 30 >>>ranges 31 array([4.092000e+04, 8.326976e+00, 9.539520e-01]) 32 >>>minVals 33 array([0., 0., 0.])