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()
    
  • 相关阅读:
    嵌入式移动数据库Oracle Lite
    一生至少应该看的60本书
    似水年华,如梦光阴
    MS SQL Server数据库中合并复制详解
    登录Windows Live Messenger失败,因为服务暂时不可用
    ASCII码表
    写在监考之后
    ASP.NET基本对象
    linux网络命令 vconfig ifconfig
    grep使用
  • 原文地址:https://www.cnblogs.com/semen/p/6958978.html
Copyright © 2011-2022 走看看