回帰分析

Statsmodelsでの回帰分析

前回の記事は線形回帰を解説しました。 回帰分析の説明はこの記事を参考してください。 線形回帰 回帰分析を行うとき、 Scikit-learn と Statsmodelsのライブラリをよく使います。前回はScikit-learnで回帰分析を行いました。今回はScikit-learnとStatsmodelsのライブラリを比較して、回帰分析を解説・実験します。 目次: 1. ライブラリ 1.1 Scikit-learnの回帰分析 1.2 Statsmodelsの回帰分析 2. コード・実験 2.1 データ準備 2.2 Sklearnの回帰分析 2.3 Statsmodelsの回帰分析 2.4 結果の説明 3. Partial Regression Plots 4.まとめ 1.ライブラリ 1.1 Scikit-learnの回帰分析 sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None) パラメータ設定: fit_intercept : boolean, optional, default True: False に設定すると切片を求める計算を含めません。 normalize : boolean, optional, default False: True に設定すると、説明変数を事前に正規化します。 copy_X : …

Statsmodelsでの回帰分析 Read More »

Group Lassoの正則化

前回、【正則化のLasso回帰とRidge回帰】について説明しました。 今回の記事はLasso進化形のGroup Lassoの正則化について解説します。   Group Lassoとは Group Lassoは、説明変数の属性に基づいていくつかのグループに分けられるとき、変数選択においてグループ単位で選択したいときに利用する方法です。 Lassoというのは、正則化項にL1normを使ったいわゆるL1正則化のことで、大部分の重みが0に潰れて疎な解が得られます。   この進化形として、Group Lassoという手法があります。Group Lassoでは、重みベクトルの次元をグループ分けして、各グループごとのL2normを正則化項として使います。 使うメリットは以下になります。 カテゴリー変数の効果をモデルに反映 例えば、都道府県を説明変数に入れる場合があります。この場合は、各都道府県をフラグ化して、変数にします。しかしこの方法では「都道府県じたい」が効果のある変数かどうかを判定したい場合にはわかりません。そのためカテゴリー変数じたいの効果の有無を調べる場合にGroup Lassoを使うとわかります。   大規模な線形分類、回帰のライブラのsklearn-contrib-lightningをインストールします。 pip install scikit-learnpip install sklearn-contrib-lightning   ライブラリのインポート from sklearn.datasets import fetch_20newsgroups_vectorizedfrom lightning.classification import CDClassifier   20 newsgroupsはこのブログでも過去何回か取り上げまたしが、ベクトル化済みのデータです。 (130,107のカラム) bunch = fetch_20newsgroups_vectorized(subset=”all”)X = bunch.datay = bunch.targetprint(X.shape)print(y.shape) (18846, 130107)(18846,)   分類の設定と学習 clf = CDClassifier(penalty=”l1/l2″,                   loss=”squared_hinge”,                   multiclass=True,                   max_iter=20,                   alpha=1e-4,                   …

Group Lassoの正則化 Read More »

正則化のLasso回帰とRidge回帰

前回は線形回帰とロジスティック回帰を説明しました。この記事では、正則化したLasso回帰とRidge回帰をお話になります。 回帰モデルで過学習を防ぐ方法の1つとして、誤差関数(二乗誤差関数など)に次の式で表される正則化項を加えて最小化します。正則化項を用いる回帰をリッジ回帰と呼びます。 正則化項を加えるメリットは以下になります。1.変数が多い時に発生する過学習を抑える事が出来る。2.相関があるような変数の影響を抑える事が出来る(但し一致性は保証されない)。3.相関の高い変数群がある場合、Lasso/Ridgeはその中の1つしか変数として選択できない。4.係数が小さくなる。 Ridge回帰 Ridge回帰では、L2正則化を用いています。L2ノルム(係数のユークリッド長)に対してペナルティを与えます。alpha値を設定することにより、係数への制約を調整できます。 pythonでRidge回帰を作成しましょう。先ず、ライブラリーのインポートとデータセットを作成します。 import matplotlib.pyplot as plt import numpy as np from sklearn.cross_validation import train_test_split from sklearn.datasets import make_regression from sklearn.linear_model import Ridge from sklearn.metrics import mean_squared_error # サンプルデータ作成 1000サンプル、300 特徴量 X, y, w = make_regression(n_samples=1000, n_features=300, coef=True,                           random_state=1, bias=3.5, noise=35)   モデル作成し、test scoreを計算します。 alphas = 0.1, 1,5, 10, 100   # 学習 テスト 分ける X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=3)   clf …

正則化のLasso回帰とRidge回帰 Read More »