【簡単入門】初心者が一から始める機械学習入門
生活の様々な場所で使われるようになってきた、人工知能AI
ロボット、車の自動運転など身近な存在になってきましたが、そもそもどういうものなのでしょうか?
Contents
機械学習とは
人工知能とは、人間の使う自然言語を理解したり、論理的な推論を行ったり、経験から学習したりするコンピュータプログラムなどのこと
つまり、
自ら考える力が備わっているコンピュータのことです
その根幹となるのが、機械学習です。
機械学習とは、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術のことを言います。
機械学習の種類
機械学習による学習方法にはざっくり3つに分けることができます。
教師あり
問題と解答が揃っているデータを使って学習を行う
株価や天気予想など
教師なし
データだけあって解答がない
データから特徴を抽出してグループ分けする
特徴、特異性、傾向等を解析
強化学習
動物に餌を与えて芸を仕込むような、
機械に報酬を与えて、試行錯誤させて失敗と成功から学習していく方法
囲碁など
手書きの数字を分類してみる(教師ありモデル)
概要だけだとイメージが湧かないと思いますので、実際に構築していきたいと思います。
今回は教師ありモデルの学習方法で、手書きの数字を分類してみます。
学習方法の概要
1 学習データを読み込む
2学習データを以下のように分ける
訓練データ(問題)、教師データ (答え)
テストデータ(問題)、教師データ (答え)
3学習器を用意
4 訓練データと教師データをもとに学習させて、学習済みモデルを作成します
5 テストデータと教師データを使って、学習済みモデルで結果を評価します
アルゴリズムを用意する
今回は無料で公開しているscikit-learn(サイキットラーン)を使用します。
http://scikit-learn.org/stable/
学習器は、サポートベクターマシン(教師あり学習を用いるパターン認識モデル)のsvc(カーネルを使用しないSVM)というアルゴリズムを使用します。
importするだけで使用できるため、個別にダウンロードする必要はありません。
学習データを用意する
学習器と同じく、scikit-learn(サイキットラーン)を使用します。
データには主に訓練データと教師データが入っています。
- 0~9までの手書きの数字の画像が入った学習データ(訓練データ)
- 画像の正解が入った数字のデータ(教師データ)
こちらも、importするだけで使用できるため、個別にダウンロードする必要はありません。
開発環境を用意する
Anacondaに入っているSpyderを使ってみます
公式サイトからAnacondaの最新版のインストーラーを入れます。
https://www.continuum.io/downloads
インストールが終わったら、標準でSpyderが入っているので起動します。
実際にコードを書いてみる
ここからはSpyderに実際に、一つ一つコードを書いていきます。
ライブラリの読込とデータの読込
1 2 |
from sklearn import datasets #データセット from sklearn import svm #学習器 |
手書きのデータセットを読み込む
1 2 3 |
digits = datasets.load_digits() x = digits.data #data:0~9までの画像データ y = digits.target #target:教師データ |
データを4つに分ける
訓練データ(問題)、教師データ (答え)
テストデータ(問題)、教師データ (答え)
読み込んだデータを、この4つに分けていきます。
1 2 3 4 5 6 7 |
n_training = len(x)*1//2 #データを前半と後半に分ける個数 x_training = digits.data[:n_training] #訓練用の画像データ(問題)[:]は前半 y_training = digits.target[:n_training] #訓練用の教師データ(答え) x_test = digits.data[n_training:] #テスト用の画像データ(問題) y_test = digits.target[n_training:] #テスト用の教師データ(答え) |
学習器で学習済みモデルを作成
実際に学習器に学習させます。
1 2 |
clf = svm.SVC(gamma=0.001) #gammaは学習器の精度を決めるパラメータ clf.fit(x_training, y_training) #学習させる |
テストと結果
それでは実際に結果を見ていきましょう。
1 2 3 4 5 |
accuracy = clf.score(x_test, y_test) print(f" 正答率 {accuracy}") #fは文字列 正答率 0.9688542825361512 |
私の環境では、約96%のデータについて正解したようです。
ここでは取り扱いませんが、どういう画像を間違えたのか
などを実際に関数を使って確認することもできます。
機械学習のメリットとデメリット
いかがでしたでしょうか?
ライブラリを使えれば意外と簡単に実装できるのがわかったのではないでしょうか
実際にはテストデータではなく大量のデータや、アルゴリズムを用意しなくてはなりません。
機械学習は、難易度の高い数学を学ぶ必要があり、学習コストも開発コストも高いですが、
ビッグデータ社会ではニーズは高く、エンジニアとしての価値は高まって行くでしょう
最低限、アルゴリズムを使うことはとりあえずできた方がいいかもしれませんね
制作のご依頼・ご相談はこちら
dainamoでは魅力的なWEBサイトや、アプリ、ツール、ポスター、パンフレット、チラシなど幅広く承っております。ご相談、見積もり、お問い合わせなど、お気軽にご連絡ください。