首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问题分类标签文本,错误的预测?

问题分类标签文本,错误的预测?
EN

Stack Overflow用户
提问于 2014-12-30 23:13:59
回答 1查看 196关注 0票数 2

我正在使用scikit-learn提供的不同分类器和向量器,因此假设我有以下内容:

代码语言:javascript
复制
training = [["this was a good movie, 'POS'"],
      ["this was a bad movie, 'NEG'"],
      ["i went to the movies, 'NEU'"], 
      ["this movie was very exiting it was great, 'POS'"], 
      ["this is a boring film, 'NEG'"]
        ,........................,
          [" N-sentence, 'LABEL'"]]

#Where each element of the list is another list that have documents, then.

splitted = [#remove the tags from training]

from sklearn.feature_extraction.text import HashingVectorizer
X = HashingVectorizer(
    tokenizer=lambda  doc: doc, lowercase=False).fit_transform(splitted)

print X.toarray()

然后我有一个向量表示:

代码语言:javascript
复制
[[ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]]

问题是,我不知道我是否对语料库进行了矢量化,然后:

代码语言:javascript
复制
#This is the test corpus:
test = ["I don't like this movie it sucks it doesn't liked me"]

#I vectorize the corpus with hashing vectorizer
Y = HashingVectorizer(
    tokenizer=lambda  doc: doc, lowercase=False).fit_transform(test)

然后我打印Y

代码语言:javascript
复制
[[ 0.  0.  0. ...,  0.  0.  0.]]

然后

代码语言:javascript
复制
y = [x[-1]for x in training]

#import SVM and classify
from sklearn.svm import SVC
svm = SVC()
svm.fit(X, y)
result = svm.predict(X)
print "\nThe opinion is:\n",result

问题是,我得到了以下NEG,这实际上是正确的预测:

代码语言:javascript
复制
["this was a good movie, 'POS'"]

我想我不是在向量化正确的trainingy目标是错误的,有人能帮助我理解正在发生的事情,以及我应该如何向量化training才能得到正确的预测吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-31 15:08:08

我将把培训数据按预期格式交给你:

代码语言:javascript
复制
training = ["this was a good movie",
            "this was a bad movie",
            "i went to the movies",
            "this movie was very exiting it was great", 
            "this is a boring film"]

labels = ['POS', 'NEG', 'NEU', 'POS', 'NEG']

特征提取

代码语言:javascript
复制
>>> from sklearn.feature_extraction.text import HashingVectorizer
>>> vect = HashingVectorizer(n_features=5, stop_words='english', non_negative=True)
>>> X_train = vect.fit_transform(training)
>>> X_train.toarray()
[[ 0.          0.70710678  0.          0.          0.70710678]
 [ 0.70710678  0.70710678  0.          0.          0.        ]
 [ 0.          0.          0.          0.          0.        ]
 [ 0.          0.89442719  0.          0.4472136   0.        ]
 [ 1.          0.          0.          0.          0.        ]]

对于更大的语料库,您应该增加n_features以避免冲突,我使用了5,这样就可以可视化结果矩阵。还请注意,我使用了stop_words='english',我认为在很少的例子中,重要的是去掉秒词,否则您可能会混淆分类器。

模型训练

代码语言:javascript
复制
from sklearn.svm import SVC

model = SVC()
model.fit(X_train, labels)

预测

代码语言:javascript
复制
>>> test = ["I don't like this movie it sucks it doesn't liked me"]
>>> X_pred = vect.transform(test)
>>> model.predict(X_pred)
['NEG']

>>> test = ["I think it was a good movie"]
>>> X_pred = vect.transform(test)
>>> model.predict(X_pred)
['POS']

编辑:请注意,第一个测试示例的正确分类只是一个幸运的巧合,因为我没有看到从培训集中学到的任何单词都是负面的。在第二个例子中,单词good可能触发了正分类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27713944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档