Machine learning 朴素贝叶斯看不见的功能处理scikit学习

Machine learning 朴素贝叶斯看不见的功能处理scikit学习,machine-learning,scikit-learn,text-classification,naivebayes,Machine Learning,Scikit Learn,Text Classification,Naivebayes,我正在使用scikit learn中的NaiveBayes(多项式NB)对小文本(推文)进行分类。 我的列车数据有1000个特征,我的测试数据有1200个特征。 假设500个特性对于列车和测试数据都是通用的 我想知道为什么scikit learn中的多项式NB不能处理看不见的特征,并给我一个错误: Traceback (most recent call last): File "/Users/osopova/Documents/00_KSU_Masters/01_2016_Spring/Tw

我正在使用scikit learn中的NaiveBayes(多项式NB)对小文本(推文)进行分类。 我的列车数据有1000个特征,我的测试数据有1200个特征。 假设500个特性对于列车和测试数据都是通用的

我想知道为什么scikit learn中的多项式NB不能处理看不见的特征,并给我一个错误:

Traceback (most recent call last):
  File "/Users/osopova/Documents/00_KSU_Masters/01_2016_Spring/Twitter_project/mda_project_1/step_4.py", line 60, in <module>
    predict_Y = classifiers[i].predict(test_X)
  File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 65, in predict
    jll = self._joint_log_likelihood(X)
  File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 672, in _joint_log_likelihood
    return (safe_sparse_dot(X, self.feature_log_prob_.T)
  File "/Library/Python/2.7/site-packages/sklearn/utils/extmath.py", line 184, in safe_sparse_dot
    return fast_dot(a, b)
ValueError: matrices are not aligned
回溯(最近一次呼叫最后一次):
文件“/Users/osopova/Documents/00_KSU_Masters/01_2016_Spring/Twitter_project/mda_project_1/step_4.py”,第60行,in
predict_Y=分类器[i]。predict(test_X)
文件“/Library/Python/2.7/site packages/sklearn/naive_bayes.py”,第65行,在predict中
jll=自联合对数似然(X)
文件“/Library/Python/2.7/site packages/sklearn/naive_bayes.py”,第672行,在日志中
返回(安全稀疏点(X,自特性,日志,问题)
文件“/Library/Python/2.7/site packages/sklearn/utils/extmath.py”,第184行,安全点
快速返回点(a,b)
ValueError:矩阵未对齐

它不会处理看不见的功能,因为您没有传递任何引用命名功能。为什么在一种情况下有1200个功能,在另一种情况下有1000个功能?可能是因为测试设置中有一些对象在培训中不存在-但是,朴素的贝叶斯应该能够找出这1200个对象中哪些缺失了在1000中?在这个实现中(只有当您将数组作为输入时才可能),您的职责是删除所有与训练集中的列不对应的列,如果是相反的方式,则添加零列(在有效点),最重要的是,确保一个集中的“ith”列是相同的(捕获与“ith”相同的单词/对象的出现)第二列。因此,在您的情况下,实际可以使用的列只有500列,而NaiveBayes没有如何找到这些列的信息。在测试场景中,您必须提供在train中使用的1000个相同的特性,因此在您的情况下,这意味着删除在train中未看到的700列,并添加(在有效位置!)500列零


特别是,scikit learn为您提供了大量的数据预处理实用程序,它们可以为您实现这一点(如CountVectorizer等).

它不会处理看不见的功能,因为您没有传递任何引用命名功能。为什么一种情况下有1200个功能,另一种情况下有1000个功能?可能是因为测试设置中的对象在培训中不存在-但是,朴素的贝叶斯应该能够找出这1200个功能中缺少哪些1000?在这个实现中(只有当您假设数组为输入时才可能),您的职责是删除所有与训练集中的列不对应的列,如果是相反的方式,则添加零列(在有效点),最重要的是,确保一个集中的“ith”列是相同的(捕获与“ith”相同的单词/对象的出现)第二列。因此,在您的情况下,实际可以使用的列只有500列,而NaiveBayes没有如何找到这些列的信息。在测试场景中,您必须提供在train中使用的1000个相同的特性,因此在您的情况下,这意味着删除在train中未看到的700列,并添加(在有效位置!)500列零

特别是,scikit learn为您提供了大量的数据预处理实用程序,它们可以为您实现这一点(如CountVectorizer等)