逻辑回归用例

Logistic Regression Usecase

问题:给定一个特定用户观看的电影列表,计算他将观看任何特定电影的概率。

方法:看来是典型的逻辑回归用例(有误请指正)

初始逻辑回归代码(如有错误请指正):

def sigmoid(x):
    return (1/(1+math.exp(-x)))

def gradientDescentLogistic(x, y, theta, alpha, m, numIterations):
    xTrans = x.transpose()
    for i in range(0, numIterations):
        hypothesis = sigmoid(np.dot(x, theta))
        loss = hypothesis - y 
        # The ONLY difference between linear and logistic is the definition of hypothesis
        gradient = np.dot(xTrans, loss) / m 
        theta = theta - alpha * gradient
    return theta

现在这里的参数可以是不同的演员,不同的流派等等。 我无法弄清楚如何在上面的代码中适应这些类型的参数

为什么不是LR的用例?

我会说这不是逻辑回归的典型用例。为什么?因为你只知道有人看了什么,你只有正样本,你不知道别人没看什么决定。显然,如果我看过电影 {m1,m2,m3} 那么我就没有看过 M\{m1,m2,m3},其中 M 是 人类历史上所有电影的集合 。但这不是一个好的假设。我没有看过其中的大部分内容,因为我不拥有它们,不了解它们,或者只是还没有时间看。在这种情况下,您只能 将其建模为一个 class 问题或一种密度估计 (我假设您无法访问列表之外的任何其他知识看过的电影,所以我们不能进行协同过滤或其他基于人群的分析)。

为什么不手工生成负样本?

显然,例如,您可以 select 从某个数据库中随机播放用户未看过的电影,并 假设 他不喜欢看。但这只是一个武断的、抽象的假设,你的模型将极度偏向于这个过程。例如,如果您将 所有 没看过的电影作为负样本,那么正确的模型将简单地学会只对训练集说 "Yes",对训练集说 "No"其余的部分。如果你随机采样 m 部电影,它只会学会从这 m 部电影中区分你的口味。但他们可以代表任何东西!尤其是 喜欢 看的电影。总结一下——你可以做到这一点,老实说,它甚至可以在某些特定的应用程序中工作;但是从概率的角度来看,这不是一种有效的方法,因为您在模型中建立了 unjustifiable 假设。

我该如何处理?

那么您可以怎样做才能以概率方式做到这一点?例如,您可以将电影表示为数字特征(某些特征),因此在 space R^d(其中 d 是提取的特征数)中有一些点。然后,您可以拟合任何分布,例如高斯分布(d 为大的径向分布)、GMM 或任何其他分布。这将为您提供 P(user will watch|x).

的清晰(易于理解且 "defend")模型