亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python使用KNN算法手寫體識別

發布時間:2020-10-18 00:17:43 來源:腳本之家 閱讀:175 作者:一笑丶奈何 欄目:開發技術

本文實例為大家分享了用KNN算法手寫體識別的具體代碼,供大家參考,具體內容如下

#!/usr/bin/python 
#coding:utf-8 
 
import numpy as np 
import operator 
import matplotlib 
import matplotlib.pyplot as plt 
import os 
 
''''' 
KNN算法 
1. 計算已知類別數據集中的每個點依次執行與當前點的距離。 
2. 按照距離遞增排序。 
3. 選取與當前點距離最小的k個點 
4. 確定前k個點所在類別的出現頻率 
5. 返回前k個點出現頻率最高的類別作為當前點的預測分類 
''' 
 
''''' 
inX為要分類的向量 
dataSet為訓練樣本 
labels為標簽向量 
k為最近鄰的個數 
''' 
def classify0(inX , dataSet , labels , k): 
 dataSetSize = dataSet.shape[0]#dataSetSize為訓練樣本的個數 
 diffMat = np.tile(inX , (dataSetSize , 1)) - dataSet#將inX擴展為dataSetSize行,1列 
 sqDiffMat = diffMat**2 
 sqDistances = sqDiffMat.sum(axis=1) 
 distances = sqDistances**0.5 
 sortedDistIndicies = distances.argsort()#返回的是元素從小到大排序后,該元素原來的索引值的序列 
 classCount = {} 
 for i in range(k): 
  voteIlabel = labels[sortedDistIndicies[i]]#voteIlabel為類別 
  classCount[voteIlabel] = classCount.get(voteIlabel,0)+1#如果之前這個voteIlabel是有的,那么就返回字典里這個voteIlabel里的值,如果沒有就返回0 
 sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)#key=operator.itemgetter(1)的意思是按照字典里的第一個排序,{A:1,B:2},要按照第1個(AB是第0個),即‘1'‘2'排序。reverse=True是降序排序 
 print sortedClassCount 
 return sortedClassCount[0][0] 
 
 
''''' 
將圖像轉換為1*1024的向量 
''' 
def img2vector(filename): 
 returnVect = np.zeros((1,1024)) 
 fr = open(filename) 
 for i in range(32): 
  line = fr.readline() 
  for j in range(32): 
   returnVect[0,i*32+j] = int(line[j] ) 
 return returnVect 
 
''''' 
手寫體識別系統測試 
''' 
def handwritingClassTest(trainFilePath,testFilePath): 
 hwLabels = [] 
 trainingFileList = os.listdir(trainFilePath) 
 m=len(trainingFileList) 
 trainSet = np.zeros((m,1024)) 
 for i in range(m): 
  filename = trainingFileList[i] 
  classNum = filename.split('.')[0] 
  classNum = int(classNum.split('_')[0]) 
  hwLabels.append(classNum) 
  trainSet[i] = img2vector( os.path.join(trainFilePath,filename) ) 
 testFileList = os.listdir(testFilePath) 
 errorCount = 0 
 mTest = len(testFileList) 
 for i in range(mTest): 
  filename = trainingFileList[i] 
  classNum = filename.split('.')[0] 
  classNum = int(classNum.split('_')[0]) 
  vectorUnderTest = img2vector(os.path.join(trainFilePath, filename)) 
  classifyNum = classify0(vectorUnderTest,trainSet,hwLabels,10) 
  print "the classifier came back with : %d , the real answer is : %d"% (classifyNum , classNum) 
  if(classifyNum != classNum) : errorCount+=1 
 print ("\nthe total number of error is : %d"%errorCount) 
 print ("\nthe error rate is : %f"%(float(errorCount)/mTest)) 
handwritingClassTest()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安阳市| 宝鸡市| 石楼县| 九江县| 乌拉特后旗| 石门县| 浪卡子县| 桃园县| 萨迦县| 盐源县| 尼玛县| 墨竹工卡县| 镇原县| 文昌市| 信丰县| 灵丘县| 永登县| 呼和浩特市| 涞水县| 新丰县| 乌兰浩特市| 防城港市| 土默特左旗| 勐海县| 德惠市| 垦利县| 敦煌市| 辽阳市| 苏州市| 长葛市| 西林县| 三河市| 嘉荫县| 昌邑市| 涟源市| 岚皋县| 嘉峪关市| 南投县| 黄陵县| 从江县| 义乌市|