現在、ロジスティック回帰の実装に取り組んでいます。単純なデータセット (Andrew Ng の住宅購入予測) を操作するだけで、それほど複雑なことはありません。これが私がやっていることです:
私の費用関数:
def Cost(theta, X, Y):
m = Y.size
h = Sigmoid(X.dot(theta.T))
J = (1.0/m) * ((-Y.T.dot(log(h))) - ((1.0 - Y.T).dot(log(1.0-h))))
return J.sum()
fmin の呼び出し:
initial_theta = zeros(shape = (X.shape[1],1))
theta = fmin(Cost2,initial_theta, args = (X,Y))
fmin を使用すると、最終的なシータが予測するには大きすぎます。予測するとき、私は常に 0.62 と 0.71 付近の値を取得します。これは常に true を予測します。反復回数が多ければ、より良い結果が得られるかもしれませんが、それについてはわかりません。
fmin_bfgs 使用時、NaN に収束するとコストがかかり、使用できなくなります。
他にもいくつかのデータがあります:
最終シータ:
[ 0.00126059 0.01033406]
最終的な費用:
[ 0.62079972]
予測:
[ 0.63422573 0.6727308 0.62957501 0.66757524 0.64503653 0.62245727
0.67765315 0.68966732 0.72525886 0.73487524 0.67716454 0.70974059
0.7142225 0.70415933 0.62892863 0.69232142 0.70645758 0.64152605
0.62052863 0.69538731]
実際の評価 (1 の場合、予測は >=.5 である必要があります。0 の場合、予測は <0.5 である必要があります)。これは私が受け取っていたはずのものです:
[0 0 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 0 1]
それを改善する方法についてのアイデアはありますか?