目前我正在研究逻辑回归的实现。没什么复杂的,只需使用一个简单的数据集(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 时,我得到的最终 theta 太大而无法预测。预测时,我总是得到 0,62 和 0,71 左右的值,这将始终预测为真。也许通过更多的迭代,我可以获得更好的结果,但我不确定。
使用 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]
关于如何使它变得更好的任何想法?