问题:根据特定用户观看的电影列表,计算他观看任何特定电影的概率。
方法:它似乎是一个典型的逻辑回归用例(如果我错了,请纠正我)
初始逻辑回归代码(如果出现问题,请更正):
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
现在这里的参数可以是不同的演员,不同的流派等。 我无法弄清楚如何在上面的代码中使用这些参数
答案 0 :(得分:2)
我会说这是不典型的Logistic回归用例。为什么?因为您只知道有人观看,您只有正面样本,您不知道某人没有通过决定观看。显然,如果我看了电影{m1,m2,m3},那我就不会看M \ {m1,m2,m3},其中M是人类历史上所有电影的集合。但这不是一个好的假设。我没有看过他们中的大多数,因为我不拥有它们,不了解它们或者根本没有时间做这件事。在这种情况下,您可以仅将此模型设计为一类问题或一种密度估算(我假设您无法访问任何其他知识,然后看到电影列表,所以我们不能例如,协同过滤或其他 - 基于人群的分析)。
显然,您可以从某些数据库中随机选择电影,这些电影是用户看不到的,假设他不喜欢看电影。但这只是一个任意的抽象假设,你的模型将极其偏向于这个过程。例如,如果您将所有看不见的电影作为负片样本,那么正确的模型只会学会说"是"仅用于训练集," No"对于其余的。如果您随机抽取m
部电影,它只会学会区分您对这些m
电影的喜好。但他们可以代表什么!特别是 - 一个人爱看的电影。总而言之 - 你可以这样做,说实话它甚至可以在某些特定的应用程序中工作;但是从概率的角度来看,当你在模型中构建不合理的假设时,这不是一种有效的方法。
那么你能以概率方式做些什么呢?例如,您可以将电影表示为数字特征(某些特征),因此在某些空间中有一个点云R ^ d(其中d是提取的特征数)。然后,您可以拟合任何分布,例如高斯分布(径向与d很大),GMM或任何其他分布。这将为P(user will watch|x)
提供一个清晰(易于理解和#34;保护")的模型。