文字分類的14種演算法(1)

2021-09-25 01:43:31 字數 3774 閱讀 2521

import就是匯入整個包,使用包裡的類或者函式需要把包名也寫上。

from…import則是匯入包裡某個特定的類或者函式,用的時候可以像自定義函式一樣直接用。

import…as就是有時候包的名字太長了,給他取個別名。

import pandas as pd

import time

from sklearn import metrics

from sklearn.preprocessing import labelencoder

from sklearn.feature_extraction.text import countvectorizer

from sklearn.neural_network import mlpclassifier

from sklearn.tree import decisiontreeclassifier

from sklearn.neighbors import kneighborsclassifier

from sklearn.*****_bayes import bernoullinb

from sklearn.*****_bayes import gaussiannb

from sklearn.*****_bayes import multinomialnb

from sklearn.linear_model import logisticregression

from sklearn.ensemble import randomforestclassifier

from sklearn.ensemble import adaboostclassifier

from sklearn.preprocessing import labelencoder

from sklearn.feature_extraction.text import countvectorizer

from sklearn.feature_extraction.text import tfidfvectorizer

labelencode類的fit_transform函式可以將標籤規格化為自然數,例如有標籤「好」、「壞」、「牛皮」,

就可以把「好」變成1,「壞」變成2,「牛皮」變成0,大概這麼個意思。其中fit_transform由fit和transform兩個過程組成,fit過程類似於學習,學習所有的標籤;transform類似規格化,把不同的標籤轉化為不同的自然數標記,資料標準化方便演算法的標準化處理:

train_data = pd.read_csv('mytrain.csv', lineterminator='\n')

test_data=pd.read_csv('testcsv.csv', lineterminator='\n')

#利用labelencoder對資料標籤進行規格化處理

def encodelabel(data):

listlable=

for lable in data['lable']:

#到這裡都是把lable整合到一起,下面是規格化處理

le = labelencoder()

resultlable=le.fit_transform(listlable)

return resultlable

trainlable=encodelabel(train_data)

testlable=encodelabel(test_data)

由於我的訓練集和測試集特徵和標籤是放在一起的,分別放在review欄位和lable欄位裡,所以要把他們拿出來集合處理一下,資料特徵review的處理放在下面:

#這裡出來是所有review的集合:

def getreview(data):

listreview=

le = labelencoder()

for review in data['review']:

return listreview

trainreview=getreview(train_data)

testreview=getreview(test_data)

countvectorizer類可以對特徵資料進行特徵提取,可以將文字資訊轉化為對應的特徵向量。其中stop_words屬性代表著無效詞:在實際場景中諸如標點和數字往往是不能作為可靠的文字分類依據的,這就屬於無效詞,需要在統計時剔除。wordbag包含了訓練集和測試集的所有特徵,利用cv.fit(wordbag)可以對wordbag的所有分詞(即訓練集和測試集的詞袋)進行學習,之後用 transform方法構建每個樣例的頻數特徵向量,但由於 transform方法構造出的向量以稀疏矩陣的形式儲存,故還要使用toarray進行轉換。

#這裡出來是頻數向量:

stoplist=['.', '?', '!', ':', '-', '+', '/', '"', ',','0','1','2','3','4','5','6','7','8','9','0']

cv=countvectorizer(stop_words=stoplist)

wordbag=trainreview+testreview

cv.fit(wordbag)

test_count = cv.transform(testreview)

testcount = test_count.toarray()

train_count = cv.transform(trainreview)

traincount = train_count.toarray()

這裡將演算法的評測與呼叫整合在乙個函式裡,以伯努利貝葉斯演算法為例:

def classificate(estimator, trainreview, trainlable, testreview, testlable):

start = time.time()

#模型訓練,fit通常都是指模型的學習、訓練過程

print('訓練:')

model = estimator

model.fit(trainreview, trainlable)

print(model)

#模型**:

print('**:')

pred_model = model.predict(testreview)

print(pred_model)

#演算法評估

print('評估:')

score = metrics.accuracy_score(testlable, pred_model)

matrix = metrics.confusion_matrix(testlable, pred_model)

report = metrics.classification_report(testlable, pred_model)

print('>>>準確率\n', score)

print('\n>>>混淆矩陣\n', matrix)

print('\n>>>召回率\n', report)

end = time.time()

t = end - start

print('\n>>>演算法消耗時間為:', t, '秒\n')

#演算法呼叫:

knc = bernoullinb()

classificate(knc, traincount, trainlable, testcount, testlable)

召回率表達的和混淆矩陣差不多,假定:從乙個大規模資料集合中檢索文件時,可把文件分成四組:

文字分類演算法之 貝葉斯文字分類演算法

文字分類過程 例如文件 good good study day day up 可以用乙個文字特徵向量來表示,x good,good,study,day,day up 在文字分類中,假設我們有乙個文件d x,類別 c又稱為標籤。我們把一堆打了標籤的文件集合 作為訓練樣本,x c 例如 對於這個只有一句...

分類演算法 七) 短文本分類

深入做文字分類的同學都知道,短文本分類相對來說比較難。因為較短的文字包含的資訊較少,有時候模型很難學到關鍵特徵。參考 指出 但是對於長文字直接用cnn就不行了,textcnn會比han模型泛化能力差很多。當然如果在textcnn前加一層lstm,這樣效果可以提公升很大。另外還有一點很重要的是,實際使...

R語言 文字分類 1

因專案需要,結合自身專業知識,故而接觸了r語言及一些常用分類器。記錄下自己這乙個多月的學習歷程。與起源於貝爾實驗室的s語言類似,r也是一種為統計計算和繪圖而生的語言和環境,它是一套開源的資料分析解決方案,由乙個龐大且活躍的全球性研究型社群維護。r是一門指令碼語言,在繪圖方面有著非常強的能力,它可以讓...