Numpy 连续和分类数据的多项式朴素贝叶斯与scikit学习

Numpy 连续和分类数据的多项式朴素贝叶斯与scikit学习,numpy,machine-learning,artificial-intelligence,scipy,scikit-learn,Numpy,Machine Learning,Artificial Intelligence,Scipy,Scikit Learn,我是scikit新手,我正在尝试创建一个多项式贝叶斯模型来预测电影票房。下面只是一个玩具示例,我不确定它在逻辑上是否正确(欢迎建议!)。Y对应于我试图预测的估算总额(1:2000万美元)。我还离散了电影放映的屏幕数量 问题是,这是解决问题的好办法吗?还是将数字分配给所有类别更好?此外,在DictVectorizer对象中嵌入标签(例如“电影:馅饼的生命”)是否正确 def get_data(): measurements = [ \ {'movie': 'Life of Pi'

我是scikit新手,我正在尝试创建一个多项式贝叶斯模型来预测电影票房。下面只是一个玩具示例,我不确定它在逻辑上是否正确(欢迎建议!)。Y对应于我试图预测的估算总额(1:<2000万美元,2:>2000万美元)。我还离散了电影放映的屏幕数量

问题是,这是解决问题的好办法吗?还是将数字分配给所有类别更好?此外,在DictVectorizer对象中嵌入标签(例如“电影:馅饼的生命”)是否正确

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)

我认为原则上这是正确的

也许将这个问题表述为票房的倒退会更自然

电影
功能无效。口述向量器将每个可能的值编码为不同的特征。因为每部电影都有不同的片名,所以它们都有完全独立的功能,不可能有任何概括

最好将屏幕编码为一个数字,而不是不同范围的一个热编码


不用说,为了得到合理的预测,您需要更好的特性。

为什么
toarray
<代码>多项式nb可以很好地处理稀疏矩阵。事实上,这会快得多。谢谢Andreas!如果我尝试使用回归方法,我应该如何处理像“distributor”这样的分类属性(这是问题的一部分)?