K最近傍実際の手書き数字認識

1、リーダーパケット

インポートのNPとしてnumpyの
 輸入オペレータ
 からのOS インポートLISTDIR
 から sklearn.neighbors インポートKNNとしてKNeighborsClassifierを

%コンフィグZMQInteractiveShell.ast_node_interactivity = すべて

 

図2に示すように、画像ベクトルを変換する関数の定義

「」「
関数の説明:バイナリイメージ32×32は1x1024ベクターに変換

:パラメータ
    名-ファイル名
戻り値:
    returnVect -バイナリイメージ返す1x1024ベクトル
」、「」
DEFのimg2vector(ファイル名):
    1x1024ゼロベクトル作成 
    returnVect = NPを。ゼロ((1、1024 ))
    オープンファイル 
    のFR = オープン(ファイル名)
     #1 行を読み取る
    ための I レンジ(32 ):
        は、リードデータ線 
        lineStr = fr.readline()
        各列Aの最初の32の要素returnVectに添加
        するための J レンジ(32 ):
            returnVect [0、* Iは、Jを+ 32] = INT(lineStr [J])
    戻り1x1024ベクトル変換
    戻り returnVect

 

3、手書き数字認識システム機能の定義

 

"" " 
関数の説明:デジタルカテゴリーテスト手書き

パラメータ:
    なし
戻りません:
    なし
。" "" 
DEF handwritingClassTest():
    トレーニングセットラベル 
    hwLabels = []
    trainingDigitsディレクトリの下にファイル名を返します 
    trainingFileList = LISTDIR(' trainingDigits ' 戻りファイルフォルダ数 
    M = LEN(trainingFileList)
    初期マットトレーニングマトリックス、トレーニングセット 
    trainingMatのnp.zeros =((M 1024 ))
    集中ファイル解析されたカテゴリのトレーニングセットから
    のための I における範囲(M):
        、ファイル名を取得
        = fileNameStr trainingFileList [I]
        取得した分類番号 
        classNumber = INT(fileNameStr.split(' _ ' )[0])
        追加hwLabelsで得られたカテゴリ
        hwLabels.append(classNumber)
        1x1024の各ファイルのデータを保存されたtrainingMatマトリックス 
        trainingMat [I ,:] = img2vector(' trainingDigits / S%'(fileNameStr))
    建設KNN分類器 
    いななき= KNN(N_NEIGHBORSの= 3、アルゴリズム= ' 自動' フィットモデル、trainingMatトレーニング行列のために、対応するラベルhwLabels 
    (trainingMat、hwLabels)neigh.fitを
     リストtestDigitsディレクトリ内のファイルを返します 
    testFileListがLISTDIR(= testDigits #のエラーチェック回数 
    ERRORCOUNT = 0.0 #のテストデータの数 
    MTEST = LEN(testFileList)
    、カテゴリ・テスト・セットを解析し、ファイルからテストを分類するための I レンジ(MTEST):
        ファイル名を取得 
        fileNameStr = testFileList [I]
        取得した分類番号 
        classNumber = INT(fileNameStr.split(' _ ' )[0])
        得られた試験は、トレーニングのために使用1x1024ベクトル設定 
        vectorUnderTest =をimg2vector(testDigits / S%
    
    '(FileNameStr))
        得る予測 
        classifierResult = (vectorUnderTest)neigh.predict
         #の印刷
        印刷が' 分類が%D \トン本当の結果D%の値を返す")(classifierResult、classNumber)
         IF(classifierResult!= ClassNumberを):
            ERRORCOUNT + = 1.0
     プリント' 総間違ったデータは%d \ nの誤り率%% F%'%(ERRORCOUNT、ERRORCOUNT / MTEST * 100))

 

4つの実行結果

 

もし __name__ == " __main__ " 
    handwritingClassTest()

 

データセット住所:

リンクします。https://pan.baidu.com/s/1-F2LyVh63i4yjIwweTYjNg
抽出コード:3gsa

参考:

1、「機械学習本当の」ブック

2、https://github.com/apachecn/AiLearning

3、https://cuijiahua.com/blog/2017/11/ml_1_knn.html

4、機械学習戦闘訓練キャンプの宿題の目の深さ(http://www.deepshare.net/

 

おすすめ

転載: www.cnblogs.com/WJZheng/p/11258147.html