【问题标题】:Multinomial Naive Bayes with scikit-learn for continuous and categorical data具有 scikit-learn 的多项式朴素贝叶斯,用于连续和分类数据
【发布时间】:2013-03-22 05:51:17
【问题描述】:

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

问题是,这是解决问题的好方法吗?或者将数字分配给所有类别会更好吗?另外,在 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)

【问题讨论】:

  • 为什么是toarrayMultinomialNB 可以很好地处理稀疏矩阵。事实上,这些会快很多。

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


【解决方案1】:

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

也许将问题表述为票房销售的回归会更自然。

movie 功能没用。 DictVectorizer 将每个可能的值编码为不同的特征。由于每部电影都有不同的标题,它们都将具有完全独立的特征,无法一概而论。

将屏幕编码为数字可能会更好,而不是作为不同范围的一次性编码。

不用说,您需要比这里更好的功能来获得任何合理的预测。

【讨论】:

  • 谢谢安德烈亚斯!如果我用回归方法尝试它,我应该如何处理像“分销商”这样的分类属性(这是问题的一部分)?
猜你喜欢
  • 2016-04-12
  • 2013-12-10
  • 2012-12-24
  • 2014-10-09
  • 2018-06-19
  • 2017-06-21
  • 2013-06-24
  • 2015-09-16
  • 2021-02-09
相关资源
最近更新 更多