我正在执行一些文本分析,使用 Pandas 提取数据。
X = pd.read_Csv('../data/training.tsv', sep ='\t', na_values=['?'])
X['json'] = X['json'].apply(json.loads)
extractBody = lambda x: x['body'] if x.has_key('body') and x['body'] is not None else u'empty'
X_all['body'] = X['json'].map(extractBody)
我将其放入 scikit-learn 向量中,分离 tf-idf 加权步骤:
body_counter = CountVectorizer()
body_counts = body_counter.fit_transform(X_all['body'])
body_transform = TfidfTransformer()
body_counts = body_tranform.fit_transform(body_counts)
我想使用 SGDClassifier 从某种意义上预测“垃圾邮件”/“非垃圾邮件”的简单二进制分类。
model - SGDClassifier(n_iter = 5, loss = log)
model.fit(body_counts, labels)
运行时,fit 方法会生成以下 KeyError:
...
return self.index.get_value(self,key)
...
return self._engine.get)value(series, key)
File "index.pyx", line 96, in pandas.index.INdexEngine.get_value (pandas/index.c:2873)
File "index.pyx", line 104, in pandas.index.IndexEngine.get_value (pandas/index.c:2685)
File "index.pyx", line 148, in pandas.index.IndexEngine.get_loc (pandas/index.c:3422)
File "hashtable.pyx", line 382, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6570)
File "hashtable.pyx", line 388, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6511)
KeyError: 0
我不确定这里发生了什么。当我只想交叉验证它(cross_val_score)时,这个模型工作得很好。我可以在 scikit learn 中使用 naive_bayes 或 TruncatedSVD 运行这个数据集。这只发生在我尝试拟合这个模型时,我不知道为什么。
我该如何解决?还是我正在查看 scikit learn 中的错误?
编辑
是的,不幸的是我不得不将我的代码重写到这篇文章中而不是复制,所以可能有一些错误。我在没有wifi连接的笔记本电脑上编码。
X.shape = 7396, 105273
labels.len() = 7395
labels type = 'pandas.core.series.Series'
...我将标签转换为一个 numpy 数组,它通过了!
cross_val_score 会按原样接受标签,但 model.fit 不会,这仍然让我感到困惑。
谢谢!