邏輯迴歸模型(Logistic)實戰應用——文本分類

承接之前寫的“機器學習之線性模型”的那篇文章,這裏運用邏輯迴歸模型實現對文本的一個大體分類,目的是進一步熟悉邏輯迴歸的運用和sklearn工具包的使用,理解各參數代表的含義,並沒有特意做數據處理、特徵工程和模型優化方面的考慮來提高準確度。
數據來源於:https://www.dcjingsai.com/common/cmpt/“達觀杯”文本智能處理挑戰賽_賽體與數據.html
也可以通過如下網盤下載:
鏈接:https://pan.baidu.com/s/1P67-jvrI2IhZtsWEQWtwkg
提取碼:5uvx

題目說明

題目的詳細說明可以去賽題官網查看,這裏簡單描述下:
官方賽道給出的數據集包含兩個文件,一個是訓練集(train_set.csv)用來訓練模型,一個是測試集(test_set.csv)用來生成測試結果。訓練集中包含四個字段,分別是:文章索引“id”、文章正文字級別“article”、文章詞級別“word_seg”、文章標註的類別“class”。對於class,測試集是不包含該字段的,這就是我們需要分類的類別,也就是模型的輸出y。
數據集都經過了脫敏處理,也就是說我們打開數據集文件看到的都是一些數字,這些數字其實代表的就是一個字或詞或標點符號。

這裏,只從詞的角度,只分析“word_seg”作爲輸入特徵,“class”作爲分類標記進行訓練。

邏輯迴歸實現多分類

'''
    @Author  :   25506
    @Time    :   2020/4/1 16:37
    @File    :   dc_text_match.py
    @Software:   PyCharm
    @Desc    :   達觀杯文本分類識別訓練賽--Logstic
'''

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer

#讀取數據,並刪除不相關字段
df_train = pd.read_csv('./train_set.csv')  #訓練集
df_test = pd.read_csv('./test_set.csv')   #測試集
df_train.drop(columns=['article', 'id'], inplace=True)
df_test.drop(columns=['article'], inplace=True)  #保留id

"""
    @ngram_range:詞組切分的長度範圍
    @min_df:參數爲int,小於這個值則認爲不是關鍵詞
    @max_df:參數是float,則表示詞出現的次數與語料庫文檔數的最大百分比
    @max_features:默認爲None,可設爲int,對所有關鍵詞的term frequency進行降序排序,只取前max_features個作爲關鍵詞集
"""
#將文本中的詞語轉換爲詞頻矩陣
vectorizer = CountVectorizer(ngram_range=(1,2), min_df=3, max_df=0.9, max_features=100000)
#擬合生成標準化詞頻矩陣
x_train = vectorizer.fit_transform(df_train['word_seg'])
x_test = vectorizer.transform(df_test['word_seg'])
y_train = df_train['class'] - 1 #類別默認是從0開始的,所以這裏需要-1

#構建邏輯迴歸模型
lg = LogisticRegression(C=4, dual=True)
lg.fit(x_train, y_train)

#預測
y_test = lg.predict(x_test)

#保存結果
df_test['class'] = y_test.tolist() #轉化爲矩陣列表形式存儲
df_test['class'] = df_test['class'] + 1 #還原類別+1
df_result = df_test.loc[:, ['id', 'class']] #根據index索引所有行和id,class列
df_result.to_csv('./result.csv', index=False)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章