機械学習というと、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とやり取りするよう設計されている。
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万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |