使用岭回归线性模型和词向量对评论数据进行分类。

本文数据来自 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])

总体的来说准确率比较低,估计还是模型在向量空间中的分布比较复杂,使用简单的线性模型很难完整包含全部信息。