こんにちは。
林@アイエンターです。
前回はブログでは数学的なアプローチの回帰分析のお話をいたしました。
最近は統計分析や機械学習の分野では、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でも確認します。
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の住宅価格のデータが用意されています。
元データはここのサイトが参照されているようです。
そのデータに含まれる、購入した住宅の部屋数と住宅価格の相関関係を回帰分析したコードを掲載しておきます。
当然ですが、部屋数が多くなると住宅価格が高くなる傾向が見て取れます。
今回のお話はここまで!