【发布时间】:2015-07-15 12:44:48
【问题描述】:
我一直在学习 Andrew Ng CSC229 机器学习课程,现在正在学习逻辑回归。目标是最大化对数似然函数并找到最佳的 theta 值。讲义的链接是:[http://cs229.stanford.edu/notes/cs229-notes1.ps][1] -pages 16-19。现在下面的代码显示在课程主页上(虽然在 matlab 中——我将其转换为 python)。
我将其应用于包含 100 个训练示例的数据集(Coursera 主页上提供的机器学习入门课程的数据集)。该数据有两个特征,即两次考试的两个分数。如果学生被录取,则输出为 1,如果学生没有被录取,则输出为 0。已经显示了下面的所有代码。下面的代码使似然函数收敛到大约 -62 的最大值。 theta 的对应值为 [-0.05560301 0.01081111 0.00088362]。当我测试像 [1, 30.28671077, 43.89499752] 之类的训练示例时,使用这些值应该给出值 0 作为输出,我得到 0.576,这对我来说毫无意义。如果我用输入 [1, 10, 10] 测试假设函数,我会得到 0.515,这又是没有意义的。这些值应对应于较低的概率。这让我很困惑。
import numpy as np
import sig as s
def batchlogreg(X, y):
max_iterations = 800
alpha = 0.00001
(m,n) = np.shape(X)
X = np.insert(X, 0, 1, 1)
theta = np.array([0] * (n+1), 'float')
ll = np.array([0] * max_iterations, 'float')
for i in range(max_iterations):
hx = s.sigmoid(np.dot(X, theta))
d = y - hx
theta = theta + alpha*np.dot(np.transpose(X),d)
ll[i] = sum(y * np.log(hx) + (1-y) * np.log(1- hx))
return (theta, ll)
【问题讨论】:
-
链接失效。此外,您应该在问题中真正发布相关文本,而不是仅仅提供链接。
-
抱歉这里是一个工作版本cs229.stanford.edu/notes/cs229-notes1.ps
-
你尝试过更大的学习率(
alpha)吗?它通常不会那么小,因此您可能没有正确训练模型。试试0.1, 0.001等等。