问题:给出了特定用户观看的电影列表,计算了他观看任何特定电影的概率。
方法:,这似乎是一个典型的逻辑回归用例(如果我错了,请纠正我)
初始Logistic回归代码(如果有问题请更正):
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这里的参数可以是不同的演员,不同的类型,等等。我无法在上面的代码中找到如何适应这类参数
发布于 2015-11-10 10:42:13
为什么它不是LR的用例?
我要说的是,这是,而不是,这是Logistic回归的典型用例。为什么?因为你只知道有人看了什么,你只有阳性样本,你不知道什么人没有看的决定。显然,如果我看电影{m1,m2,m3},那么我就没有看M{m1,m2,m3},其中M是人类历史上所有电影中的集合。但这不是一个好的假设。我没有看他们中的大多数,因为我不拥有他们,不知道他们,或只是还没有时间这样做。在这种情况下,您只能将建模为一类问题或一种密度估计(我确实假设您无法获得任何其他知识,然后是看过的电影列表,因此我们不能进行协作过滤或其他基于人群的分析)。
为什么不手工生成阴性样本呢?
显然,您可以从一些用户没有看到的数据库中随机选择电影,假设不喜欢看它。但这只是一个任意的,抽象的假设,你的模型将非常偏向这个过程。例如,如果您将所有的未见电影作为负样本,那么正确的模型将只在训练集中学习“是”,而对其余的则只说“否”。如果你随机抽样m电影,它只会学会区分你的口味与这些m电影。但他们可以代表任何东西!特别是一个人喜欢看喜欢看的电影。总之,您可以使用unjustifiable,可以这样做,老实说,它甚至可以在某些特定的应用程序中工作;但是从概率的角度来看,这并不是一种有效的方法,因为您是在模型的假设中构建的。
我怎么能接近这个?
那么,以概率方式,您能做些什么呢?例如,您可以将电影表示为数字特征(某些特征),因此在R^d (其中d是提取的特征数)空间中有一个点云。然后,您可以拟合任何分布,例如高斯分布(d很大的径向分布)、GMM或任何其他分布。这将为P(user will watch|x)提供一个清晰(易于理解和“维护”)模型。
https://stackoverflow.com/questions/33627952
复制相似问题