达观杯文本分类——基于N-gram和LogisticRegression

8 篇文章 0 订阅

 

  • 任务与数据

建立模型通过长文本数据正文(article),预测文本对应的类别(class)。

数据包含2个csv文件:

train_set.csv:此数据集用于训练模型,每一行对应一篇文章。文章分别在“字”和“词”的级别上做了脱敏处理。共有四列: 第一列是文章的索引(id),第二列是文章正文在“字”级别上的表示,即字符相隔正文(article);第三列是在“词”级别上的表示,即词语相隔正文(word_seg);第四列是这篇文章的标注(class)。 注:每一个数字对应一个“字”,或“词”,或“标点符号”。“字”的编号与“词”的编号是独立的!

test_set.csv:此数据用于测试。数据格式同train_set.csv,但不包含class。 注:test_set与train_test中文章id的编号是独立的。

  • 思路

基于N-gramLogisticRegression的文本分类。

只使用词表示(word_seg),不使用字表示(article)。

语言模型由sklearn包中的CountVectorizer模块并设置参数ngram_range来实现,逻辑回归由sklearn包中的LogisticRegression模块实现。

CountVectorizer模块:

LogisticRegression模块:

  • 实验步骤

1.导入包

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.pipeline import Pipeline

2.读取数据

# 训练集
df_train = pd.read_csv('./new_data/train_set.csv')
# 测试集
df_test = pd.read_csv('./new_data/test_set.csv')

# 训练集样本
X = df_train['word_seg']
# 训练集标签
Y = df_train['class']

3.使用Pipeline拟合训练数据

pipe = Pipeline([('vec', CountVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9, max_features=100000)),
                ('clf', LogisticRegression(C=4, dual=True))])
clf = pipe.fit(X, Y)

由于数据预处理部分可能需要先fit_transform再transform,相对较为繁琐,此时可以通过Pipeline(管道)进行流水线处理。

考虑到词袋模型太简单,而对于1.4GB的训练集来说三元模型计算量又太大,设置ngram_range=(1,2)同时使用词袋模型和二元模型提取特征。

设置min_df=3,max_df=0.9,max_features=100000,用来减少训练时间并防止过拟合。

分类器使用逻辑回归模型。dual代表对偶或者原始方法。dual只适用于正则化相为l2的‘liblinear’的情况,通常样本数大于特征数的情况下,默认为False。这里设置为True。

C为正则化系数λ的倒数,必须为正数,默认为1。和SVM中的C一样,值越小,代表正则化越强。这里设置为4

4.对测试集数据进行预测

X_test = df_test['word_seg']
Y_test = clf.predict(X_test)

df_test['class'] = Y_test.tolist()
df_result = df_test.loc[:, ['id', 'class']]
df_result.to_csv('./result.csv', index=False)

将预测标签与对应的id一起存入result.csv文件中,上传至达观杯网站查看得分。

下一步准备利用CNN/RNN的方法提高分数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值