機械学習で最も簡単な分類をしてみる【Python】

機械学習で最も簡単な分類をしてみる【Python】プログラミング
ゆうすけ
ゆうすけ

機械学習で分類問題をしてみたいです・・・

資格マフィア
資格マフィア

Pythonを使えば、簡単な分類問題ならサクッと書けるぞ。
コード付きで解説しよう。


✔️ 本記事のテーマ

 Pythonで機械学習の分類問題を行う方法(コード付き)

 

✔️ 読者さんへの前置きメッセージ


本記事は「機械学習の分類問題」について書いています。

 

この記事を読むことで
「機械学習の分類問題 や 分類処理をPythonで書く場合のコード」
をイメージできるようになります。

 

Pythonは機械学習をするのにオススメの言語です。

 

機械学習ライブラリもたくさんあるので、
手軽に機械学習を行うコードを書くことができます。

 

それでは、機械学習の分類やPythonでのコードの書き方について解説していきましょう。

 

機械学習の分類問題とは?

機会学習の分類問題とは?

機械学習とは、

「学習データからデータの傾向を読み取り、未知のデータに対応する」

ことです。

 

つまりデータに対する処理が、機械学習の真髄です。

 

機械学習の分野の中で、
データに付随する正解ラベルを用いて学習する方法があります。

 

これを教師あり学習と呼びます。

 

この教師あり学習の中でも、
最終的にいくつかのクラスに分類することを目的とした学習を分類問題と呼びます。

 

例えば、「メールを受信した時、そのメールが迷惑メールか正常なメールかに分類する」みたいな判定を行うのが分類問題です。

 

この分類問題は実際に多くの場面で活用されています。

 

次は、分類問題が使われている場面について解説していきましょう。

 

機械学習の分類問題はどのような場面で使われているか?

機械学習の分類問題はどのような場面で使われているか?

分類問題は多くの場面で活用されています。

  • 男性か女性かの分類(2クラス分類)
  • 迷惑メールかどうかの判定(2クラス分類)
  • 書かれた数字がどの数字かを判定する(0~9の10クラス分類)

などのような場面で使われる処理方法です。

 

なお、Python と機械学習でできることについては
Pythonで作ったAIでできる5つのこと
の記事にまとめています。よければ参考にしてみて下さい。

 

Pythonで機械学習の分類問題を書いてみる

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や機械学習について学ぶなら

今回はPythonを使って、最も簡単な分類問題を実装してみました。

 

今回行った分類問題を始め、機会学習について学ぶならUdemyの教材がオススメです。

>> 人工知能・機械学習 脱ブラックボックス講座 – 初級編 –

 

Udemyは動画ベースで学習ができます。
よって、実際のコードや図解を見ながら、学習を進めることができます。

 

さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。

 

先ほどの教材は「人工知能とは何か?」「機械学習とは何か?」
ということについて概念から丁寧に解説されています。
これらの分野で頻出する数式の意味が徹底的に解説されているので、
機械学習の初学者でも苦手意識なく理解することができます。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。


オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。


オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。


オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。


気になった方はぜひチェックしてみて下さい〜!

コメント

タイトルとURLをコピーしました