Edited at

【機械学習】scikit learnを用いた回帰分析

More than 3 years have passed since last update.

こんにちは。

林@アイエンターです。

前回はブログでは数学的なアプローチの回帰分析のお話をいたしました。

最近は統計分析や機械学習の分野では、Pythonが使われるケースが増えています。

Pythonには、数理演算やデータ可視化の強力なライブラリがそろっているのが

その一因かと思います。

今回は「scikit-learn」という機械学習で良く用いられるpythonライブラリを紹介します。

非常にパワフルなライブラリーです。

実際、前回のブログのサンプルデータをライブラリーで回帰分析してみます。


■環境セットアップ

Anaconda」という、Pythonパッケージをインストールします。

これはPython本体と、科学技術、数学、データ分析関連で良く使われるライブラリを、一括でインストールできるパッケージです。

Windows/MacOS/Linuxのそれぞれのパッケージが用意されています。

Pythonのバージョンは3.5のものを今回はインストールします。


■Jupyter Notebookの起動/編集準備

Anacondaをインストールすると「Jupyter Notebook」というライブラリも

インストールされます。今回はこのフレームワークを使って話を進めます。

ちなみに「Jupyter Notebook」は、pythonをコマンドライン環境で対話型実行できる「IPython」を、ブラウザ環境へ拡張したフレームワークになります。

ひとまず、作業ディレクトリ「jupyter_work」を作成し、そこから「Jupyter Notebook」を起動します。

$ mkdir jupyter_work

$ cd jupyter_work
$ jupyter notebook


ブラウザが起動し、以下のような画面が表示されるかと思います。


新規のNotebookを作成するため、画面左の「New」のコンボボックスから「Python[Root]」という項目を選択します。

そうすると、以下のような対話型の入力画面が表示されます。

これで、コーディング準備の完了です。



■Jupyter Notebookの基本操作

「In[ ]:」の入力フィールドは、pythonコードを入力していきます。

もちろん、リターンキーで複数行入力も可能です。

入力コードの実行は、ツールバーの「

」ボタンを押すか、シフトキーを押しながらリターンキーを押すことで実行できます。



■回帰分析を行ってみる

まずは、前回のブログのシンプルなデータで回帰分析を行ってみます。

データは以下の内容でした。



また、回帰直線の結果は以下の方程式でした。



今回は上記の解析結果を、scikit-learnでも確認します。


まずは必要なライブラリーをimportします。

numpyは数値計算ライブラリです。

matplotlibはグラフ描画用のライブラリです。

pyplotはmatplotlibのオブジェクト志向ライブラリに対して、手続きインターフェースを提供します。

pandasは表計算などのデータ解析を支援するライブラリで、今回はその中のDataFrameという2次元配列(Excel表のような機能)を使います。

また、sklearnは機械学習ライブラリで、その中のlinear_modelという線形回帰モデルの機能を使います。

最後の行の「%matplotlib inline」は、ブラウザ内にグラフ描画を行わせるためのコマンドになります。


前回のX,YデータをDataFrame形式のデータで用意します。

統計学的な呼び方ではXは説明変数、Yは目的変数に相当します。


次に線形回帰モデルのインスタンスを作成し、fit関数でトレーニング処理を実行します。


さらに、予測元データ(px)を用意します。

pxはXデータの最小値(0)から最大値(5)を0.01刻みでスプリットしたアレイになります。

ただ今回、linear_modelの予測関数(predict)に渡すpxは、関数の仕様上以下のような2次元配列を渡してやる必要があります。



[[0.00],[0.01],[0.02],[0.03].....]



ここでは、[:,np.newaxis]で、1次元配列を2次元配列に変換しています。


予測関数(predict)に予測元データpxを代入し、予測結果をpyに格納します。

そのデータをグラフにプロットします。

plt.scatter()で、元データのXとYを赤点でプロットし、plt.plot()で予測した結果をpxとpyの青い直線で描画します。


この描画された直線の傾きaとY軸の切片bがそれぞれ、期待する値の1.4と2.0になっているかを確認します。

これらの値は、model.coef_とmodel.intercept_に格納されています。

確かに期待する値が出力されていることが確認できます。



■scikit learnのサンプルデータで回帰分析を行う

scikit learnには機械学習用のサンプルデータも用意されています。

サンプルの一つにBostonの住宅価格のデータが用意されています。

元データはここのサイトが参照されているようです。

そのデータに含まれる、購入した住宅の部屋数と住宅価格の相関関係を回帰分析したコードを掲載しておきます。

当然ですが、部屋数が多くなると住宅価格が高くなる傾向が見て取れます。




今回のお話はここまで!