【Python】1番簡単な機械学習

 

こんにちは。のっくんです。

 

Python=機械学習やAIというのが世の中の常識になりつつあります。

 

機械学習って一般の方には難しく聞こえてしまいますが実は簡単なんです。

 

AIエンジニアとか言ってますが単に学習のフレームワークを利用して何かを予測しているだけなんです。

 

機械学習?そんなの初めて!って方のためにこの記事では10行程度で実装できる一番シンプルな機械学習を説明したいと思います。

 

[speech_bubble type=”ln” subtype=”L1″ icon=”ilust/cat2_4_think.png” name=”ネコ”]初心者にも分かるように解説してね。[/speech_bubble] [speech_bubble type=”ln” subtype=”L1″ icon=”profile_face.png” name=”のっくん”]もちろんだよ。簡単なプログラムなので初心者の方でも3分程度で読み終わるよ。[/speech_bubble]

 

[toc]

 

学習の種類

 

学習には教師有り学習と教師無し学習があります。

 

教師有り学習では正解ラベルつまり答えが予め与えられます。写真の中のネコを識別したいときには、たくさんのネコの写真とネコであるというラベルを一緒に学習します。

 

最近の学習はほとんど教師あり学習と覚えておけば良いでしょう。

 

どんな学習でも最初に学習してからテストデータで評価するという2つのステップさえ理解しておけばそんなに難しくありません。

 

ソースコード

 

Jupyter notebookにコードを書いていきます。Jupyter notebookはAnaconda Navigatorから起動できます。

 

from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score

# X, Y
learn_data = [[0,0], [1,0], [0,1], [1,1]]

# X and Y
learn_label = [0,0,0,1]

# アルゴリズムの推定
clf = LinearSVC()

# 学習用データと結果の学習
clf.fit(learn_data, learn_label)

# テストデータによる予測
test_data = [[0,0],[1,0],[0,1],[1,1]]
test_label = clf.predict(test_data)

# 予測結果の評価
print(test_data, "の予測結果:", test_label)
print(" 正解率 = ", accuracy_score([0,0,0,1], test_label))

 

0か1の値をもつX,Yをそれぞれ定義します。すると[X,Y]は[0,0][1,0][0,1][1,1]の4パターンが考えられます。この4つの入力が学習データとなります。

 

この[X,Y]をAND演算してみましょう。AND演算?っていうのは簡単にいうと掛け算です。

 

1 AND 0 = 0

1 AND 1 = 1

 

になります。上記の4パターンをそれぞれ計算すると、0,0,0,1となります。これが正解ラベル(学習ラベル)になります。

 

学習データと学習ラベルはclf.fitを使うと学習できます。意外と簡単に学習って出来ちゃうんです。たった1行です。

 

次にテストをしていきます。テストデータとして、学習と全く同じデータを作っています。その後に、clf.predictを使うと学習器がテストデータから答えを予測します。

 

予測した答えはtest_labelに出力されます。accuracy_scoreを使って、正答率つまり4つ中いくつ正解したかを計算しています。

 

実行結果

 

出力結果は以下の通り。

 

[[0, 0], [1, 0], [0, 1], [1, 1]] の予測結果: [0 0 0 1]
 正解率 =  1.0

 

学習器の予測結果は、4つとも全て合っていますね。正解率は100%です。

 

こんなの学習器を使わなくとも、計算機の掛け算を使えば正解できると思うかもしれません。

 

でも予測するものが掛け算の答えではなく、株価の予測や画像の認識となると普通のプログラムでは計算できなくなりますので学習の出番となるわけです。

 

株価のような時系列データや画像の認識でも行う処理の流れは同じです。機械学習の手順さえ覚えておけばそんなに難しいものではないんです。

 

参考資料

 

PythonによるAI・機械学習・深層学習アプリのつくり方、ソシム

 

 

以上となります。最後まで読んでいただきありがとうございました。

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog