第三方庫
pandas
sklearn
數據集
來自於達觀杯
訓練:train.txt
測試:test.txt
概述
TF-IDF 模型提取特征值
建立邏輯回歸模型
代碼
# _*_ coding:utf-8 _*_ # 簡單文本分類實現 import time import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.feature_extraction.text import CountVectorizer print("start......") time_start=time.time() # (1)加載數據 - 利用pandas讀取cvs中數據 df_train = pd.read_csv("D:/train.txt") df_test=pd.read_csv("D:/test.txt") # [1.1]數據處理 - 根據個人對算據的分析 # 本次實驗 - 刪除'article','id'列 df_train.drop(columns=['article','id'],inplace=True) df_test.drop(columns=['article'],inplace=True) # (2)特征提取 """ 特征是什么:選取一些“重要元素”標識一個文本 特征選取:抽取關鍵特征值(TF-IDF,LDA..),原因:特征太多,構成的特征向量計算機非常難處理(內存空間,時間) 一個類別如何標識:文本(多個)+特征(多個)=>[二維向量] --- 標識一個類別 """ # TF-IDF 模型 # sklearn 提取文本特征 # [1]TfidfVectorizer # [2]CountVectorizer 文本特征提取方法 - 文本中的詞語轉換為詞頻矩陣 # 詞頻矩陣 - 矩陣元素a[i][j] 表示j詞在第i個文本下的詞頻 # sklearn - CountVectorizer vectorizer=CountVectorizer(ngram_range=(1, 2), min_df=3,max_df=0.9, max_features=100000) vectorizer.fit(df_train['word_seg']) #訓練和測試的詞頻向量格式保持一致 x_train=vectorizer.transform(df_train['word_seg']) x_test=vectorizer.transform(df_test['word_seg']) y_train = df_train['class']-1 # sklearn - TfidfVectorizer # (3)分類模型 - 邏輯回歸模型 # modal :LogisticRegression lg = LogisticRegression(C=4, dual=True,solver='liblinear',multi_class='ovr') lg.fit(x_train, y_train) # (4)預測 y_test = lg.predict(x_test) # (5)結果展示 df_test['class'] = y_test.tolist() df_test['class'] = df_test['class'] + 1 df_result = df_test.loc[:, ['id', 'class']] df_result.to_csv('D:/result.csv', index=False) time_end=time.time() print("running time={}".format(time_end-time_start)) print("end......")