LoginSignup
51
62

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-08-01

こんにちは。
林@アイエンターです。

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

最近は統計分析や機械学習の分野では、Pythonが使われるケースが増えています。
Pythonには、数理演算やデータ可視化の強力なライブラリがそろっているのが
その一因かと思います。

今回は「scikit-learn」という機械学習で良く用いられるpythonライブラリを紹介します。
非常にパワフルなライブラリーです。
実際、前回のブログのサンプルデータをライブラリーで回帰分析してみます。

■環境セットアップ

Anaconda」という、Pythonパッケージをインストールします。
これはPython本体と、科学技術、数学、データ分析関連で良く使われるライブラリを、一括でインストールできるパッケージです。
Windows/MacOS/Linuxのそれぞれのパッケージが用意されています。
Pythonのバージョンは3.5のものを今回はインストールします。

スクリーンショット 2016-08-01 12.39.43.jpg

■Jupyter Notebookの起動/編集準備

Anacondaをインストールすると「Jupyter Notebook」というライブラリも
インストールされます。今回はこのフレームワークを使って話を進めます。

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

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

$ mkdir jupyter_work
$ cd jupyter_work
$ jupyter notebook

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

スクリーンショット 2016-08-01 13.12.04.png


新規のNotebookを作成するため、画面左の「New」のコンボボックスから「Python[Root]」という項目を選択します。
スクリーンショット 2016-08-01 13.08.58.png

そうすると、以下のような対話型の入力画面が表示されます。
これで、コーディング準備の完了です。
スクリーンショット 2016-08-01 13.15.26.png


■Jupyter Notebookの基本操作

「In[ ]:」の入力フィールドは、pythonコードを入力していきます。
もちろん、リターンキーで複数行入力も可能です。
スクリーンショット 2016-08-01 13.29.35.png

入力コードの実行は、ツールバーの「スクリーンショット 2016-08-01 13.35.34.png」ボタンを押すか、シフトキーを押しながらリターンキーを押すことで実行できます。
スクリーンショット 2016-08-01 13.37.43.png


■回帰分析を行ってみる

まずは、前回のブログのシンプルなデータで回帰分析を行ってみます。
データは以下の内容でした。
xy012345.png
また、回帰直線の結果は以下の方程式でした。
resolved_func.png
今回は上記の解析結果を、scikit-learnでも確認します。


まずは必要なライブラリーをimportします。スクリーンショット 2016-08-01 15.25.40.png

numpyは数値計算ライブラリです。
matplotlibはグラフ描画用のライブラリです。
pyplotはmatplotlibのオブジェクト志向ライブラリに対して、手続きインターフェースを提供します。
pandasは表計算などのデータ解析を支援するライブラリで、今回はその中のDataFrameという2次元配列(Excel表のような機能)を使います。
また、sklearnは機械学習ライブラリで、その中のlinear_modelという線形回帰モデルの機能を使います。
最後の行の「%matplotlib inline」は、ブラウザ内にグラフ描画を行わせるためのコマンドになります。


前回のX,YデータをDataFrame形式のデータで用意します。
統計学的な呼び方ではXは説明変数、Yは目的変数に相当します。
スクリーンショット 2016-08-01 16.02.10.png


次に線形回帰モデルのインスタンスを作成し、fit関数でトレーニング処理を実行します。
スクリーンショット 2016-08-01 16.06.15.png


さらに、予測元データ(px)を用意します。
pxはXデータの最小値(0)から最大値(5)を0.01刻みでスプリットしたアレイになります。
スクリーンショット 2016-08-01 16.27.03.png

ただ今回、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の青い直線で描画します。
スクリーンショット 2016-08-01 16.40.53.png


この描画された直線の傾きaとY軸の切片bがそれぞれ、期待する値の1.4と2.0になっているかを確認します。
これらの値は、model.coef_とmodel.intercept_に格納されています。
スクリーンショット 2016-08-01 16.47.53.png

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


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

scikit learnには機械学習用のサンプルデータも用意されています。
サンプルの一つにBostonの住宅価格のデータが用意されています。
元データはここのサイトが参照されているようです。
そのデータに含まれる、購入した住宅の部屋数と住宅価格の相関関係を回帰分析したコードを掲載しておきます。

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

スクリーンショット 2016-08-01 18.30.03.png
スクリーンショット 2016-08-01 18.30.28.png


今回のお話はここまで!

51
62
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
62