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("完成...............")