达观杯文本分类竞赛 0

#达观杯文本分类比赛#

这部分内容只是先简单试水,起到的大概是baseline的作用。后续再思考从各方面进行改进。

特征工程

使用sklearn库中的CountVectorizer,将原始数据中的文本信息转化成向量。
原始数据中有‘article’和‘Word’两个特征,先选择‘Word’,因为‘Word’是显然的有用,而‘article’的作用暂时未知。

逻辑回归

1.先使用logistics regression模型来进行文本分类,观察其准确率,试试水,然后再思考改善模型和其他等提升模型效果的工作。

##程序分析##

print('start..................')

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

df_train = pd.read_csv('train_set.csv')
df_test = pd.read_csv('test_set.csv')

#如果内存不够可以尝试分批读进来,以下程序只是做个示范,先读1000行数据进来
'''
df_train = pd.read_csv('train_set.csv', nrows = 1000)
df_test = pd.read_csv('test_set.csv', nrows = 1000)
'''
df_train.drop(columns = ['article', 'id'], inplace = True)
df_test.drop(columns = ['article'], inplace = True)


删除‘article’和‘ID’是因为我们暂时不用这两个特征来构建模型,而‘ID’是没什么用,直接去掉。

vectorizer = CountVectorizer(ngram_range = (1,2), min_df = 3, max_df = 0.9, max_features = 100000)
#vectorizer.fit(df_train['word_seg'])
x_train = vectorizer.fit_transform(df_train['word_seg'])
x_test = vectorizer.fit_transform(df_test['word_seg'])
y_train = df_train['class'] - 1    #之所以class-1是为了让label从0开始,好预测

将文本信息转化成向量,其中的‘fit_transform’就等同于先’fit’方法,然后再‘transform’方法。

lg = LogisticRegression(C=4, dual = True)
lg.fit(x_train, y_train)

y_test = lg.predict(x_test)

调用LogisticRegression回归模型,用train set训练数据,并对test set数据进行预测。

注意模型中间的参数,C是用来确定模型对分类错误样本的敏感程度的,越小越不允许分错;dual表示采用对偶方法求解

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

print('finished...............')

将预测结果保存到本地。

##总结##

做的过程中发现,直接采用逻辑回归,准确率大概能达到70%,还算不错。但是没有使用‘article这一特征信息,也并没有深入的做特生工程,另外,模型也并没有改进,并没有使用集成学习的方法等等,后续改进。

匆忙写下这些,若有错误欢迎指正。

猜你喜欢

转载自blog.csdn.net/linichengpps/article/details/82947598