任务描述
本关任务:基于情感分类标签和训练数据,计算逆向词频构造特征数据集,构建支持向量机模型,并对测试数据进行情感分类预测,返回测试集的情感分类标签值。
相关知识
为了完成本关任务,你需要掌握:1.逆向词频的计算;2.支持向量机模型的实现机理;3.对测试数据进行分类预测
支持向量机模型
支持向量机(Support Vector Machine, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。SVM在很多领域取得成功,比如文本分类,图像分类,生物序列分析和生物数据挖掘等等领域有很多的应用。 支持向量机算法被认为是文本分类中效果较为优秀的一种方法,它是一种建立在统计学习理论基础上的机器学习方法。因此本小节采用支持向量机对本次微博文本情感分析进行分类。前面已经把数据预处理完毕,运用sklearn包的SVC()函数实现支持向量机分类。
本节采用的核函数(kernel)为线性分类器,调用sklearn库的classification_report()方法得分类效果,采用最简单的线性分类器,其他均为默认, 示例如下:
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
count_vect = CountVectorizer() #对CountVectorizer创建对象count_vect
x_train_counts = count_vect.fit_transform(X) #用来对数据进行处理,表示成n-gram的形式
tfidf_transformer = TfidfTransformer()#对TfidfTransformer创建对象tfidf_transformer
X = tfidf_transformer.fit_transform(x_train_counts)
x_train, x_test, y_train, y_test = train_test_split (X, Y, random_state = 0)
from sklearn.svm import LinearSVC
clf = LinearSVC()
clf.fit(x_train, y_train)
rv=clf.score(x_train, y_train)
支持向量机模型
test_y=[]#测试数据的情感分类预测
for i in range(len(testX_txt)):
text1=testX_txt[i]
pre=clf.predict(count_vect.transform([text1]))
test_y.append(pre[0])
编程要求
根据提示,在右侧编辑器补充代码,用情感分类标签和训练数构建支持向量机模型,对测试数据进行情感分类预测。
测试说明
平台会对你编写的代码进行测试:
开始你的任务吧,祝你成功!
# -*- coding: utf-8 -*-
#1.基于上一关的结果trainX_txt,Y,testX_txt,利用机器学习包的内置函数,
# 计算逆向词频,并构造特征集,对训练数据集按80%训练、20%测试随机划分,
# 构建支持向量机模型,返回模型准确率rv和预测准确率rs。
#2.最后,利用训练好的模型,对testX_txt进行预测,返回测试集的情感分类标签值。
def return_values():
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
import pandas as pd
import step10_2
r=step10_2.return_values()
X, Y, testX_txt = r # 确保 X, Y, testX_txt 被正确赋值
count_vect = CountVectorizer() #对CountVectorizer创建对象count_vect
x_train_counts = count_vect.fit_transform(X) #用来对数据进行处理,表示成n-gram的形式
tfidf_transformer = TfidfTransformer()#对TfidfTransformer创建对象tfidf_transformer
X = tfidf_transformer.fit_transform(x_train_counts)
x_train, x_test, y_train, y_test = train_test_split (X, Y, random_state = 0)
from sklearn.svm import LinearSVC
clf_svm = LinearSVC()
clf_svm.fit(x_train, y_train)
rv=clf_svm.score(x_train, y_train)
rs=clf_svm.score(x_test,y_test)
test_y=[]#测试数据的情感分类预测
for i in range(len(testX_txt)):
text1=testX_txt[i]
pre=clf_svm.predict(count_vect.transform([text1]))
test_y.append(pre[0])
return (rv,rs,test_y)