首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在训练支持向量机模型后,如何加载未标注的数据进行情感分类?

在训练支持向量机模型后,如何加载未标注的数据进行情感分类?
EN

Stack Overflow用户
提问于 2019-11-18 08:19:08
回答 3查看 933关注 0票数 1

我尝试做情感分类,我使用了学习支持向量机模型。利用标记数据对模型进行训练,准确率达89%。现在我想用这个模型来预测未标记数据的情绪。我怎么能这么做?而在对未标注数据进行分类后,如何判断它是正的还是负的呢?

我用了python 3.7。下面是密码。

代码语言:javascript
复制
import random
import pandas as pd
data = pd.read_csv("label data for testing .csv", header=0)
sentiment_data = list(zip(data['Articles'], data['Sentiment']))
random.shuffle(sentiment_data)

train_x, train_y = zip(*sentiment_data[:350])
test_x, test_y = zip(*sentiment_data[350:])

from nltk import word_tokenize
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC
from sklearn import metrics


clf = Pipeline([
    ('vectorizer', CountVectorizer(analyzer="word",
                                   tokenizer=word_tokenize,
                                   preprocessor=lambda text: text.replace("<br />", " "),
                                   max_features=None)),
    ('classifier', LinearSVC())
])

clf.fit(train_x, train_y)
pred_y = clf.predict(test_x)
print("Accuracy : ", metrics.accuracy_score(test_y, pred_y))
print("Precision : ", metrics.precision_score(test_y, pred_y))
print("Recall : ", metrics.recall_score(test_y, pred_y))

当我运行这段代码时,我得到了输出:

ConvergenceWarning: Lib线性方程未能收敛,增加迭代次数。“迭代次数”,ConvergenceWarning)准确性: 0.8977272727272727精度: 0.8604651162790697召回: 0.925

ConvergenceWarning的含义是什么?

提前谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-18 11:32:44

ConvergenceWarning的含义是什么?

正如帕维尔已经提到的,ConvergenceWArning的意思是max_iter被击中了,您可以在这里压制警告:如何使用sklearn禁用ConvergenceWarning?

现在我想用这个模型来预测未标记数据的情绪。我怎么能这么做?

您将使用命令:pred_y = clf.predict(test_x),唯一需要调整的是:pred_y (这是您的自由选择)和test_x,这应该是您的新的未见数据,它必须具有与数据test_xtrain_x相同数量的特性。

就你而言,正如你所做的那样:

代码语言:javascript
复制
sentiment_data = list(zip(data['Articles'], data['Sentiment']))

您正在形成一个元组:看看这个,然后对其进行洗牌,并对前350行进行解拉链

代码语言:javascript
复制
train_x, train_y = zip(*sentiment_data[:350])

这里您的train_x是列:data['Articles'],所以如果您有新的数据,那么您所要做的就是:

代码语言:javascript
复制
new_ data = pd.read_csv("new_data.csv", header=0)
new_y = clf.predict(new_data['Articles'])

如何判断它是积极的还是消极的?

然后您可以运行:pred_y,并且在结果中会有1或0。通常0应该是否定的,但它取决于您的数据集向上。

票数 1
EN

Stack Overflow用户

发布于 2019-11-18 10:23:47

看看这个关于模型持久性的站点。然后加载它并调用predict方法。模型将返回预测的标签。如果使用任何编码器(LabelEncoderOneHotEncoder),则需要分别转储和加载它。

如果我是你,我宁愿采用完全数据驱动的方法,并使用一些预先训练过的嵌入式程序。它也适用于数十种语言,“开箱即用”是相当整洁的。

有来自facebook的雷射。还有皮皮包,虽然是非官方的。效果很好。现在有很多预先训练过的模型,所以要达到近精辟的分数应该没那么难。

票数 1
EN

Stack Overflow用户

发布于 2019-11-18 09:11:03

现在我想用这个模型来预测未标记数据的情绪。我怎么能这么做?而在对未标注数据进行分类后,如何判断它是正的还是负的呢?

基本上,您聚合未标记数据的方式与生成train_xtest_x的方式相同。可能是n_samples x 1形状的2D矩阵,然后在clf.predict中使用它来获得预测。clf.predict输出最可能的类。在您的例子中,0是负的,1是正的,但是没有数据集很难判断。

ConvergenceWarning的含义是什么?

采用迭代算法对LinearSVC模型进行了优化。有一个参数max_iter (默认情况下为1000)控制最大迭代量。如果在此过程中没有满足停止条件,您将得到ConvergenceWarning。只要您在准确性或其他度量方面具有可接受的性能,它就不会对您造成太大的困扰。

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

https://stackoverflow.com/questions/58910413

复制
相关文章

相似问题

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