0

我是新来scikit学习,我试图创建一个多项式贝叶斯模型来预测电影票房。下面只是一个玩具的例子,我不确定它是否在逻辑上正确(欢迎提出建议!)。 Y对应于我试图预测的估计总数(1:< $ 20mi,2:> 20mi)。我也离散了电影显示的屏幕数量。多项式朴素贝叶斯与scikit学习连续和分类数据

问题是,这是一个很好的方法来解决这个问题吗?或者,将数字分配给所有类别会更好吗?另外,在DictVectorizer对象中嵌入标签(例如“movie:Pie of Life”)是否正确?

def get_data(): 

    measurements = [ \ 
    {'movie': 'Life of Pi', 'screens': "some", 'distributor': "fox"},\ 
    {'movie': 'The Croods', 'screens': "some", 'distributor': "fox"},\ 
    {'movie': 'San Fransisco', 'screens': "few", 'distributor': "TriStar"},\ 
    ] 
    vec = DictVectorizer() 
    arr = vec.fit_transform(measurements).toarray() 

    return arr 

def predict(X): 

    Y = np.array([1, 1, 2]) 
    clf = MultinomialNB() 
    clf.fit(X, Y) 
    print(clf.predict(X[2])) 

if __name__ == "__main__": 
    vector = get_data() 
    predict(vector) 
+1

为什么'toarray'? 'MultinomialNB'可以处理稀疏矩阵。实际上,这些速度会更快。 –

回答

2

原则上这是正确的,我想。

也许作为票房销售的回归来形成问题会更自然。

movie功能没用。 DictVectorizer将每个可能的值编码为一个不同的功能。由于每部电影都会有不同的标题,因此它们都具有完全独立的功能,并且不存在普遍性。

将屏幕编码为数字也可能更好,而不是作为不同范围的单热编码。不用说,你需要更好的功能,你在这里得到任何合理的预测。

+0

谢谢安德烈亚斯!如果我用回归方法尝试它,我应该如何处理类似“分销商”这样的分类属性(这是问题的一部分)? – ksiomelo

相关问题