使用岭回归线性模型和词向量对评论数据进行分类。
本文数据来自 kaggle 比赛:https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews
导入第三方库
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from sklearn import feature_extraction, linear_model, model_selection, preprocessing
- numpy 线性代数处理库
- pandas 文件处理,io 等
- sklearn 机器学习框架
读取数据集
train_df = pd.read_csv("/Volumes/Disk/Dataset/sentiment-analysis-on-movie-reviews/train.tsv", sep="\t", header=0)
test_df = pd.read_csv("/Volumes/Disk/Dataset/sentiment-analysis-on-movie-reviews/test.tsv", sep="\t", header=0)
读取 tsv 文件时,分隔符应选择 \t,并取消表头的读取。
将文本向量化
首先我们读取一组停止词文件,用于过滤文本中没有实际意义的单词:
## read stopwords file
stopwords = []
with open("/Volumes/Disk/Dataset/stopwords/stopwords_en.txt", "r") as f:
for line in f:
stopwords.append(line.strip())
使用 sklearn 框架中的 CountVectorizer 对文本进行向量化处理。
## tokenization
cv = feature_extraction.text.CountVectorizer(stop_words=stopwords)
train_vectors = cv.fit_transform(train_df["Phrase"])
test_vectors = cv.transform(test_df["Phrase"])
使用岭回归进行预测
## 使用岭回归进行预测
clf = linear_model.RidgeClassifier()
scores = model_selection.cross_val_score(clf, train_vectors, train_df["Sentiment"], cv=3, scoring="accuracy")
scores
得到一组数据
array([0.5683391 , 0.56016917, 0.56091888])
总体的来说准确率比较低,估计还是模型在向量空间中的分布比较复杂,使用简单的线性模型很难完整包含全部信息。