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

时间:2013-04-01 06:23:10

标签: numpy machine-learning artificial-intelligence scipy scikit-learn

我是scikit-learn的新手,我正在尝试创建一个Multiomial Bayes模型来预测电影票房。下面只是一个玩具示例,我不确定它是否在逻辑上是正确的(欢迎提出建议!)。 Y'对应于我想要预测的估计总值(1:< $ 20mi,2:> $ 20mi)。我还将电影显示的屏幕数量离散化。

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

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 个答案:

答案 0 :(得分:2)

我认为原则上这是正确的。

将问题表述为对票房销售的回归可能更为自然。

movie功能无用。 DictVectorizer将每个可能的值编码为不同的特征。由于每部电影都有不同的标题,因此它们都具有完全独立的功能,并且不存在泛化。

将屏幕编码为数字也可能更好,而不是作为不同范围的单热编码。

毋庸置疑,你需要更好的功能,你在这里得到任何合理的预测。