SDG Regressor(回帰分析)【Pythonとscikit-learnで機械学習:第14回】

SGD回帰によって、連続データを線形回帰分析する手法を、実装・解説します。

本記事ではSGD Regressorを実装します。

回帰分析は連続値である被説明変数yに対して、説明変数xでyを近似する式を導出する分析です。

主に線形回帰を扱い、

y = w・x +b

という関係を満たす係数wとb(切片)を求めます。

SGD回帰はStochastic Gradient Descentを使用する回帰分析です。

近似式を導出するために係数を求めていきますが、全部のデータを一度に使用せずに一部のデータを交互に使用します。

以下のscikit-learnマップの黒矢印に対応します。

[scikit-learnのマップ]

目的変数の量を求める→サンプル数10万以上→[SGD Regressor]

です。

なおscikit-learnのversionを0.19にするために、

スタートアップからAnaconda Promptを開き、

を実行しておきます。

SGD Regressorの実装

本記事では、住宅価格のデータを使用して実装します。

Boston house-prices (ボストン市の住宅価格)と呼ばれます。

説明変数xは13次元で

  • CRIM     犯罪発生率
  • ZN     住居区画の密集度
  • INDUS   非小売業の土地割合
  • CHAS     チャールズ川 (1: 川の周辺, 0: それ以外)
  • NOX     NOx 濃度
  • RM     住居の平均部屋数
  • AGE     1940 年より前に建てられた物件の割合
  • DIS     5 つのボストン市の雇用施設からの重み付き距離
  • RAD     大きな道路へのアクセスしやすさ
  • TAX     $10,000 ドルあたりの所得税率
  • PTRATIO     教師あたりの生徒数
  • B     黒人の比率
  • LSTAT     低所得者の割合

となっています。

被説明変数yは住宅価格の中央値です。

本記事では全部の住宅の部屋数RMのみを用いた回帰と、全部の次元を使用した回帰を行います。

実装コードは以下の通りです。

結果は次の通りになります。

上記結果は、まず全部の次元を使用した回帰式の係数を示します。

次に、回帰式でテストデータの住宅価格を推定した際に、RMだけの場合の平均二乗誤差と全部の次元を使用した場合の平均二乗誤差を示しています。

全部使用する方が誤差は少ないです。

グラフは、1つ目はx軸が部屋数(正規化)を示し、y軸が住宅価格となっています。

直線はRMだけの場合の回帰結果を示します。

2つ目のグラフはテストデータにおいて、x軸が住宅価格を示し、y軸が回帰式で推定した値と正解値との誤差を示します。

実装コードを解説します。

#解説 2:Housingのデータセットを読み込む——-

ここでHousingのデータを読み込んでいます。

#解説 3:データの整形——-

説明変数xの各次元を正規化しておきます。

#解説 4:学習データとテストデータに分割する—-

8割を学習データとして回帰式を作成し、残り2割で誤差を評価します。

#解説 5:SGD Regressorを適用する——————————————-
clf = linear_model.SGDRegressor(max_iter=1000)

回帰式を実行しますが、iterationの回数を1000にしておきます。

デフォルトでは5で少ないです(そのうち1000がdefaultになるそうです)

#解説 6:結果をプロットする—-

RMだけで回帰した場合の結果をプロットします。

きちんと回帰分析できているかを目視します。

#解説 7:誤差をプロットする————————————————-

テストデータに対して、回帰式での予測値との誤差を求め、プロットします。

全部のデータを使用するほうが結果が良いです。

それでは「結局、SGD Regressionって何をやっていたの?」を説明します。

SGD Regressionの心

正確な情報は以下をご覧ください。

scikit-learnのSGDの解説ページ

scikit-learnのSGD Regressorの解説ページ

基本的にはSGD Classificationとやっていることは同じになります。

SGD(クラス分類)【Pythonとscikit-learnで機械学習:第1回】
本シリーズでは、Pythonを使用して機械学習を実装する方法を解説します。また各アルゴリズムの数式だ...

事前に説明変数を正規化し、iteration回数を増やしておく点に注意が必要です。

以上、Pythonとscikit-learnで学ぶ機械学習入門|第14回:SGD回帰での回帰分析でした。

次回はLasso回帰について説明します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...