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.])
原文地址:https://www.cnblogs.com/fd-682012/p/11574758.html