0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

courseraのMachine Learning講義を受けてみた2

Posted at

多量変数の線形回帰

変数が多くなるとき、その式をいちいち羅列して記入するのはダサい。

以下のようにするとかなりおしゃれ

f = a0*x0 + a1*x1 + a2*x2 + .... + an*xn

これを
A = [a0,
     a1,
     a2,
     .
     .
     an]

X = [x0,
      x1,
      x2,
      .
      .
      xn] (x0 = 1)

とすると、
f = transpose(A)*X

実践的なテク

フィーチャースケーリング

住宅価格の予測において、二つの特徴量を用いたとする。

x1が土地面積(100~10000)
x2が部屋数(1~5)

このとき、x1,x2の範囲にかなり差があるため、J(a0,a1,a2)はかなり歪んだ等高線を描く。

歪んだ等高線の場合、最急降下法を行うとあっちへ行ったり、こっちへ行ったりするため、非常に時間がかかる。

これを改善するために、計算前にスケールの調整を用いるとよい。
xnは約-1<=x<=1であることが望ましい。厳密である必要はない。

よって上記の例では、すべてのデータセットにおいて
x1/10000
x2/5 (これは別にしなくてもいい)
を行うと、等高線がきれいな円となり、計算速度が速くなる。

また、平均ノーマライゼーションという手法もある。
これはより整えたい場合に用いる。
範囲の平均で引いて、(最大値ー最小値)または標準偏差で割る。

上記の例で行くと

(x1-1000)/2000
(x2-3.5)/7

とすると、両方の範囲が-0.5から0.5の間に収まる。

学習率α

大きすぎると、どんなに回数を重ねてもmin J()が収束しない。
小さすぎると、収束に時間がかかる。

一つの解決手段は、αを0.01,0.03,0.1,0.3,1,3,...と三倍ずつ大きくしていくことだ

これで急に収束しなくなれば、その前の値で反復を重ねれば良い

非線形回帰

例えば、家の土地面積から価格を予測するとき、データセットのプロットが明らかに曲線を描いていたとする。

このとき、線形回帰と同様の手順で

h(x) = a0 + a1x + a2x^2 +a3*x^3

と定義すればよい。
ただし、ここではフィーチャースケーリングが大変重要となる。

面積の範囲が100以上、10000以下だとすると、
(面積)^2は10000以上10^8以下
(面積)^3は10^6以上10^12以下
となる。

つまり、スケーリングを怠れば大惨事だ。

しかし、冷静に考えて住宅価格が三次関数のように急に発散し出したり、
二次関数のように急に暴落することは考えがたい。

このとき便利なのが、ルートである

h() =a0 + a1x + a2√x

とすればどうだろう。後半になるにつれてゆるやかになることが表現できる。

正規方程式法

特徴量がn個のデータがm個あるデータセットを使ってyを学習させるとき
Xの行列を1列目をすべて1にし、2列目以降にデータセットを入れる。
image.png
画像は抗議より引用
よって、Xはm*(n+1)の行列

Yの行列はベクトルで表現する。

すると、求めるべきθは

{tran(X)X}^-1tran(X)*Y

として表せるようだ。

pinv(X' *X)*X'*Y

とoctaveでは表記できる。

最急降下法と正規方程式法の違い

どちらかの欠点がもう片方では補完されているため、
場合に応じた選択が必要である。

最急降下法の欠点

適切なαを選択する必要がある
より多くの繰り返しを必要とする。

正規方程式法の欠点

特徴量nが大きくなると時間はn^3倍になる。
よって、特徴量が多い場合は向かない。

n=10^4くらいが基準点になるようだ。

行列の逆数が見つからない場合

主に二つの原因が考えられる。

相関を互いに持つ特徴量があるとき

例えば住宅価格予測において、特徴量に土地の縦横の長さ、面積が含まれていたとする。
この二つの特徴は相関を持つため、どちらかを省くと逆数が見つかるだろう。

特徴量が多すぎる

例えばデータ量が10しかないのに、特徴量が100あるなどは逆数が見つかりにくいらしい。
特徴量を削ってみよう

#octaveの基本操作

行列の表記
A = [1 2; 3 4; 5 6]
4*4単位行列
B = eye(4)
Aが3*2の行列であることを[3, 2]という行列で返す。
size(A)

ファイルの読み込み
load fileName.factor
か
load ('fileName.factor')

行列からの取り出し
A(2,2)
4が取り出される

A(3, :)
[5, 6]が取り出される。

A=[1 2; 3 4; 5 6]
B=[11 12; 13 14; 15 16]
のとき
[A B]=
[1 2 11 12; 3 4 13 14; 5 6 15 16]
となる
[A;B]
だと縦に合体する。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?