zoukankan      html  css  js  c++  java
  • KNN_python

    #coding:utf-8
    from numpy import *
    import operator
    def file2matrix(filename):
        fr=open(filename)
        arrline=fr.readlines()
        lenth=len(arrline)
        matrix=zeros((lenth,3))#3表示特征个数
        label=[]
        index=0
        for line in arrline:
            line=line.strip()
            linearr=line.split("	")
            matrix[index,:]=linearr[0:3]
            label.append(linearr[-1])
            index=index+1
        return matrix,label
    def Norm(data):#特征取值差异较大时,容易出现向取值大特征偏向,故一般情况都需要正则化训练集
        minval=data.min(0)
        maxval=data.max(0)
        m=len(data)
        maxjmin=maxval-minval
        fenmu=data-tile(minval,(m,1))
        norm=fenmu/tile(maxjmin,(m,1))
        return norm
    def classifier(testdata,data,label,k):#采用欧式距离作为量度
        lenth=data.shape[0]
        jian=data-tile(testdata,(lenth,1))
        sqr=jian**2
        add=sqr.sum(1)
        ksqr=add**0.5
        sortindex=ksqr.argsort()#为了统计标签频次,将索引作为列表值
        dict={}
        for i in range(k):
            lab=label[sortindex[i]]
            dict[lab]=dict.get(lab,0)+1
        resort=sorted(dict.iteritems(),key=operator.itemgetter(1),reverse=True)
        return resort[0][0]
    def testclassifier():
        rat=0.05#将训练集的%5作为测试集
        data,label=file2matrix("dat.txt")
        norm=Norm(data)
        m=norm.shape[0]
        testdata=int(rat*m)
        error=0.0
        for i in range(testdata):
            result=classifier(norm[i,:],norm[testdata:m,:],label[testdata:m],3)
            if result!=label[i]:
                error+=1.0
        print error/float(testdata)
    testclassifier()
    
  • 相关阅读:
    CentOS7.2中安装MongoDB
    django 面试题
    python pandas库——pivot使用心得
    归并排序
    python实现归并排序,归并排序的详细分析
    二分法查找
    二叉树的遍历
    RabbitMQ(python实现)学习之一:简单两点传输“Hello World”的实现
    邻接表存储图,DFS遍历图的java代码实现
    五、python使用模块
  • 原文地址:https://www.cnblogs.com/semen/p/6958978.html
Copyright © 2011-2022 走看看