一、题目分析
数据
数据包含2个csv文件:
train_set.csv:此数据集用于训练模型,每一行对应一篇文章。
文章分别在“字”和“词”的级别上做了脱敏处理。共有四列:
第一列是文章的索引(id);
第二列是文章正文在“字”级别上的表示,即字符相隔正文(article);
第三列是在“词”级别上的表示,即词语相隔正文(word_seg);
第四列是这篇文章的标注(class)。
注:每一个数字对应一个“字”,或“词”,或“标点符号”。“字”的编号与“词”的编号是独立的!
test_set.csv:此数据用于测试。数据格式同train_set.csv,但不包含class。 注:test_set与train_test中文章id的编号是独立的。 友情提示:请不要尝试用excel打开这些文件!由于一篇文章太长,excel可能无法完整地读入某一行!
train_set.csv中数据如下:
test_set.csv中数据如下:
题目的要求大致上已经明确,就是根据两个参数把id归类到不同的类中。
二、问题分析
问题的解决方案大致如下:
三、代码
1 print("开始........") 2 3 import pandas as pd 4 from sklearn.linear_model import LogisticRegression 5 from sklearn.feature_extraction.text import CountVectorizer 6 7 df_train = pd.read_csv('./train_set.csv') 8 df_test = pd.read_csv('./test_set.csv') 9 df_train.drop(columns=['article','id'],inplace=True) 10 df_test.drop(columns=['article'],inplace=True) 11 12 vectorizer=CountVectorizer(ngram_range=(1,2),min_df=3,max_df=0.9,max_features=100000) 13 vectorizer.fit(df_train['word_seg']) 14 x_train=vectorizer.transform(df_train['word_seg']) 15 x_test=vectorizer.transform(df_test['word_seg']) 16 y_train=df_train['class']-1 17 18 lg=LogisticRegression(C=4,dual=True) 19 lg.fit(x_train,y_train) 20 21 y_test=lg.predict(x_test) 22 23 df_test['class']=y_test.tolist() 24 df_test['class']=df_test['class']+1 25 df_result=df_test.loc[:,['id','class']] 26 df_result.to_csv('./result.csv',index=False) 27 28 print("完成.........")
四、回顾总结
提高模型性能的方法大致上有以下几种:
1、数据预处理
2、特征工程
3、机器学习算法
4、模型集成
5、数据增强