KNN算法及其应用案例

1.常见的分类算法:
(1).KNN算法
(2).贝叶斯算法
(3).决策树算法
(4)人工神经网络算法
(5)支持向量机(SVM)算法
2.今天我们用KNN算法解决手写体数字的识别问题(包括验证码识别,二维码识别等都可以归属为同一类问题)
KNN算法又名K-近邻算法,总体思想是:通过把现实中的数据映射到坐标系,然后通过计算"点"之间的距离(欧几里得公式)sqr[(x1-xm)**2+(y1-ym)**2]
可以翻译成如下步骤:
(1).计算欧式距离
(2).按照递增顺序排位
(3).选取与当前距离最小的K个点
(4).确定前K个点所在的类的出现频率
(5)返回前K个点出现频率最高的类别作为当前点的预测分类
3.算法实现步骤:
(1)处理数据
(2)数据向量化
(3)计算欧几里得距离
(4)根据距离分类
4.KNN算法优点:
(1).简单、易实现、易理解,无需参数估计及训练
(2).适用于多分类问题
(3).总的思想是:"物以类聚"
KNN算法模块:

#KNN算法模块:
def knn(k,testdata,traindata,labels):   
    #k代表分类数,测试数据,训练数据,所得到的测试结果属于哪一类(labels)
    traindata.shape[0]      
    #shape返回两个参数(数组),shape[0]得到训练集行数
    dif=np.tile(testdata,(traindata,1))-traindata    
    #利用numpy中的tile扩展维数后,才能进行计算,列数确定一直,扩展行(行扩展一直,列不变)
    sqdif=dif**2   
    #对差值的每个元素取平方
    sumsqdif=sqdif.sum(axis=1)  
    #按行进行计算,得到列向量组,axis=0则得到的是行向量
    distance=sumsqdif**0.5
    sortdistance=distance.argsort()     
    #按照升序去排
    count={}  #建立一个空字典
    for i in range(0,k):
        vote=labels[sortdistance[i]]
        count[vote]=count.get(vote,0)+1  
        #get(5,0)+1,意思是在count字典中出现一次vote值,则对应加1{5:1,,,},多次循环累加
    sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True) 
    #排序依据字典中的第一个词去排序,默认是升序(False)
    #key指定依据哪个区排,operator.itemgeter(1)指定第一个元素去排  
    return sortcount[0][0]


手写体字体的识别(数字、图片、二维码、验证码(1-26个字母)等与此类似):
手写体--->拍照--->标准化(设定长和宽的像素大小)--->转文本--->加载数据--->训练数据---用

  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值