【5分】機械学習の流れをPythonコードで確認!scikit-learnでデータ準備・訓練・モデルの評価の解説!

機械学習というと、TensorFlow、Keras、ニューラルネットワークなどどこから学んでよいかわからなくなります。機械学習を学ぶ上で、比較的簡単なのがscikit-learnです。

この記事では、scikit-learnを使って、データの読み込み、モデルの作成(訓練)、モデルの評価と、機械学習の一連の流れを解説します。

 

この記事は、以下のような人を対象にしています。

・機械学習を初めてやってみる

・scikit-learnでデータ解析、データマイニングをしてみたい。

・機械学習の一連の流れを知りたい

 

scikit-learnとは

scikit-learnについて、wikiには以下のように書かれています。

scikit-learn (旧称:scikits.learn) はPythonのオープンソース機械学習ライブラリである。サポートベクターマシン、ランダムフォレスト、Gradient Boosting、k近傍法、DBSCANなどを含む様々な分類、回帰、クラスタリングアルゴリズムを備えており、Pythonの数値計算ライブラリのNumPyとSciPyとやり取りするよう設計されている。

Wiki:scikit-learn

 

scikit-learnは、Pythonの機械学習ライブラリです。

scikit-learnは、TensorFlowなど他の機械学習ライブラリーに比べて、使いやすく、初めて機械学習をやる人にオススメのライブラリーと言えます。

 

scikit-learn使った機械学習の基本的な流れとは

scikit-learn使った機械学習の基本的な流れを解説します。

 

データを準備する準備

この記事では、データーサイエンスの世界で有名なirisのデータを使います。

irisは、実データのように欠損値がなく、キレイなデータと言えるので機械学習を学ぶときによく使われます。

 

前処理

実データは、欠損データがあったりしてデータ補完などの前処理が発生します。

今回は、irisのデータを使うため前処理は省略します。

ちなみに、機械学習の全行程のうち、データの品質確保、前処理が全体の8割と言われています。

前処理をして精度のよい訓練データを作成します。

 

訓練

いよいよ機械学習の訓練のフェーズです。

ただし、次の「モデルの評価」の工程でモデルの性能を評価するため、元になるirisのデータから8割を「訓練用データ」、2割を「テスト用データ」に分けます。

訓練は、「訓練用データ」を使ってモデルを作成します。

訓練用ロジックは、今回はLinearRegressionを使って学習させました。

 

モデルの評価

訓練が終わったら、モデルの性能をチェックします。

モデルの性能のチェックは、訓練フェーズで取り出した「テスト用データ」を使って、予測させて性能をチェックします。

 

機械学習の流れをPythonのコードで書いてみると

実際にPythonでコードを書いてみます。

#iris(アヤメ)のデータを読み込みから、モデルを作成まで
#- irisのデータを読み込む
#- 散布図行列を使ってデータの特性を可視化
#- irisデータから、トレーニングデータとテストデータを分ける
#- LinearRegression(最小二乗線形回帰) でモデルを作成する
#- モデルの評価(スコア)をする

#irisのデータを読み込む
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()

#読み込んだirisのデータをDataFrameに変換する
df = pd.DataFrame(iris.data, columns=iris.feature_names)

#irisの判別結果を、「target」カラムを作り格納
#散布図行列に出力するため
df['target'] = iris.target

#データの特性の確認
df.describe()

#データの可視化をしてみる
import seaborn as sns
import matplotlib.pyplot as plt

#%matplotlib inline

#散布図行列の表示
#答えとなるtargetを色で区別できる(分類)しておく
sns.pairplot(df,hue='target')

#散布図を詳細に見るときにつかう
plt.scatter(df["sepal length (cm)"], df["target"])  # 散布図のプロット

#ここから機械学習で
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression

#説明変数の取得
# iris.target以外
data_x =  df.iloc[:, :-1]

#目的変数の取得
# iris.targetの部分
data_y = df.iloc[:, -1]

#データを分ける
#訓練データ8割 テストデータ2割で分割する
train_x,test_x,train_y,test_y = train_test_split(data_x,data_y, test_size = 0.2)

#モデルLinearRegressionを選択する
model = LinearRegression()

#訓練データを使って学習する
model.fit(train_x, train_y)

#テストデータを使って、解答を予測する
model.predict(test_x) 

#モデルを評価する(2つの関数は、どっちも同じ値になる)
#1.0に近づくほど、精度の高いモデルと言える
print(model.score(test_x,test_y))  
print(r2_score(test_y,   model.predict(test_x)))

 

まとめ

scikit-learn使った機械学習は、以外に簡単にコードが書けると思います。

irisのデータは、欠損値がなくキレイなデータと言えます。

実際は、データの品質確保、前処理が全体の8割と言われています。

機械学習が成功するかどうかは、プログラミングのコードが書けるというより、機械学習の前までにできるだけ良質なデータを用意できるかが、肝になってくると言えます。

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア
最新情報をチェックしよう!