Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第2回】scikit-learnを用いた線形回帰、ランダムフォレスト、サポートベクタマシンによる回帰

はじめに

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

 機械学習には正解データがある教師あり学習と正解データがない教師なし学習があります。教師あり学習は説明変数と目的変数から学習し、未知のデータに対する予測を行います。教師あり学習の一つに回帰と呼ばれる手法があり、回帰は連続値(数値)を予測します。回帰には主に、線形回帰、ランダムフォレスト、サポートベクタマシンなどがあります。線形回帰はよく聞くと思います。ランダムフォレストはデータから複数の決定木を作成して予測を行い、予測結果の多数決を最終の予測結果とします。

 本記事では、scikit-learnを用いた線形回帰、ランダムフォレスト、サポートベクタマシンによる回帰について紹介します。

Aidemy Premium

 

1. ライブラリのインポート

まず、必要となるライブラリをインポートします。

 

参考:

sklearn.preprocessing.StandardScaler — scikit-learn 1.1.2 documentation

sklearn.model_selection.train_test_split — scikit-learn 1.1.2 documentation

sklearn.metrics.r2_score — scikit-learn 1.1.2 documentation

sklearn.metrics.mean_absolute_error — scikit-learn 1.1.2 documentation

 

2. データの準備

今回は学習用のデータセットであるボストンの住宅価格のデータを用いていきます。学習用データについてはこちらの記事をご覧ください。ボストンの住宅価格の説明変数と目的変数(MEDV:住宅価格)をDataFrame型にして確認します。

 

データセットの中身は以下のようになっています。

 

3. 学習データとテストデータに分割

学習をするためのデータとその学習によって得られたモデルを用いて精度を評価するテストデータに分割します。この方法はホールドアウト検証と言われます。詳しくはこちらの記事をご覧ください。データの分割にはtrain_test_splitを用います。分割の際に学習データとテストデータの数を決定するのが、test_sizeという引数になります。以下の例ではtest_size=0.3となっており、学習データが全体の7割、テストデータが全体の3割になるように分割しています。ここでのx_train、y_trainは学習データの説明変数と目的変数で、x_test、t_testはテストデータの説明変数と目的変数です。

 

4. データの標準化

標準化は平均が0、標準偏差が1になるようにデータセットに係数をかけることです。説明変数が複数ある場合、それぞれの変数のスケールが異なります。このスケールを揃えるために標準化を行います。標準化をしなかった場合、ある変数が重要視されてしまうモデルができてしまいます。

標準化はStandardScalerを用います。

 

5. 回帰

以降では線形回帰、RandomForestによる回帰、サポートベクターマシンによる回帰を行います。

5.1 線形回帰

線形回帰はLinearRegressionを用います。線形モデルLinearRegressionをlrとして用意して、lrで線形モデルの重み付けを学習します。回帰による予測を行うにはlr.predictを用います。これにより学習に基づく予測結果y_predが算出されます。精度評価を行うには決定係数r^2、RAEを算出します。

出力結果は以下の様になります。

 

5.2 ランダムフォレスト

ランダムフォレストではRandomForestRegressorを用います。手順としては線形回帰と同様です。

出力結果は以下の様になります。

 

5.3 サポートベクターマシン

サポートベクターマシンではSVRを用います。手順としては線形回帰と同様です。

出力結果は以下の様になります。

 

5.4 評価内容について

回帰の評価される指標は、平均絶対誤差 (MAE: Mean Absolute Error)、平均二乗誤差 (MSE: Mean Squared Error) 、二乗平均平方根誤差 (RMSE: Root Mean Squared Error) 、決定係数 (R2)があります。

今回のデータについては決定係数R2が大きく、MAEが小さかったことから、ランダムフォレストのモデルを用いるのが良いという結論になります。

 

オススメ書籍

Pythonによるあたらしいデータ分析の教科書

Python3エンジニア認定データ分析試験の教科書にもなっている書籍で、データ分析に必要なPythonの基礎手法を身に付けることができます。具体的には、numpyとpandasを用いたデータの前処理、matplotlibを用いたデータのグラフ化、scikit-learnを用いた機械学習の基礎記述方法を身に付けることができます。これ一つで基礎はバッチリで、実務でも十分活用できると思います。個人的には見やすい書籍でした。

データサイエンス教本 Pythonで学ぶ統計分析・パターン認識・深層学習・信号処理・時系列データ分析

こちらの書籍は初心者から少し記述できるようになった人、かつ数学的な理論と一緒にPythonの記述方法を理解したい方にオススメです。統計分析、パターン認識、深層学習、信号処理、時系列データといった幅広く実務で使用する手法を学びたい方にもオススメです。

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

こちらの基礎を抑えながら実務で必要なPython記述法を学べる書籍です。基礎を一つ一つ抑えるというよりも実務で活用できるように必要な知識を身に付けられると感じました。これ一冊あれば十分かなと思いました。

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

scikit-learnを用いた線形回帰、ランダムフォレスト、サポートベクタマシンによる回帰について紹介しました。今回の内容は機械学習の基礎的な内容なので、データの準備、学習データとテストデータへの分割、学習、予測、精度評価の流れをマスターしましょう。