一部の係数を予め与えて線形回帰モデルを構築

Can I fix coefficients of some of the features in linear regression in Scikit Learn? – StackOverflow

多分,Scikit-learnでは無理だろうし,そうする意味もないんだろう.それは,前提が違うから.

ただ,データ数が不十分でかつ幾つかの特徴量について,その最適な係数が分かっている場合は,一部の係数を予め与えて線形回帰モデルを立てたいって事もあり得るだろうか.ただ,その場合でも,既知の情報をデータから差し引いて,未知の情報に於いてフィッティングすれば良いだけなんだけど.線形回帰モデルは変数がそれぞれ独立であり,線形分離可能であるという仮定に基づくので,任意の説明変数をデータから引いても,意味は変わらない.

例えば,

import numpy as np


j = [100, 80, 60, 90]
m = [60, 90, 30, 70]
e = [80, 70, 50, 100]
ss = [70, 90, 40, 80]
sc = [50, 90, 30, 80]
f = [(1*x1+3*x2+2*x3+3*x4+2*x5)/5 for x1, x2, x3, x4, x5 in zip(j, m, e, ss, sc)]

y = np.array(f)
x = np.array([j, m, e, ss, sc]).T
x = np.concatenate((x, np.ones(len(x))[:, np.newaxis]), axis=1)
np.linalg.lstsq(x, y)[0]

array([ 0.25903862, 0.64120906, 0.38144561, 0.45396683, 0.4669905 ,
-0.01925799])

この場合でも,割と妥当な解が得られているけど,モデリングに情報量が不十分.

例えば,定数(切片)0,scは既知(係数0.4)とすれば,

y = np.array([(1*x1+3*x2+2*x3+3*x4)/5 for x1, x2, x3, x4 in zip(j, m, e, ss)])
x = np.array([j, m, e, ss]).T
np.linalg.lstsq(x, y)[0]

array([ 0.2, 0.6, 0.4, 0.6])

当然求まる.勿論,今,正則行列なので,「np.linalg.solve(x, y)」でも求まる.

広告
カテゴリー: 未分類 パーマリンク

一部の係数を予め与えて線形回帰モデルを構築 への5件のフィードバック

  1. ピンバック: 線形回帰で切片を気にする意味は無い | 粉末@それは風のように (日記)

  2. ピンバック: Sympyで線形システムを解く | 粉末@それは風のように (日記)

  3. ピンバック: Bayesian Curve Fitting | 粉末@それは風のように (日記)

  4. ピンバック: SVDによる最小二乗解 | 粉末@それは風のように (日記)

  5. ピンバック: 補間と回帰(内挿と外挿) | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中