k-近鄰算法(kNN)准備數據:歸一化數值


 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.])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM