使用逻辑回归对文本进行分类 To classify text content by logistic regression[达观杯1]
最近在参加达观杯的文本分类大赛,使用了几种方法对文本进行分类,在这里做一个记录 :)
比赛大概介绍
数据
“train_set.csv:此数据集用于训练模型,每一行对应一篇文章。文章分别在“字”和“词”的级别上做了脱敏处理。共有四列:
第一列是文章的索引(id),第二列是文章正文在“字”级别上的表示,即字符相隔正文(article);第三列是在“词”级别上的表示,即词语相隔正文(word_seg);第四列是这篇文章的标注(class)。
注:每一个数字对应一个“字”,或“词”,或“标点符号”。“字”的编号与“词”的编号是独立的”
“test_set.csv” 里是只有id, article 和 word_seg
参赛者的工作就是建立一个模型,根据article或者word_seg 去预测文字的Class
第一次尝试使用sklearn里的逻辑回归进行预测,代码如下:
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer
print('start')
df_train = pd.read_csv('./train_set.csv')
df_test = pd.read_csv('./test_set.csv')
df_train.drop(columns = ['article','id'], inplace = True)
df_test.drop(columns=['article'],inplace= True)
vectorier = CountVectorizer(ngram_range=(1,2),min_df=3,max_df=0.9,max_features=100000)
vectorier.fit(df_train['word_seg'])
x_train = vectorier.transform(df_train['word_seg'])
x_test = vectorier.transform(df_test['word_seg'])
y_train = df_train['class']-1
lg = LogisticRegression(C = 4, dual=True)
lg.fit(x_train,y_train)
y_test = lg.predict(x_test)
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('end')
```
将预测结果提交到网站,正确率大概是0.73
接下来考虑将vectorier 从CountVectorizer 改成tfidf
代码如下(其实只改了一行哈哈)
```
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
print('start')
df_train = pd.read_csv('./train_set.csv')
df_test = pd.read_csv('./test_set.csv')
df_train.drop(columns = ['article','id'], inplace = True)
df_test.drop(columns=['article'],inplace= True)
#vctorizer = CountVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9, max_features=100000)
print('inprocess1')
vctorizer = TfidfVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9, max_features=100000)
vctorizer.fit(df_train['word_seg'])
x_train = vctorizer.transform(df_train['word_seg'])
x_test = vctorizer.transform(df_test['word_seg'])
y_train = df_train['class']-1
print('inprocess2')
lg = LogisticRegression(C = 4, dual=True)
lg.fit(x_train,y_train)
y_test = lg.predict(x_test)
print('inprocess3')
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('end')
```
提交代码以后,正确率从0.73升为了0.76,还是不错的,目前的排名在100多,排名第一的大哥是0.8几。感兴趣的朋友也可以去试一下:)
您好,歡迎加入新手村。
Posted using Partiko Android
欢迎~~居然是理科女生
谢谢!
你好,新人
你好,大佬
我不是大佬,我只是比你旧一点的新人。你要去新手村吗?
还有新手村?!求指路!
你有微信吗?你可以先加我微信