1 案例描述
1.1 描述
赛题以新闻数据为赛题数据,数据集报名后可见并可下载。赛题数据为新闻文本,并按照字符级别进行匿名处理。整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐的文本数据。
1.2 评测标准
评价标准为类别f1_score的均值,选手提交结果与实际测试集的类别进行对比,结果越大越好。
计算公式:
2 代码详情
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split # TfidfVectorizer可以把原始文本转化为tf-idf的特征矩阵,从而为后续的文本相似度计算 from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import GridSearchCV from sklearn.metrics import f1_score # F1 score:使用调和平均结合召回率和精度的指标 召回率和精度的可视化: 混淆矩阵 from sklearn.metrics import accuracy_score # sklearn计算准确率和召回率 from xgboost import XGBClassifier from sklearn.linear_model import LogisticRegression from tqdm import tqdm # 可扩展的Python进度条 # 1 导入数据 train = pd.read_csv('./train_set.csv', sep='\t') test = pd.read_csv('./test_a.csv', sep='\t') # 2 提取text文本 train_text = train['text'] test_text = test['text'] all_text = pd.concat([train_text, test_text]) # 3 TF-IDF文本的向量化表示 word_vectorizer = TfidfVectorizer( sublinear_tf=True, strip_accents='unicode', # 在预处理步骤中去除编码规则 analyzer='word', # 定义特征为词 token_pattern=r'\w{1,}', # 正则表达式显示了”token“的构成,仅当analyzer == ‘word’时才被使用。两个或多个字母数字字符的正则表达式(标点符号完全被忽略,始终被视为一个标记分隔符) stop_words='english', ngram_range=(1, 1), # 要提取的n-gram的n-values的下限和上限范围,在min_n <= n <= max_n区间的n的全部值 max_features=10000) word_vectorizer.fit(all_text) # 4 训练文本向量化 train_word_features = word_vectorizer.transform(train_text) # 5 测试样本向量化 test_word_features = word_vectorizer.transform(test_text) # 6 获取标签数据 X_train = train_word_features y_train = train['label'] # 7 训练集合验证集划分 x_train_, x_valid_, y_train_, y_valid_ = train_test_split(X_train, y_train, test_size=0.2) X_test = test_word_features # 8 L1正则化模型训练 clf = LogisticRegression(C=4, n_jobs=16) # C值的目标函数约束条件:s.t.||w||1<C,默认值是0,C值越小,则正则化强度越大。 clf.fit(x_train_, y_train_) # 9 利用验证集预测验证集标签 y_pred = clf.predict(x_valid_) # 10 对预测模型使用训练集结果计算出的决定系数R^2 train_scores = clf.score(x_train_, y_train_) # 拟合优度越大,说明x对y的解释程度越高 print('训练样本模型clf_score:', train_scores) # 11 F1评价函数(验证集真实值和预测值) score = f1_score(y_pred, y_valid_, average='macro') print('训练样本测试样例f1_score:', score) # 12 利用模型预测测试集 # XGB分类