python - 實現文本分類[簡單使用第三方庫完成]


第三方庫

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......")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM