はじめに
線形回帰は、端的に言えばあるデータを別のデータ
と重みトバイアスである
をこうy呂して
の関係でデータを表現するということです。
では例えば、で表現されるようなデータは線形回帰で扱えないのでしょうか。僕にもそう考えていた時期がありました。
このエントリでは線形でないデータをどのように線形回帰で扱うかをまとめます。
解説
コードサンプル
また、コード例は以下においてありますので、コードを見たほうが早い人達はこちらを参照してください。
github.com
データの生成
今回は適当なデータを生成します。なんでもいいのですが、という式で表され、それぞれに対して平均0, 標準偏差0.5の正規分布で表現される誤差を乗せています。とても適当です。
データは概ね上記の様な感じになります。
例えば電気代のように、15度位で最小になる(暖房も冷房も付けない人が多いので)が、そこを境にの関係で上昇するようなものとして捉えてください。
縦軸の単位は適当なのでなんでもいいです。例えばや千円単位、ということでもいいかもしれません。適当なので何も考えてないです。
結果は見えていますが、このまま線形回帰器に突っ込んだらこうなります。
ちなみにちなみに、スコアは0.0001118568724230995でした。とてもフィットしてないですね。
x軸を変換する
気を取り直していきましょう。
x軸を変換することで、と
ではなく、
と
の関係にして線形の関係を作っていきます。
x軸を折り返す
左右非対称らしいデータはまず折り返します。
今回対称になる点は15と知っているのでそこで折り返しますが、そこはデータ次第で求めます。
つまり、としてみます。
折り返せていることがわかります。これでも前よりは随分線形っぽく見えますが、さらに変換を加えます。
を求める
がわかれば理想ですが実際には無理なので、近似的に
を求めて、
という変換をします。ここではそれ自体の説明は行いません。
また、今回はを知っているので、一旦それを使います。恣意的ですいません。
による変換
今回は
としています。ただし
には1つ前で求めた通り
を代入します。
再度線形回帰をする
ここでの注意点は、学習時にで学習させるので、予測する値もg(x)の変換を通した上になります。
また、の各点は
に対応していることに注意してください。
つまり、最終的にグラフを書くときは予測値をとすると、
でグラフ化します。(例のごとく、オレンジが予測の線です)
まとめ
今回は線形でない関係を持つデータをうまいこと線形に変換し、線形回帰で扱う方法についてまとめました。
関数を見つけ出すことさえできれば、難しいデータも線形モデルとして扱えるのは非常に重要なことだと思います。