创建模型经过长文本数据正文(article),预测文本对应的类别(class)python
注 : 报名参赛或加入队伍后,可获取数据下载权限。ios
数据包含 2 个 csv 文件:算法
train_set.csv:此数据集用于训练模型,每一行对应一篇文章。 文章分别在“字”和“词”的级别上作了脱敏处理。 共有四列:机器学习
注:每个数字对应一个“字”,或“词”,或“标点符号”。“字”的编号与“词”的编号是独立的!函数
test_set.csv:此数据用于测试。 数据格式同 train_set.csv
,但不包含 class
。性能
注:test_set与train_test中文章id的编号是独立的。 友情提示:请不要尝试用excel打开这些文件!因为一篇文章太长,excel可能没法完整地读入某一行!学习
binary-classification测试
采用各个品类F1指标的算术平均值,它是 Precision
和 Recall
的调和平均数。spa
其中,Pi
是表示第 i
个种类对应的 Precision
, Ri
是表示第 i
个种类对应 Recall
。 AB
榜的划分方式和比例: 【1】评分采用AB榜形式,提交文件必须包含测试集中全部用户的预测值。排行榜显示A榜成绩,竞赛结束后2小时切换成B榜单。B榜成绩以选定的两次提交或者默认的最后两次提交的最高分为准,最终比赛成绩以B榜单为准。 【2】此题目的AB榜是随机划分,A榜数据占50%,B榜使用全量测试集,即占100%。.net
这里提早假设: 已经有了一个学习的机器学习模型 f
,供你使用
注:函数输出的类别是咱们事先人为约定好,好比我让数字4表明政治类, 数字3表明科技类,...
求一个数学函数(又可称为机器学习模型):
使模型预测能力更强
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" Created on Thu Jun 20 21:17:51 2019 @author: iosdevlog """
""" 导入所须要的软件包 """
import pandas as pd
from sklearn.linear_model import LogisticRegression #导入线性回归库
from sklearn.feature_extraction.text import CountVectorizer #导入特征提取库
print("开始")
""" @ 代码功能简介: 从硬盘上读取已下载好的数据,并进行简单处理 @ 知识点定位:数据预处理 """
#读取文件,而且删除无关东西
df_train = pd.read_csv("./train_set.csv")
df_test = pd.read_csv("./test_set.csv")
df_train.drop(columns =["article", "id"], inplace = True ) # 为何要删除这两个列? 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"]) # 为何要训练这一列内容? 要先学习整个数据集的词的 DF(文档词频)
x_train = vectorizer.transform(df_train["word_seg"]) #特征转为特征向量
x_test = vectorizer.transform(df_test["word_seg"])
y_train = df_train["class"] - 1 # 这里为啥要给全部的类别都减去 1? 减 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 # 为何又要给全部类别分别加 1
df_result = df_test.loc[:, ["id", "class"]] # 从测试集里面拿到 ["id", "class"] 列的内容
df_result.to_csv("./result.csv", index = False) #测试结果转为提交的CSV格式
print("结束")
复制代码
“达观杯”文本智能处理挑战赛_赛体与数据 Kaggle: Starter:“达观杯”文本分类挑战赛新手入门代码 深度之眼