Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我应该如何使用scikit learn将以下列表矢量化?_Python_Machine Learning_Nlp_Scikit Learn - Fatal编程技术网

Python 我应该如何使用scikit learn将以下列表矢量化?

Python 我应该如何使用scikit learn将以下列表矢量化?,python,machine-learning,nlp,scikit-learn,Python,Machine Learning,Nlp,Scikit Learn,我想用scikit矢量化学习一个有列表的列表。我走到一条有培训教材的道路上,我阅读了这些教材,然后我得到了如下内容: corpus = [["this is spam, 'SPAM'"],["this is ham, 'HAM'"],["this is nothing, 'NOTHING'"]] from sklearn.feature_extraction.text import CountVectorizer vect = CountVectorizer(analyzer='word')

我想用scikit矢量化学习一个有列表的列表。我走到一条有培训教材的道路上,我阅读了这些教材,然后我得到了如下内容:

corpus = [["this is spam, 'SPAM'"],["this is ham, 'HAM'"],["this is nothing, 'NOTHING'"]]

from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer(analyzer='word')
vect_representation= vect.fit_transform(corpus)
print vect_representation.toarray()
我得到以下信息:

return lambda x: strip_accents(x.lower())
AttributeError: 'list' object has no attribute 'lower'

还有一个问题是每个文档末尾的标签,我应该如何处理它们以进行正确的分类?

首先,您应该将标签与文本分开。如果要使用CountVectorizer,必须逐个转换文本:

corpus = [["this is spam, 'SPAM'"],["this is ham, 'HAM'"],["this is nothing, 'NOTHING'"]]
from sklearn.feature_extraction.text import CountVectorizer
... split labels from texts
vect = CountVectorizer(analyzer='word')
vect_representation= map(vect.fit_transform,corpus)
...

作为另一个选项,您可以直接与列表一起使用。

对于将来的每个人,这可以解决我的问题:

corpus = [["this is spam, 'SPAM'"],["this is ham, 'HAM'"],["this is nothing, 'NOTHING'"]]

from sklearn.feature_extraction.text import CountVectorizer
bag_of_words = CountVectorizer(tokenizer=lambda doc: doc, lowercase=False).fit_transform(splited_labels_from_corpus)
这是我使用
.toarray()
函数时的输出:

[[0 0 1]
 [1 0 0]
 [0 1 0]]

谢谢大家

那么我应该把标签和文本分开吗?。我在考虑使用一个有监督的aproach(MNB、SVM、LR)和使用
语料库作为训练数据,如果我去掉标签,我如何使用它们来训练分类器?。或者,这将通过scikit提供的教程中的
y
来解决(目标)是,通常y代表scikit中的标签列表。因此,您必须将语料库拆分为X和Y。我拆分了标签,但当我执行以下操作时:''vect_representation.toarray()')我有以下内容:
AttributeError:'list'对象没有属性'toarray
我想可视化文档术语矩阵。每个文档一个向量,如何处理?thanksvect_表示是向量列表。您可以通过toarray()可视化列表中的每个向量。“作为另一个选项,您可以将TfidfVectorizer直接用于列表列表。”,具体如何?对我不起作用。有人能推荐我一种更像蟒蛇的方法吗?。提前感谢各位。您不需要两个
countvectoriers
,为什么您的输入数据总是与标签如此奇怪地混合在一起?对不起,第一个
vect
是一个错误。我没有意识到(我只是复制并粘贴问题的代码),我将编辑答案。我有这种格式,因为我只是在学习如何使用scikit学习我自己的语料库,我假设我有一个这样的语料库,每个列表一个文档。感谢您的反馈,数据总是与标签混合在一起,因为我不知道任何其他方法来标记训练数据。假设我在列表中有培训数据,并且每个列表都是一个文档,那么您建议我使用什么其他方法来标记培训数据?。如何告诉分类算法一个文档属于一个类?通常数据来自.csv文件,其中每行对应一个样本/文档,最后或第一列是标签。使用熊猫很容易做到这一点。如果您手动输入数据,则直接将标签放入
y
列表变量中,如
y=['SPAM','HAM',…]
,长度等于文档数量,即不要将标签与文档混合。然后你的语料库将是
corpus=[“这是垃圾邮件”,“这是火腿”,…]
请阅读你的文章,因为我有类似的问题。我的错误是:语料库不应该是一个列表,它应该是一个字符串列表,就像这样:语料库=[“这是垃圾邮件”,“这是火腿”,…]