Python
機械学習
MachineLearning

[Python]10数行のコードで機械学習を実装(手書き文字の認識)

書いた内容

機械学習についてのメモ書き

機械学習とは?

人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のこと
Wikipedia

今回利用するライブラリ

scikit-learn
機械学習のライブラリ。下記のようなデータセットが用意されている。

① Iris(アヤメの計測データ)
② Boston house-prices (ボストン市の住宅価格)
③ Diabetes (糖尿病患者の診断データ)
④ Digits (数字の手書き文字)
⑤ Linnerud (生理学的特徴と運動能力の関係)

今回は ④ Digits (数字の手書き文字) を利用

コード例

sample.py
#scikit-learnライブラリの読み込み
from sklearn import datasets,svm

#scilit-learnライブラリに付属しているデータセット"digits"を利用
digits = datasets.load_digits()

#データセット"digits"のうち、0番目のデータを8×8の行列に整形
print("-----digits['data'][0].reshape(8,8)----")
print(digits['data'][0].reshape(8,8))

#データセット"digits"の0番目のデータは、数字の0
print("-----digits.target----")
print(digits.target[0])

#サポートベクターマシン(というもの)を使って、分類
clf = svm.SVC()
clf.fit(digits.data,digits.target)

#仮に下記の"test_data"のようなデータは、どの数字に該当するか?を予測
test_data = [[0,1,2,0,1,2,3,4,0,1,2,0,1,2,3,4,0,1,2,0,1,2,3,4,0,1,2,0,1,2,3,4,0,1,2,0,1,2,3,4,0,1,2,0,1,2,3,4,0,1,2,0,1,2,3,4,0,1,2,0,1,2,3,4]]

print("-----予測----")
print(clf.predict(test_data))
出力結果
-----digits['data'][0].reshape(8,8)----
[[  0.   0.   5.  13.   9.   1.   0.   0.]
 [  0.   0.  13.  15.  10.  15.   5.   0.]
 [  0.   3.  15.   2.   0.  11.   8.   0.]
 [  0.   4.  12.   0.   0.   8.   8.   0.]
 [  0.   5.   8.   0.   0.   9.   8.   0.]
 [  0.   4.  11.   0.   1.  12.   7.   0.]
 [  0.   2.  14.   5.  10.  12.   0.   0.]
 [  0.   0.   6.  13.  10.   0.   0.   0.]]

-----digits.target----
0

-----予測----
[5]

参考資料

python14日目の素人だけどscikit-learnで機械学習やってみたい
(scikit-learnのデータセット"Iris"を利用した記事)

Python でデータサイエンス
(scikit-learnのデータセットをわかりやすく紹介されている記事)

追記(2018.02.07)

もう少し詳細に機械学習を実装すると...

① データを、訓練データ・テストデータに分割
② 予測
③ 予測値の評価

コード例

ここでは、アヤメの分類を利用

sample.py
from sklearn import datasets,svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = datasets.load_iris()

##説明変数
print("--------")
print(iris.data)

##目的変数
print("--------")
print(iris.target)

##トレーニングデータとテストデータを分割
iris_data_train,iris_data_test,iris_target_train,iris_target_test = train_test_split(iris.data,iris.target,test_size=0.3)
print("----iris_data_train----")
print(iris_data_train)
print(len(iris_data_train))

print("----iris_data_test----")
print(iris_data_test)
print(len(iris_data_test))

print("----iris_target_target----")
print(iris_target_test)

svc = svm.SVC()
svc.fit(iris_data_train,iris_target_train)

iris_predict = svm.SVC().fit(iris_data_train, iris_target_train).predict(iris_data_test)

##予測
print("----predict----")
print(svc.predict(iris_data_test))

##予測結果の評価
print("----score----")
print(accuracy_score(iris_target_test,iris_predict))

追記の参考資料

scikit-learn で回帰モデルの結果を評価する

Pythonで機械学習の一端に触れてみる