三十七 利用支援向量機做文字分類

2021-07-26 10:27:32 字數 3024 閱讀 8749

從上一節提取出的全部特徵中選取出關鍵的特徵,並利用支援向量機對測試樣本做回歸計算,判斷準確率

通過tf-idf計算出來的數值是某個特徵(詞)對於這篇文件的權重,不代表這個特徵(詞)在文字分類中的權重。這很容易理解,比如某乙個特徵(詞)在多個分類中的tf-idf是不一樣的,但是這個特徵對於這個分類問題的權重肯定是乙個定值。

選取重要的特徵的方法可以是:1.)按tf-idf排序從大到小選topn;2)按特徵的普遍性選取(在多個類別中出現過);3)按特徵在不同文件中tf-idf的差距選擇;

我們這次採取結合的形式:在至少2個類別中tf-idf大於0,同時在多個類別中第一名高於第二名10%以上。這麼選擇的原因是:我的總類別一共5種比較少,所以2個類別以上就說明具有普遍性了,你可以根據你的類別數目調整,第一名高於第二名10%表示這個特徵具有一定的區分度。

修改我們的feature_extract.py如下:

def

feature_dump

(): cursor = conn.cursor()

category={}

category[0] = 'istec'

category[1] = 'issoup'

category[2] = 'ismr'

category[3] = 'ismath'

category[4] = 'isnews'

corpus=

for index in range(0, 5):

sql = "select segment from crawlpage where " + category[index] + "=1"

print sql

cursor.execute(sql)

line = ""

for result in cursor.fetchall():

segment = result[0]

line = line + " " + segment

conn.commit()

conn.close()

vectorizer=countvectorizer()

csr_mat = vectorizer.fit_transform(corpus)

transformer=tfidftransformer()

tfidf=transformer.fit_transform(csr_mat)

word=vectorizer.get_feature_names()

print tfidf.toarray()

for index in range(0, 5):

f = file("tfidf_%d" % index, "wb")

for i in np.argsort(-tfidf.toarray()[index]):

if tfidf.toarray()[index][i] > 0:

f.write("%f %s\n" % (tfidf.toarray()[index][i], word[i]))

f.close()

deffeature_extraction

(): d = {}

for index in range(0, 5):

f = file("tfidf_%d" % index, "r")

lines = f.readlines()

for line in lines:

word = line.split(' ')[1][:-1]

tfidf = line.split(' ')[0]

if d.has_key(word):

else:

d[word] = np.array(tfidf)

f.close();

f = file("features.txt", "wb")

for word in d:

if d[word].size >= 2:

index = np.argsort(d[word])

if float(d[word][index[d[word].size-0-1]]) - float(d[word][index[d[word].size-1-1]]) > 0.01:

f.write("%s %s\n" % (word, d[word]))

f.close()

if __name__ == '__main__':

#get_segment();

feature_dump();

feature_extraction();

最終輸出的features.txt中有809個特徵供我們使用,如下:

集群 ['0.027741'

'0.014016'

'0.010606']

分類器 ['0.002870'

'0.045052'

'0.000943']

中心 ['0.008167'

'0.001647'

'0.004274'

'0.006954'

'0.031360']

首席 ['0.003015'

'0.017036']

fit ['0.016885'

'0.000284']

懂得 ['0.035888'

'0.001629'

'0.003064']

密度 ['0.002414'

'0.002106'

'0.015073'

'0.001586']

master ['0.021045'

'0.002002'

'0.000471']

對方 ['0.002414'

'0.020451'

'0.001684'

'0.003569']

物品 ['0.020088'

'0.001158'

'0.001414']

……

利用支援向量機模型可以直接使用scikit-learn,下一節我們再來研究一下scikit-learn的支援向量機怎麼

基於支援向量機的文字分類

基於支援向量機svm的文字分類的實現 1 svm簡介 支援向量機 svm 演算法被認為是文字分類中效果較為優秀的一種方法,它是一種建立在統計學習理論基礎上的機器學習方法。該演算法基於結構風險最小化原理,將資料集合壓縮到支援向量集合,學習得到分類決策函式。這種技術解決了以往需要無窮大樣本數量的問題,它...

利用余弦相似度做文字分類

利用余弦相似度做文字分類 在數學中余弦相似度的公式 cos a,b a b a b 而在文字上,我們的余弦相似度通常是這樣計算而成 文字a,b 共同出現的詞條數目 文字a 出現的詞條數目 文字b出現的詞條數目 處理兩個純文字的相似度可以這樣處理,但對於文字分類來說,我們更多使用的是 訓練集 與 測試...

使用核支援向量機 svm tfidf進行文字分類

文字分類的演算法很多,這裡提供乙個使用svc來分類文字的例子。在乙個分類任務中,我分別使用決策樹和rnn進行分類,表現最佳的是使用svc的分類,所以下面只給出了svc的 import jieba import json from sklearn.datasets import base from s...