機械学習で分類問題をしてみたいです・・・
Pythonを使えば、簡単な分類問題ならサクッと書けるぞ。
コード付きで解説しよう。
✔️ 本記事のテーマ
Pythonで機械学習の分類問題を行う方法(コード付き)
✔️ 読者さんへの前置きメッセージ
本記事は「機械学習の分類問題」について書いています。
この記事を読むことで
「機械学習の分類問題 や 分類処理をPythonで書く場合のコード」
をイメージできるようになります。
Pythonは機械学習をするのにオススメの言語です。
機械学習ライブラリもたくさんあるので、
手軽に機械学習を行うコードを書くことができます。
それでは、機械学習の分類やPythonでのコードの書き方について解説していきましょう。
機械学習の分類問題とは?
機械学習とは、
「学習データからデータの傾向を読み取り、未知のデータに対応する」
ことです。
つまりデータに対する処理が、機械学習の真髄です。
機械学習の分野の中で、
データに付随する正解ラベルを用いて学習する方法があります。
これを教師あり学習と呼びます。
この教師あり学習の中でも、
最終的にいくつかのクラスに分類することを目的とした学習を分類問題と呼びます。
例えば、「メールを受信した時、そのメールが迷惑メールか正常なメールかに分類する」みたいな判定を行うのが分類問題です。
この分類問題は実際に多くの場面で活用されています。
次は、分類問題が使われている場面について解説していきましょう。
機械学習の分類問題はどのような場面で使われているか?
分類問題は多くの場面で活用されています。
- 男性か女性かの分類(2クラス分類)
- 迷惑メールかどうかの判定(2クラス分類)
- 書かれた数字がどの数字かを判定する(0~9の10クラス分類)
などのような場面で使われる処理方法です。
なお、Python と機械学習でできることについては
「Pythonで作ったAIでできる5つのこと」
の記事にまとめています。よければ参考にしてみて下さい。
Pythonで機械学習の分類問題を書いてみる
ここで実際にPythonで機械学習の分類問題を行ってみましょう。
どんな分類問題を機械学習するのか
今回は、アヤメの分類を行います。
アヤメの「がく片の長さ」、「がく片の幅」、「花びらの長さ」、「花びらの幅」を使って、
画像のような3種類のアヤメに分類します。
では、どのようにこれを行うかをコードベースで解説していきましょう。
サンプルコード(全体)
今回の記事で行う処理の全体は以下の通りです
# 使用するライブラリのインポート
from sklearn import datasets
from sklearn.model_selection import train_test_split as split
import tensorflow as tf
import keras
from keras.layers import Dense,Activation
import numpy as np
# scikit-learnからデータの取り出し
iris = datasets.load_iris()
# 使用するデータセットを分割する
x_train, x_test, y_train, y_test = split(iris.data,iris.target,train_size=0.8,test_size=0.2)
# ニュートラルネットワークで使用するモデル作成
model = keras.models.Sequential()
model.add(Dense(units=32,input_dim=4))
model.add(Activation('relu'))
model.add(Dense(units=3))
model.add(Activation('softmax'))
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
#教師あり学習の実行
model.fit(x_train,y_train,epochs=100)
#評価の実行
score = model.evaluate(x_test,y_test,batch_size = 1)
#特定のデータに対する予測を実行する
x = np.array([[5.1,3.5,1.4,0.2]])
r = model.predict(x)
r.argmax()
順番に詳しく解説していきましょう。
使用するライブラリのインポート
from sklearn import datasets
from sklearn.model_selection import train_test_split as split
import tensorflow as tf
import keras
from keras.layers import Dense,Activation
import numpy as np
まず使用するライブラリをインポートしましょう。
Pythonには機械学習を行うために便利な外部ライブラリがたくさん用意されています。
特にこれらのライブラリはよく使います。
- sklearn
- tensorflow
- keras
- numpy
プログラムの上文でインポートして、プログラムの中で使えるようにしておきましょう。
また、これらのライブラリをPythonから使うためにはインストールする必要があります。
使用しているPython環境へのインストールを忘れないようにしましょう。
TensorFlowのインストール方法については
「【python】TensorFlowのインストール方法と使い方」や
「【Windows版】TensorFlowのインストール」
の記事で解説しています。
また、sklearn のインストール方法については
「sklearnのインストール方法と使い方」
の記事で解説しています。
scikit-learnからデータの取り出し
iris = datasets.load_iris()
今回の記事では、アヤメの分類を実施します。
学習に使用するアヤメのデータセットは、機械学習分野で昔から使われている有名なデータセットで、3種類のアヤメの品種(Setosa, Versicolour, Virginica)のデータです。
このデータセットは、scikit-learnに含まれており、
load_iris関数でデータセットを取得することができます。
データセットまでライブラリから取得できるのは便利ですね。
使用するデータセットを分割する
x_train, x_test, y_train, y_test = split(iris.data,iris.target,train_size=0.8,test_size=0.2)
ここではデータセットを分割しています。
機械学習では、データセットを「学習用のデータ」と「評価用のデータ」に分割して使います。
「学習用のデータ」を使って、学習してモデルを作ります。
そして、「評価用のデータ」を使って、作ったモデルを評価することで、そのモデルの精度を測ります。
このように、
学習 → 評価 → 学習 → 評価 → ….
を繰り返すことでより精度の高いモデルを作っていくのが機械学習です。
今回は、150個のサンプルデータを、学習用データ120個、評価用データ30個に分割しています。
ニュートラルネットワークで使用するモデル作成
model = keras.models.Sequential()
model.add(Dense(units=32,input_dim=4))
model.add(Activation('relu'))
model.add(Dense(units=3))
model.add(Activation('softmax'))
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
この部分で機械学習のモデルを作成しています。
今回はkerasを使っています。
kerasを使うことで、直感的にモデルを作成して、手軽に機械学習を行うことができます。
各行のコードで、機械学習で使うモデルや手法を定義しています。
今回は以下のような特徴(手法)を持つモデルを定義しています。
- 「Sequentialモデル」
- 中間層が32個、入力層が4個のニューロン
- 中間層の活性化関数として「ReLU関数」
- 3個の出力層
- 出力層の活性化関数として「softmax関数」
- 損失関数として「クロスエントロピー法」
- 最適化アルゴリズムとして「確率的勾配降下法」
- 評価ラベルとして「正解率」
手法や学習方法などをコードベースで定義することができるので、機械学習についての知識があれば手軽にモデルを構築することができます。
教師あり学習の実行
model.fit(x_train,y_train,epochs=100)
この部分で学習を実行しています。
model.fit関数で学習を実行します。
引数は、データとエポック数を指定します。
エポック数とは、「一つの訓練データを繰り返して学習させる数」のことです。
この数字が大きければ大きいほど、多く繰り返して学習します。
今回は100回繰り返して学習するように指定しています。
評価の実行
score = model.evaluate(x_test,y_test,batch_size = 1)
この箇所で評価を行っています。
先ほどの箇所で実行した、学習の結果を評価します。
ここで評価することで、より精度の高いモデルを作成することができます。
特定のデータに対する予測を実行する
x = np.array([[4.8,2.7,1.5,0.2]])
r = model.predict(x)
r.argmax()
ここまででモデルの作成、学習、評価を実行してきたので、
最後に特定データに対する予測を実行してみましょう。
今回は「がく片の長さ」が4.8、「がく片の幅」が2.7、「花びらの長さ」が1.5、「花びらの幅」が0.2のデータを予測してみましょう。
このデータを学習済みモデルで予測して、argmax関数にかけると、0が出力されます。
これは0番目のクラス、つまり「setosa」を予測していることが分かります。
このようにして分類問題を行うことができます。
もっとPythonや機械学習について学ぶなら
今回はPythonを使って、最も簡単な分類問題を実装してみました。
今回行った分類問題を始め、機会学習について学ぶなら以下の書籍がオススメです。
この書籍は初心者向けにかなり丁寧に書かれています。
さまざまな状況においてどのようなライブラリを使うべきなのか、
また各ライブラリをどのように使うのかについて詳しく説明されています。
また、この書籍の出版元であるオライリー社はプログラミングや機械学習の世界で有名です。
これから機械学習についてスキルを高めようとしている方にオススメの書籍です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント