zoukankan      html  css  js  c++  java
  • 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.])
  • 相关阅读:
    2019-8-22学习笔记---文件上传与读取
    JS字符串的操作
    JS控制台打印星星,总有你要的那一款~呐~给你小心心哦~~~❤
    DOM的操作(增删改查)
    js上传视频(jquery.form.js)
    vue单页面模板说明文档(3)
    vue单页面模板说明文档(2)
    vue单页面模板说明文档(1)
    js 通过url获取里面的参数值
    ios点击输入框,界面放大解决方案
  • 原文地址:https://www.cnblogs.com/fd-682012/p/11574758.html
Copyright © 2011-2022 走看看