Python基礎學習之手寫識別演算法

2021-09-18 07:09:55 字數 2106 閱讀 6159

k-近鄰演算法

from numpy import *  # python裡的計算包numpy

import operator  # 運算子模組

import os

# 資料準備所需的函式

def createdataset():

group = array([

[1.0, 1.1],

[1.0, 1.0],

[0, 0],

[0, 0.1]

])labels = ['a', 'a', 'b', 'b']

return group, labels

# 測試時呼叫函式

group, labels = createdataset()

print("訓練資料:", group)

print("標籤:", labels)

# k-近鄰演算法核心函式

def classify0(inx, dataset, labels, k):  # 輸入向量,訓練資料,標籤,引數k

datasetsize = dataset.shape[0]  # 資料的個數

diffmat = tile(inx, (datasetsize, 1)) - dataset  # tile()函式,求輸入資料與訓練資料對應值的相減

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]]  # 選擇k個距離最小的點,對應標籤

classcount[voteilabel] = classcount.get(voteilabel, 0) + 1  # 統計頻數

sortedclasscount = sorted(classcount.items(), key=operator.itemgetter(1), reverse=true)  # 排序,reverse=true降序

# python2中用iteritems

return sortedclasscount[0][0]  # 返回最多的那個資料

# tile函式

a = [0, 1, 2]

b = tile(a, 2)

print(b)  # [0 1 2 0 1 2]

b = tile(a, (1, 2))

print(b)  # [[0 1 2 0 1 2]]

b = tile(a, (2, 1))

print(b)  # [[0 1 2],[0 1 2]]

# 測試

result = classify0([1.2, 1], group, labels, 3)

print("**標籤為:", result)

# 手寫識別系統

# 將影象格式轉化為向量 32*32 --> 1*1024

def img2vector(filename):

returnvect = zeros((1, 1024)) # 建立1*1024的0填充向量矩陣

fr = open(filename) # 開啟檔案

for i in range(32): # 讀取檔案的前32行,前32列

linestr = fr.readline()

for j in range(32):

returnvect[0, 32 * i + j] = int(linestr[j])

return returnvect # 返回每個影象的向量

testvector = img2vector('testnumber/0_13.txt')

print(testvector[0, 0:31])

print(testvector[0, 32:63])

# 測試手寫數字識別系統

handwritingclasstest()

深度學習之手寫數字識別

mnist是乙個入門級的計算機視覺資料集,它包含各種手寫數字 它也包含每一張對應的標籤,告訴我們這個是數字幾。比如,上面這四張的標籤分別是5,0,4,1。mnist資料集的官網是 yann lecun s website 這份 然後用下面的 匯入到你的專案裡面,也可以直接複製貼上到你的 檔案裡面。i...

kNN之手寫數字識別

import numpy as np listdir 列出給定目錄的檔名 from os import listdir import operator inx 分類的輸入向量,dataset 輸入的訓練樣本集,labels 標籤向量,k 近鄰數 defclassify0 inx,dataset,la...

tensorflow 之手寫體識別

原因 由於tensorflow相對於caffe更加靈活,準備轉戰tensorflow,昨天看了下大概的基本函式,今天打算先跑跑簡單的例子 tensorflow的安裝太簡單了,一行 搞定,網上很多教程,不一一列出。想安裝固定tensorflow版本 pip install tensorflow gpu...