暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Week2の課題でPolynomial=多項式化するとどうなるか?-前半-

前回の日記で行ったWeek2のMuiltiの課題がunderift=『予測当たらなさすぎ』と

Learning Curveでは結果が出てきたので、

対策の1つに挙げられているAdding polynomial fearuresに取り組んでみたいと思います↓

 

f:id:omoshiroamericanews:20200121122525p:plain

 

Polynomial=多項式化することで期待しているのは状態の変化は↓です

 

f:id:omoshiroamericanews:20200121122826p:plain

 

青線の予測線が直線から曲線になって赤Xに近づくような変化を期待しています。

Week2のMultiの課題はもうグラフでは表現できませんが、

イメージとしてこういうことにトライしているつもりです。

 

Polynomial=多項式とはどういうことかというと、

Week2のSingle Regressionで説明されていたのが以下でした↓

 

f:id:omoshiroamericanews:20200121123100p:plain

 

これはXという1つのFeatureをX、Xの2乗、Xの3乗とすることで

1つのFeatureしかないものをあたかも3つのFeatureがあるかのように

計算するというテクニックでした。

(ところで、この例はPCAで次元落としできるのでしょうか。

興味ありますのでどこかでやってみたいと思います。)

 

Week6の課題はまさにXという1つのFeature=WaterLevelを

2乗、3乗、4乗、----P乗とすることで

1つのFeatureしかないものをあたかもp個のFeatureがあるかのように

計算するという課題でした↓

 

f:id:omoshiroamericanews:20200121123201p:plain

この課題で使った時のプログラミング式をそのままコピペすれば

polynomial化できるかと思ったのですが、そうはいきませんでしたorz

 

 なぜかというとWeek2のMultiの家の価格予想は

サイズと部屋数で2つのFeatureがあるからです。

 

f:id:omoshiroamericanews:20200121123351p:plain

 

なのでそのまま式を使えませんでした。

ここで3時間くらい時間使いました。。。

 

 

でも、どっかでやったことあるはずと思い、

各週の課題をみたらWeek3にmapfeature.mという名前で入っていました。

 

Week3の課題をみて思い出しました。

2つのFeatureがあるケースではPolynomialは↓のようになってほしいのです。

 

X1行目、X2行目の例

 

2乗が最高としたときに

X1行目とX2行目に追加されるのが

X1行目の2乗 + X1行目とX2行目の掛け算Y +X2行目の2乗

となります。

 

3乗が最高としたときには

さっきの2乗が最高の5つ(X1行目 + X2行目 + X1行目の2乗 + X1行目とX2行目の掛け算Y +X2行目の2乗)

に追加されるのが

X1行目の3乗 + X1行目の2乗とX2行目の掛け算 +

X1行目とX2行目の2乗の掛け算 + X2行目の3乗

となります。

 

 

この考えを裏付けるようにWeek3の課題では↓のように設定されています。

この課題の場合は最高が6乗なので2つのFeatureを28個にまで引き上げています

 

f:id:omoshiroamericanews:20200121123732p:plain

 

そしてこの課題のプログラミングをコピペしながら作ったのが↓です。

これ↓はX1,X2という2つのfeatureを2乗が最高にしたときのものです。

 

f:id:omoshiroamericanews:20200121123858p:plain

degreeで2乗か3乗かを決めています。

 

計算結果です↓

f:id:omoshiroamericanews:20200121123956p:plain

ピタリと狙い通り

-----------------------------------------------------------

2乗が最高としたときに

X1行目とX2行目に加えるのが

X1行目の2乗 + X1行目とX2行目の掛け算Y +X2行目の2乗

となります。

---------------------------------------------------------------

が表現できています。

 

 

なんですが、1つ疑問があります。

プログラミングではiが1か2の値をとり、jが0,1,2の値をとるので

計6つのパターンがあるはずなのに、5行になっています。

表にすると↓

f:id:omoshiroamericanews:20200121124216p:plain

i=1かつJ=2のパターンがどこかへ行ってしまっています

それで狙い通りなんですが、なぜこのパターンが消えているのかわかりません。。。

この謎はこのまま置いておきます。。。(いつかわかる日がくればいいなぁ)

 

 

今後違う課題への展開ということを考えてみます。

この↓のプログラミングは2つのFeatureをPolynomialしていくには

使えると思います。

3乗が最高のときはdegreeを3にすればできます。

 

f:id:omoshiroamericanews:20200121124414p:plain

 

しかし、3つのFeatureをPolynomialしていくには役立たないかもと思いました。

この式↑はX1,X2という2つのFeatureをI,jで増幅しているので、

3つ目となるとX3を設定する必要があるかと思います。

 

X1,X2、X3で3乗が最高のときは

1乗;X1,X2,X3,

2乗;X1の2乗、X2の2乗、X3の2乗、X1かけるX2、X1かけるX3、X2かけるX3

3乗; X1の3乗、X2の3乗、X3の3乗、 X1の2乗かけるX2、X1の2乗かけるX3、

    X2の2乗かけるX1、 X2の2乗かけるX3、 X3の2乗かけるX1,X3の2乗かけるX2

となってほしいですが、このプログラミングでは私には難しすぎですね。。。

 

逃げになりますが、これ以上は多項式=polynomialの

テクニックを追うのはやめようと思います。

そもそも多項式=polynomialしようと努力していたのは

Underfitting=『予測当たらなさすぎ』問題に対応するためでした。

 

f:id:omoshiroamericanews:20200121124515p:plain

 

そして、多項式=polynomialは3つある対応策の1つにしかすぎないので、

他の2つの方法がまだあります。

 

実験もしていないですし、素人なので直感になりますが、

多項式=polynomialはPCAの次元落としできそうな気がするので、

Week3でやるRegularizationのlambda調整の方がが効果があるのでは、と思いました。

 

今回はここまでです。次回で2乗にPolynomialした予測式でJが小さくなるような

前よりは良い予測ができたのか、Learning Curveのグラフの形は変わったのかを

見てみたいと思います。