Linear Regression
LinearRegressionを勉強するのに使った教材
【世界で37万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
https://www.udemy.com/course/datascience365/
基本事項
intercept_ : 切片
coef_ : 推定係数 (coef => coefficients)
score(x,y) : 線形回帰の決定係数を返す(単回帰分析にも重回帰分析にも使える)
predict(x) : 予測値の算出
自由度修正済み決定係数を求める
R^{2}_{adj} = 1-(1-R^{2})*\frac{n-1}{n-p-1}
reg = LinearRegression()
reg.fit(x, y)
# 決定係数
r2 = reg.score(x,y)
# データの数
n = x.shape[0]
# 対象とする変数の数
p = x.shape[1]
# 自由度修正済み決定係数
adjusted_r2 = 1-(1-r2)*(n-1)/(n-p-1)
shape : numpyのメソッドで配列の形状を見つける
x.shape -> (20, )
データ数20の一次元配列
不要な変数を見つける (特徴選択と言われている)
feature_selection.f_regressionを用いる。
F-regressionはそれぞれの変数一つ一つに対して単線形回帰を行う。
F値を求めてからp値を求める
- f_regressionをインポートする
- f_regressionからp値を求める
- p値を比較する
f回帰を行う際は、複数の変数同士の相互作用が考慮されていないことに注意する必要がある。
→ sklearnを用いてp値を見つける方法
標準化 -> Feature Scaling
データを一般的な範囲に納める (平均が0、標準偏差1の分布に変える)
sklearnにおいてはStandardScalerを用いる
標準化せずにモデルを作ると問題が起こることがある。
->
過学習(Overfitting)と過少学習(Underfitting)
過学習(Overfitting) : 訓練がトレーニングデータに対して過剰に適合しており、本質を外してしまっている。
過少学習(Underfitting) : モデルがデータの裏にあるロジックを捉えることができない。
過学習対策 : データを訓練用とテスト用に分ける
訓練(Training)
メモ
・sklearnは重回帰分析を行うことを前提にしている。
・決定係数はモデルの当てはまりの良さを知る上で重要。
・自由度修正済み決定係数はモデルに組み込まれた変数によって変化する
->説明力がほとんどない変数が組み込まれた場合、決定係数はほとんど変化しないが、
自由度修正済み決定係数は変化する。
・f回帰を行う際は、複数の変数同士の相互作用が考慮されていないことに注意する必要がある。
・p値はその変数が有意でないことを把握する上では非常に有用であるといえるが、その変数がどれほど有益かはわからない。
-> p値が同等だった場合にその2つの値が同等に重要であるということを示しているわけではない。
・特徴量は重みと呼ばれる(重みが小さければ小さいほどインパクトは小さく、大きければ大きいほどインパクトは大きいといえる。)
・機械学習において切片はバイアスと呼ばれる
・一般的には、最も影響が小さい重みは取り除いた方が良い
疑問
・fit()を行った後にパラメーターが出力されない。(デフォルトで出力しない設定?)
ex. LinearRegression()
・自由度修正済み決定係数ってそこまで重要じゃないのか?(sklearnにデフォルトで搭載されていないので)
-> 場面によって使い分ける必要がある。
・自由度修正済み決定係数を用いる場合は?
・sklearnを使用しない場合の特徴選択はどのように行う?
・複数同士の相互作用を考えることも重要だが、見かけ上で相互に作用し合っていることにも注意する必要もあるのでは?
-> 統計的な基準だけで考えるのではなく変数同士の関係性を常識などから考える必要もある。
・自由度修正済み決定係数はsklearnでは求めることができない
・自由度修正済み決定係数の値から特徴量を減らすかを決める
・scikit-learnにおいてp値を計算する機能がデフォルトで入っていない理由
-> 機械学習を実装する人はモデルを作成する前にfeature scalingをしている。ある変数の重みが小さくなることでその値があたかもペナルティを与えられたようになる。
・scikitlearnのtrain_test_splitは実際の現場でも使われているのか?
-> 状況によって異なる? 温度などのデータは日付で分けたほうが良いな。