用KNN演算法識別黑白數字

2021-08-16 05:07:04 字數 2523 閱讀 3141

from numpy import *

import operator

from os import listdir

def knn(k,testdata,traindata,labels):

traindatasize=traindata.shape[0]

dif=tile(testdata,(traindatasize,1))-traindata

sqdif=dif**2

sumsqdif=sqdif.sum(axis=1)

distance=sumsqdif**0.5

distancesort=distance.argsort()

count={}

for i in range(0,k):

vote=labels[distancesort[i]]

count[vote]=count.get(vote,0)+1

sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=true)

return sortcount[0][0]

#處理,先將儲存為等高等寬的格式,然後轉為文字

from pil import image

fh=open("c:/users/lenovo/desktop/text1.txt","a")

width=im.size[0]

height=im.size[1]

for i in range(0,width):

for j in range(0,height):

cl=im.getpixel((i,j))

clall=cl[0]+cl[1]+cl[2]

if(clall==0):

fh.write("1")

else:

fh.write("0")

fh.write("\n")

fh.close()

#載入資料,使乙個檔案變成一行

def datatoarray(fname):

fh=open(fname)

arr=

for i in range(0,32):

thisline=fh.readline()

for j in range(0,32):

return arr

arr1=datatoarray("g:/python 安裝/資料分析及挖掘/testandtraindata/traindata/0_89.txt")

#建立乙個函式取檔名字首

def seplabel(fname):

filestr=fname.split(".")[0]

label=int(filestr.split("_")[0])

return label

#建立訓練資料

def traindata():

labels=

trainfile=listdir("g:/python 安裝/資料分析及挖掘/testandtraindata/traindata")

num=len(trainfile)

#列長度為1024,每一行儲存乙個檔案

#用乙個陣列儲存所有的訓練檔案,行為檔案數量,列為1024

trainarr=zeros((num,1024))

for i in range(0,num):

thisfname=trainfile[i]

thislabel=seplabel(thisfname)

trainarr[i,:]=datatoarray("g:/python 安裝/資料分析及挖掘/testandtraindata/traindata/"+thisfname)

return trainarr,labels

#用測試資料呼叫knn演算法測試,看是否能夠準確識別

def datatest():

trainarr,labels=traindata()

testlist=listdir("g:/python 安裝/資料分析及挖掘/testandtraindata/testdata")

testnum=len(testlist)

for i in range(0,testnum):

thisfile=testlist[i]

testarr=datatoarray("g:/python 安裝/資料分析及挖掘/testandtraindata/testdata/"+thisfile)

rknn=knn(3,testarr,trainarr,labels)

print(rknn)

#datatest()

#抽某個檔案測試

trainarr,labels=traindata()

thisfile="8_8.txt"

testarr=datatoarray("g:/python 安裝/資料分析及挖掘/testandtraindata/testdata/"+thisfile)

rknn=knn(3,testarr,trainarr,labels)

print(rknn)

KNN演算法識別手寫數字

前言 從現在開始博主要開始學習機器學習了,歡迎有共同興趣的人一起學習。廢話不多說了,開始上 一 將資料集csv檔案匯入到python中,並將csv格式轉為list格式 def dataset 讀取訓練集檔案路徑 path trains1.csv os.path.abspath machinelear...

KNN演算法識別手寫數字識別集

呼叫sklearn中knn演算法庫,資料級為matlab檔案,使用matplot讀取,並進行一維化處理 from scipy.io import loadmat as load import matplotlib.pyplot as plt from sklearn.neighbors import...

手寫數字識別 實戰 KNN演算法識別手寫數字

鄰近演算法,或者說k最近鄰 knn,k nearestneighbor 分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。下面是我學習knn演算法的思維導圖 其中距離的定義,各個距離的公式為 歐氏距離 n維空間的距...