1.参赛指导
1.1 背景
这个比赛是文本分类比赛,比传统的短文本(300词)分类难,现在是长文本(3000词)分类。
1.2 监督学习进行分类的基本过程 (假设有一个学习模型f供你使用)
原始数据(一段原始文本)→数据预处理(处理后的文本)→特征工程(Features)→输入(模型f)→输出(类别)
数据预处理:表情、符号会影响后续的处理,所以去掉;
特征工程:生成向量=feature;(是机器学习中最重要的部分,深度学习也是完成这一步。有个说法是:特征决定了机器学习的上限,而机器学习算法只是为了逼近这个上限)
模型的输入输出:都是模型所规定好的特征空间和类别空间。
注:字和词:单个词才能表达一个完整的意思,比如“垃圾”,分开一个字意思,就不能够表达组合的意思(有些情况是可以的)。
1.3 脱敏数据
图1 脱敏数据(每个数字代表一个字、词)
上图有标的数据用于训练,测试集没有数据,提交了才回有成绩。
1.4 如何提高模型的性能
(1)数据预处理:当所给的数据不全,其中可能也有错误的数据;(本源问题)(但可以数据增强,来增加数据来提高效果)
(2)特征工程:技巧性,需要积累经验,比如区分人的话,用人脸特征就比身高特征好太多了; (是决定模型好坏的关键)
(3)机器学习算法:不同的算法适合不同的问题,如这个简单的分类问题,逻辑回归比其他复杂的模型要好;
(4)模型集成
https://www.jianshu.com/p/a565f9512a17
baseline
# -*- coding: utf-8 -*-
"""
@简介:tfidf特征/ SVM模型
@成绩: 0.77
"""
#导入所需要的软件包
import pandas as pd
from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import TfidfVectorizer
print("开始...............")
#====================================================================================================================
# @代码功能简介:从硬盘上读取已下载好的数据,并进行简单处理
# @知识点定位:数据预处理
#====================================================================================================================
df_train = pd.read_csv('./data/train_set.csv') # 数据读取
df_test = pd.read_csv('./data/test_set.csv')
# 观察数据,原始数据包含id、article(原文)列、word_seg(分词列)、class(类别标签)
df_train.drop(columns=['article', 'id'], inplace=True) # drop删除列
df_test.drop(columns=['article'], inplace=True)
#==========================================================
# @代码功能简介:将数据集中的字符文本转换成数字向量,以便计算机能够进行处理(一段文字 ---> 一个向量)
# @知识点定位:特征工程
#==========================================================
vectorizer = TfidfVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9)
'''
ngram_range=(1, 2) : 词组长度为1和2
min_df : 忽略出现频率小于3的词
max_df : 忽略在百分之九十以上的文本中出现过的词
'''
vectorizer.fit(df_train['word_seg']) # 构造tfidf矩阵
x_train = vectorizer.transform(df_train['word_seg']) # 构造训练集的tfidf矩阵
x_test = vectorizer.transform(df_test['word_seg']) # 构造测试的tfidf矩阵
y_train = df_train['class']-1 #训练集的类别标签(减1方便计算)
#==========================================================
# @代码功能简介:训练一个分类器
# @知识点定位:传统监督学习算法之线性逻辑回归模型
#==========================================================
classifier = LinearSVC() # 实例化逻辑回归模型
classifier.fit(x_train, y_train) # 模型训练,传入训练集及其标签
#根据上面训练好的分类器对测试集的每个样本进行预测
y_test = classifier.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('./results/beginner.csv', index=False)
print("完成...............")