“达观杯”文本智能处理挑战赛代码示例

达观杯介绍:

类似kaggle的数据科学比赛,任何人可以参加

网址:http://www.dcjingsai.com/

可以用支付宝实名注册

项目名称:

“达观杯”文本智能处理挑战赛

安装Python,运行如下代码。可以得到一个分数

项目代码:

'''
作者:公众号:湾区人工智能
场景:达观杯 文本智能竞赛  http://www.pkbigdata.com/common/cmpt/%E2%80%9C%E8%BE%BE%E8%A7%82%E6%9D%AF%E2%80%9D%E6%96%87%E6%9C%AC%E6%99%BA%E8%83%BD%E5%A4%84%E7%90%86%E6%8C%91%E6%88%98%E8%B5%9B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html
时间:#2018-12-01 563610 December Saturday the 48 week, the 335 day SZ

'''

print('start')
import pandas as pd 
from sklearn.linear_model import LogisticRegression #导入线性回归库
from sklearn.feature_extraction.text import CountVectorizer #导入特征提取库

#读取文件,并且删除无关东西
df_train = pd.read_csv('/Users/apple/Documents/ST/python/competition/DataCastel/text_intelligence/new_data/train_set.csv')
df_test = pd.read_csv('/Users/apple/Documents/ST/python/competition/DataCastel/text_intelligence/new_data/test_set.csv')
df_train.drop(columns =['article', 'id'], inplace = True ) #问题1: 为什么要删除这两个列,id列没有意义,不需要用article,直接删除
df_test.drop(columns =['article'], inplace = True ) 




#获取特征向量
vectorizer = CountVectorizer(ngram_range = (1,2), min_df = 3, max_df = 0.9, max_features = 100000) #提取特征
vectorizer.fit(df_train['word_seg']) #问题2:为啥要训练这一列内容,要先学习整个数据集的词的DF(文档词频)
x_train = vectorizer.transform(df_train['word_seg']) #特征转为特征向量
x_test = vectorizer.transform(df_test['word_seg'])
y_train = df_train['class'] - 1  #问题3:这里为啥要给所有的类别都减去1,减一是代码习惯问题,让class从0计数

lg = LogisticRegression(C = 4, dual = True) #逻辑回归初始化
lg.fit(x_train, y_train) #进行训练,模型保存在lg里面

y_test = lg.predict(x_test) #用模型进行测试

df_test['class'] = y_test.tolist() #测试结果转为列表,并且放入测试文档的类别里面。问题5:测试文档没有类别这个列。这行代码会自动给测试文档添加一个类别列。
df_test['class'] = df_test['class'] + 1  #问题4:为啥又要给所有类别分别加1
df_result = df_test.loc[:, ['id', 'class']]  #从测试集里面拿到'id', 'class']]列的内容
df_result.to_csv('/Users/apple/Documents/ST/python/competition/DataCastel/text_intelligence/new_data/result.csv', index = False) #测试结果转为提交的CSV格式

print('end')





'''
train_set.csv 1.5G, 普通电脑打开很吃力,随意阅读也吃力,谨慎打开;
第一行有:ID,article, Word_seg, class;
id:文章数量编号102277个文本; article:文章内容,是一些数字; Word_seg:也是一些数字; class:文本对应的类别从1到20

test_set.csv 1.38Gb,
第一行有:ID,article, Word_sequence,内容和训练集一样,只是没有了类别标签

result.csv 865 KB, 
第一行有ID, class;也就是预测每一个文档的类别

提交说明

1) 以csv格式提交,编码为UTF-8,第一行为表头; 
2) 内含两列,一列为id,另一列为class; 
3) id对应测试集中样本的id,class为参赛者的模型预测的文本标签。


y_train = df_train['class'] - 1 内容:
  import imp
0         13
1          2
2         11
3         12
4         11
5         12
102274    11
102275     3
102276    10
Name: class, Length: 102277, dtype: int64
[Finished in 25.6s]


y_train = df_train['class']内容:
  import imp
0         14
1          3
2         12
102274    12
102275     4
102276    11
Name: class, Length: 102277, dtype: int64
[Finished in 24.3s]

区别就是给每个类的类型都减去1;
'''

'''
得分:0.73

拿高分的方法:
数据预处理:这里的数据比较完整,不用担心

特征工程
这里技巧很足,需要不断的积累

机器学习算法
不同算法都有对应的任务类型。
lightboard微软开发的工具,适合大部分的情况,属于西瓜书第八章的内容。

数据增强:
给了1万条数据,变成10万条数据。



输出内容:
start
/usr/local/lib/python3.7/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py:47: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp
/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.
  FutureWarning)
/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:459: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.
  "this warning.", FutureWarning)
/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  "the number of iterations.", ConvergenceWarning)
end
[Finished in 1315.7s]

'''

猜你喜欢

转载自blog.csdn.net/BTUJACK/article/details/84767676