1問目で'RM + PTRATIO + LSTAT - 1'
というモデル式を使いました。
モデル式の修正を通して便利さを体験します。
# 前回のプログラムの読込
%run 1.ipynb
# LSTATとMEDVの関係
plt.plot(Xy.LSTAT, Xy.MEDV, '.');
目的変数MDEV
と説明変数LSTAT
の関係を見ます。
直線というより指数分布に近い形をしています。
# log(LSTAT)とMEDVの関係
plt.plot(np.log(Xy.LSTAT), Xy.MEDV, '.');
試しに、np.log(Xy.LSTAT)
の関係を見てみます。直線に近づきました。
# モデル式から説明変数の表を作成
X2 = dmatrix('RM + PTRATIO + np.log(LSTAT) - 1', data=X,
return_type='dataframe')
X2[:1]
モデル式では、np.log
のような関数も扱えます。
モデル式を'RM + PTRATIO + np.log(LSTAT) - 1'
として実行します。X2
の列名がnp.log(LSTAT)
になっていることを確認してください。
RM | PTRATIO | np.log(LSTAT) | |
---|---|---|---|
0 | 6.575 | 15.3 | 1.605 |
# 線形回帰でクロスバリデーション
scores = cross_val_score(LinearRegression(), X2, y, cv=6)
score2 = scores.mean()
float(score2)
0.549
決定係数の平均(score2
)は、0.549となり、1問目より良くなりました。
切片について
'...'
というモデル式を指定すると、'1 + ...'
と解釈されます。
たとえば、’RM + PTRATIO + LSTAT – 1’は、’1 + RM + PTRATIO + LSTAT – 1’になり、’RM + PTRATIO + LSTAT’と解釈されるので、y切片は0になります。
この当たりのしくみは、ちょっとわかりづらいので、'...'
か'... - 1'
のどちらかを使うことをおすすめします。
モデル式 | y切片 |
---|---|
'...' | あり |
'... - 1' | なし |
'... + 1' | あり |
'... - 0' | あり |
'... + 0' | なし |
'... - -1' | あり |
'... + -1' | あり |
'... - -0' | なし |
'... + -0' | あり |
'... - 2' | エラー |
'... + 2' | エラー |
'+ 数字'
または'- 数字'
で使える数字は、0と1です。'... + 1'
は、y切片があるという意味になります。「y切片が1である」という意味ではありません。
コメント