npの利用について.contourはlogisticモデル決定境界(plot_decision_regions)の少しの感想を描いた.

2344 ワード

この文章は純粋に問題に遭遇したことと問題を解決したことを記録するためである.誰も案内してくれないのに苦労して、ネット上の資料が少なくて、どこから探したのか分からないので、断続的に3日続けてやっと分かって、いくつかの回り道をしました.この文章を見た仲間に少しでも助けて、穴を踏まないでほしい.
前に書いて、最近問題にぶつかって、正規化logistic回帰の決定境界を描く必要があります.しかし,フィットした関数は高次元の方程式であるため,直接図形を描くことはできない.例えば、このような方程式(一):
θ0+x1θ1+x2θ2+...+xn1xm2θn=0 θ 0 + x 1 θ 1 + x 2 θ 2 + . . . + x 1 n x 2 m θ n = 0
図形を描く前に,訓練セットは2つの特徴x 1,x 2しか与えられず,多項式特徴マッピングを用いて28次元の特徴を構築した.
白のやり方(私自身の最初のやり方):方程式を解いて、2次元の座標軸の上で描くため、x 1,x 2だけ必要として、だからx 1あるいはx 2を等式の右側に移動して、それから同時にその係数で割りますθ,例えば方程式(二):
(θ0+x2θ2+...+xn1xm2θn)1θ1=x1 ( θ 0 + x 2 θ 2 + . . . + x 1 n x 2 m θ n ) 1 θ 1 = x 1
そして生成した高次元データを入力し,結果を出す.
このように効率が低下し、非常に面倒で、迂回していることが実証された.
または、式を関数として使用します.
f(x)=θ0+x1θ1+x2θ2+...+xn1xm2θn f ( x ) = θ 0 + x 1 θ 1 + x 2 θ 2 + . . . + x 1 n x 2 m θ n
そしてデータを入力してすべての結果を得,次にこの方程式を0に等しくできる対応するx 1とx 2を判断する.
感じ:やはり回りますが、上より簡単です.
最後に、等高線npを利用する.contour()図面.原理は方程式(二)を利用して、1つの多次元の曲線が必ず立体的であることを得て、あなたは1つの不規則な茶碗の形状が2次元の座標軸の真上を押さえることを想像することができます.それから茶碗の上で1周1周の等高線を描くことができて、それでは高さが0のあの線が正式に座標軸の平面と交差するあの線で、私たちの方程式(一)が成立して、これは私たちが求めている決定の境界です.
この方法は簡単明瞭で,特に高次元決定境界の描画に適している.
ただし注意すべき穴:1.np.contour(xx,yy,z)の入力の次元に制限があります.公式ドキュメントを見てみましょう.
X and Y must both be 2-D with the same shape as Z, or they must both be 1-D such that len(X) is the number of columns in Z and len(Y) is the number of rows in Z.
2.私がzを計算するとき、入力したxxとyyは算出したz次元とずっと一致せず、z.reshapeも役に立たず、等高線を描くことができません.その後入力時にxxに変更する.ravel()とyy.ravel()後、z.reshape(xx.shape)を得ることに成功しました.....成功した.等高線の描き方は詳しくは言いませんが、ここでは思想だけを話します.コードは次のとおりです.
x = np.linspace(-.5, 1.5, 250) # x  
y = np.linspace(-.5, 1.5, 250) # y  
xx, yy = np.meshgrid(x, y)  #       

#            z
z = feature_mapping(xx.ravel(), yy.ravel(), 6)@final_theta 

#       
z = z.reshape(xx.shape)

#   
plt.contour(xx, yy, z, 0)