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

2021-10-07 14:16:40 字數 1522 閱讀 2758

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

import jieba

import json

from sklearn.datasets import base

from sklearn.feature_extraction.text import tfidfvectorizer

from sklearn.model_selection import train_test_split

from sklearn.svm import linearsvc, svc

from sklearn.model_selection import gridsearchcv

from sklearn.externals import joblib

from sklearn.pipeline import make_pipeline

def isdigit(n):

return n.isdigit()!=true

def trans():

bunch=base.bunch(label=, contents=)

with open("data.txt",'r',encoding='utf-8') as f:

a=f.read()

b=json.loads(a)

for tmp in b:

x_train, x_test, y_train, y_test=train_test_split(bunch.contents,bunch.label,train_size=0.90)#分割訓練和測試集

tfidfspace = base.bunch(label=bunch.label,tdm=, vocabulary={})

vectorizer=tfidfvectorizer(token_pattern=r"(?u)\b\w\w+\b")

svc = svc(c=100,gamma=0.1)

#使用pipeline進行訓練

pip=make_pipeline(vectorizer,svc)

#網格搜尋,優化引數

param_grid =

grid_search = gridsearchcv(pip, param_grid, cv=20,n_jobs=-1)

grid_search.fit(x_train,y_train)

print('score',grid_search.score(x_test,y_test))

joblib.dump(grid_search, "train_model.m")

def p(s):

lm: gridsearchcv = joblib.load("train_model.m")

b = lm.predict(s)

print(b[0])

if __name__=="__main__":

trans()

支援向量機的核函式

什麼是核函式?核函式是特徵轉換函式。這是非常抽象的描述,這一節的內容就是為了理解這個抽象的概念的。假設我們有乙個非線性分界線的分類問題,有兩個特徵 x1 x2 回顧邏輯回歸演算法裡的知識,我們可以使用多項式來增加特徵,以便描述出非線性分界線。當 0 1x 1 2 x2 3x1x 2 4 x21 5x...

支援向量機的核函式

支援向量機是建立在統計學習理論基礎之上的新一代機器學習演算法,支援向量機的優勢主要體現在解決線性不可分問題,他通過引入和函式,巧妙地解決了在高維空間中的內積運算,從而很好的解決了非線性分類問題。構造出乙個具有良好效能的svm,核函式的選擇是關鍵,核函式的選擇包括兩部分工作 一是核函式型別的選擇,二是...

支援向量機3 非線性支援向量機與核函式

本節敘述非線性支援向量機,其主要特點是利用核技巧 kernel trick 1 核技巧 非線性分類問題是指通過利用非線性模型才能很好地進行分類的問題。非線性問題往往不好求解,所以希望能用解線性問題的方法解決這個問題,所採取的方法是進行乙個非線性變換,將非線性問題變換為線性問題。通過解變換後的線性問題...