日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

KNN算法--手写输入判断(Python3)

發(fā)布時間:2025/4/16 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 KNN算法--手写输入判断(Python3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

可能對于有些人在以前看過這個例子,但是很不巧的是Python3和Python2的之間的一些差異,導(dǎo)致了照搬原來的那份是不能用了。
這里,我根據(jù)自己的情況和進行了改寫

要數(shù)據(jù)集的話,可以給我私信,或者是在評論去留言。我看到就會回復(fù)
記得用的時候,改寫下那個文件名,看你自己是把數(shù)據(jù)放到哪了,就寫哪。

from numpy import * import os import operatordef classify0(inX, dataSet, labels, k):# k means how many you need to get your P(x)dataSetSize = dataSet.shape[0]DiffMat = tile(inX, (dataSetSize, 1)) - dataSetsqDiffMat = DiffMat**2sqDistances = sqDiffMat.sum(axis=1)distances = sqDistances**0.5 # 到這里求解了歐式距離(并構(gòu)成了一個array)sortedDistances = distances.argsort()classCount = {}for i in range(k):voteIlabel = labels[sortedDistances[i]]classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1# 選出了距離最小的k個點,并且做了一個簡單的統(tǒng)計sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) # 按照第一個(從0開始數(shù))進行排序return sortedClassCount[0][0] # 返回的出現(xiàn)次數(shù)最多的那個標(biāo)簽# 將32*32圖片轉(zhuǎn)換成向量(實際生活中,往往都會有更大的尺寸) def img2vector(filename):returnVect = zeros((1, 1024)) # 將32 *32 的矩陣轉(zhuǎn)換成一個 1*1024的向量fr = open(filename)for i in range(32):lineStr = fr.readline()for j in range(32):returnVect[0, 32 * i + j] = int(lineStr[j])return returnVectdef handwritingClassTest():hwLabels = []trainingFileList = os.listdir('E:/Code/Python/test/KNN算法/digits/trainingDigits') # 得到文件列表m = len(trainingFileList) # 得到文件夾列表長度traingMat = zeros((m, 1024)) # 訓(xùn)練集合for i in range(m):fileNameStr = trainingFileList[i]fileStr = fileNameStr.split('.')[0] # 得到了文件名(去掉了后綴)classNumStr = int(fileStr.split('_')[0]) # 要注意到數(shù)據(jù)集格式 得到了分類數(shù)字hwLabels.append(classNumStr)traingMat[i, :] = img2vector('E:/Code/Python/test/KNN算法/digits/trainingDigits/%s' % fileNameStr)# 上面得到了數(shù)據(jù)集testFileList = os.listdir('E:/Code/Python/test/KNN算法/digits/testDigits')errorCount = 0.0 # 統(tǒng)計出錯mTest = len(testFileList)for i in range(mTest):fileNameStr = testFileList[i]fileStr = fileNameStr.split('.')[0]classNumStr = int(fileStr.split('_')[0])vectorUnderTest = img2vector('E:/Code/Python/test/KNN算法/digits/testDigits/%s' % fileNameStr)classifyResult = classify0(vectorUnderTest, traingMat, hwLabels, 3)# print("the predicted number is %d, and the real number is %d" % (classifyResult, classNumStr))if classifyResult != classNumStr:errorCount += 1.0print("The error times is %d" % errorCount)print("The error rate is %.3f" % (errorCount / float(mTest)))if __name__ == "__main__":handwritingClassTest()

總結(jié)

以上是生活随笔為你收集整理的KNN算法--手写输入判断(Python3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。