KNN演算法識別手寫數字

2021-10-05 16:25:55 字數 3285 閱讀 9325

前言:從現在開始博主要開始學習機器學習了,歡迎有共同興趣的人一起學習。廢話不多說了,開始上**

一、將資料集csv檔案匯入到python中,並將csv格式轉為list格式

def dataset():

#讀取訓練集檔案路徑

path = '/trains1.csv' #(os.path.abspath("../machinelearningdata/knn/use python and numpy/trainingdigits"))

with open(path,'r',encoding="utf-8") as f:

reader = csv.reader(f)

#[row for row in reader]叫做列表解析 根據已有列表,高效建立新列表的方式。  列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,因此用在中。

#[row for row in reader] 等價於

#rows =

#for row in reader:

rows = [row for row in reader]

#因為第一行是說明,從第二行開始才是資料,所以從第二行開始

return rows[1:]

二、將返回的list進一步劃分成:訓練資料集,訓練目標資料,測試資料集,測試目標資料

這裡我將list進行分割,70%為訓練集,30%為測試集

data = dataset()

#訓練集

data_train = data[len(data)//3+1:]

trainingdata = [i[1:] for i in data_train]

#第0列為目標資料集,獲取第0列的資料

trainingtargetdata = [i[0] for i in data_train]

#測試集

data_test = data[:len(data) // 3]

testdata = [i[1:] for i in data_test]

testtargetdata = [i[0] for i in data_test]

三、呼叫 kneighborsclassifier 方法進行資料**

#開始訓練,這裡我設定的k臨近值為3

knn = kneighborsclassifier(n_neighbors=3)

# 訓練資料

knn.fit(trainingdata, trainingtargetdata)

prediction = knn.predict(testdata)

knn.score(testdata,testtargetdata)

right=0

for test,result in zip(testtargetdata,prediction):

if test == result:

right += 1

print('測試資料為:{},**資料為:{}'.format(test,result))

print('測試的準確率為->{}%'.format((right/len(testtargetdata))*100))

重新訓練了3萬條資料的結果,跑了20分鐘,準確度比之前高了很多

完整**:

import os

import numpy as np

import csv

from sklearn import neighbors

from sklearn.neighbors import kneighborsclassifier

#define one read train.csv function

def dataset():

#讀取訓練集檔案路徑

path = '資料集路徑' #(os.path.abspath("../machinelearningdata/knn/use python and numpy/trainingdigits"))

with open(path,'r',encoding="utf-8") as f:

reader = csv.reader(f)

#列表解析  根據已有列表,高效建立新列表的方式。  列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,因此用在中。

#[row for row in reader] 等價於

#rows =

#for row in reader:

rows = [row for row in reader]

return rows[1:]

def main():

data = dataset()

#訓練集

data_train = data[len(data)//3+1:]

trainingdata = [i[1:] for i in data_train]

trainingtargetdata = [i[0] for i in data_train]

#測試集

data_test = data[:len(data) // 3]

testdata = [i[1:] for i in data_test]

testtargetdata = [i[0] for i in data_test]

#開始訓練

knn = kneighborsclassifier(n_neighbors=3)

# 訓練資料

knn.fit(trainingdata, trainingtargetdata)

prediction = knn.predict(testdata)

knn.score(testdata,testtargetdata)

right=0

for test,result in zip(testtargetdata,prediction):

if test == result:

right += 1

print('測試資料為:{},**資料為:{}'.format(test,result))

print('測試的準確率為->{}%'.format((right/len(testtargetdata))*100))

if __name__ == '__main__':

main()

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

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

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

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

KNN手寫數字識別

以歐幾里得距離度量樣本間的相似程度。對於乙個測試樣本首先計算該樣本與每個訓練樣本間的距離,然後按距離值對訓練樣本進行公升序排序,排序後前k個樣本進行投票,即哪個標籤出現的次數多,就將測試樣例劃為該類。程式使用資料 預先將資料處理為,標籤資訊轉化為txt文件。from numpy import imp...