• KNN算法的感受 1


    本来预计的打算是一天一个十大挖掘算法,然而由于同时要兼顾数据结构面试的事情,所以 很难办到,但至少在回家前要把数据挖掘十大算法看完,过个好年,在course上学习老吴的课程还是帮了我很大的忙,虽然浪费了时间,但是也无形中帮助我 很多,所以说还是很值得的,今天就总结KNN算法的一部分,这部分老吴的课程中没有太多涉及到,所以我又重新关注了一下,下面是我的总结,希望能对大家有 所帮组。

         介绍环镜:python2.7  IDLE  Pycharm5.0.3

         操作系统:windows

        第一步:因为没有numpy,所以要安装numpy,详情见另一篇安装numpy的博客,这里不再多说.

        第二步:贴代码:

     1     from numpy import *  
     2     import operator  
     3     from os import listdir
     5   def classify0(inX, dataSet, labels, k):
     6         dataSetSize = dataSet.shape[0]  
     7         diffMat = tile(inX, (dataSetSize,1)) - dataSet  
     8         sqDiffMat = diffMat**2  
     9         sqDistances = sqDiffMat.sum(axis=1)  
    10         distances = sqDistances**0.5  
    11         sortedDistIndicies = distances.argsort()       
    12         classCount={}            
    13         for i in range(k):  
    14             voteIlabel = labels[sortedDistIndicies[i]]  
    15             classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1  
    16         sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)  
    17         return sortedClassCount[0][0]  
    18       
    19   def createDataSet():
    20         group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  
    21         labels = ['A','A','B','B']  
    22         return group, labels  
    23       
    24    def file2matrix(filename):  
    25         fr = open(filename)  
    26         numberOfLines = len(fr.readlines())         #get the number of lines in the file  
    27         returnMat = zeros((numberOfLines,3))        #prepare matrix to return  
    28         classLabelVector = []                       #prepare labels return     
    29         fr = open(filename)  
    30         index = 0  
    31         for line in fr.readlines():  
    32             line = line.strip()  
    33             listFromLine = line.split('	')  
    34             returnMat[index,:] = listFromLine[0:3]  
    35             classLabelVector.append(int(listFromLine[-1]))  
    36             index += 1  
    37         return returnMat,classLabelVector  
    38           
    39     def autoNorm(dataSet):
    40         minVals = dataSet.min(0)  
    41         maxVals = dataSet.max(0)  
    42         ranges = maxVals - minVals  
    43         normDataSet = zeros(shape(dataSet))  
    44         m = dataSet.shape[0]  
    45         normDataSet = dataSet - tile(minVals, (m,1))  
    46         normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide  
    47         return normDataSet, ranges, minVals  
    48          
    49     def datingClassTest():
    50         hoRatio = 0.50      #hold out 10%  
    51         datingDataMat,datingLabels = file2matrix('datingTestSet2.txt')       #load data setfrom file  
    52         normMat, ranges, minVals = autoNorm(datingDataMat)  
    53         m = normMat.shape[0]  
    54         numTestVecs = int(m*hoRatio)  
    55         errorCount = 0.0  
    56         for i in range(numTestVecs):  
    57             classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)  
    58             print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i])  
    59             if (classifierResult != datingLabels[i]): errorCount += 1.0  
    60         print "the total error rate is: %f" % (errorCount/float(numTestVecs))  
    61         print errorCount  
    62           
    63     def img2vector(filename): 
    64         returnVect = zeros((1,1024))  
    65         fr = open(filename)  
    66         for i in range(32):  
    67             lineStr = fr.readline()  
    68             for j in range(32):  
    69                 returnVect[0,32*i+j] = int(lineStr[j])  
    70         return returnVect  
    71       
    72     def handwritingClassTest():  
    73         hwLabels = []  
    74         trainingFileList = listdir('trainingDigits')           #load the training set  
    75         m = len(trainingFileList)  
    76         trainingMat = zeros((m,1024))  
    77         for i in range(m):  
    78             fileNameStr = trainingFileList[i]  
    79             fileStr = fileNameStr.split('.')[0]     #take off .txt  
    80             classNumStr = int(fileStr.split('_')[0])  
    81             hwLabels.append(classNumStr)  
    82             trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr)  
    83         testFileList = listdir('testDigits')        #iterate through the test set  
    84         errorCount = 0.0  
    85         mTest = len(testFileList)  
    86         for i in range(mTest):  
    87             fileNameStr = testFileList[i]  
    88             fileStr = fileNameStr.split('.')[0]     #take off .txt  
    89             classNumStr = int(fileStr.split('_')[0])  
    90             vectorUnderTest = img2vector('testDigits/%s' % fileNameStr)  
    91             classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)  
    92             print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr)  
    93             if (classifierResult != classNumStr): errorCount += 1.0  
    94         print "
    the total number of errors is: %d" % errorCount  
    95         print "
    the total error rate is: %f" % (errorCount/float(mTest))  

      第三步:通过命令行交互

          (1):先将上述代码保存为kNN.py

          (2):再在IDLE下的run菜单下run一下,将其生成python模块

          (3): import  kNN(因为上一步已经生成knn模块)
          (4): kNN.classify0([0,0],group,labels,3) (讨论[0,0]点属于哪一个类)

       注:其中【0,0】可以随意换

    即【】内的坐标就是我们要判断的点的坐标:

    >>> kNN.classify0([0,0],group,labels,3)
    'B'
    >>> kNN.classify0([0,1],group,labels,3)
    'B'
    >>> kNN.classify0([0.6,0.6],group,labels,3)
    'A'

  • 相关阅读:
    小记:xml画一个爱心。
    类似UC天气下拉和微信下拉眼睛头部弹入淡出UI交互效果(开源项目)。
    FloatingActionButton增强版,一个按钮跳出多个按钮--第三方开源--FloatingActionButton
    回调机制的实现。
    小记:使用SharedPreferences存储来设置程序第一次进入欢迎界面,以后不会再进入欢迎界面。
    小记:获取系统时间的long值,格式化成可读时间。
    写程序的欢迎界面(运用画图方法画圆球)。
    并发的HashMap为什么会引起死循环?
    zuul重试配置
    zuul超时问题
  • 原文地址:https://www.cnblogs.com/hellochennan/p/5373123.html
Copyright © 2020-2023  润新知