SVM做文字分類詳細操作流程

2021-08-10 06:48:00 字數 2489 閱讀 2096

以天氣分類為例,我們的目的是運用支援向量機svm(libsvm)來訓練出乙個天氣分類的模型,這個模型可以將新來的語料分成天氣類和非天氣類兩個大類,即正類與負類,具體的流程如下:

1.爬取語料資料2.語料的處理

爬完語料之後進行人工篩選,將一些不純的正語料去掉,剩下的純淨的正語料。之後再將剩下的正負語料進行進一步處理,比如停用詞的去除等操作,就是講語料中沒有意義的詞去除,eg,「嗎」、「的」…

3.抽取測試語料

這裡要注意,語料處理好之後,大概要從語料中抽10%的語料,用於模型訓練好之後的測試,即抽取大概1000條正語料和3000條負語料作為測試語料,剩下的語料作為訓練語料。

4.分詞處理

將所有的語料進行分詞處理,將完整的語料分成若干詞語,分詞可以運用「結巴」分詞的庫。

5.語料標註

將每乙個分詞後的語料進行標註,正語料標註為1,負語料標註為0。語料和標籤之間用tab分隔,即「\t」。

6.打亂語料

將標註好的正負語料進行混合,然後進行打亂順序,讓帶標籤的正負語料充分混合。

7.特徵提取(特徵選擇)

可以運用卡方或者互資訊等方法將分詞之後的語料每個詞的特徵提取出來,即每乙個詞語與當前類別的相關程度,特徵提取也是為後面的向量化做準備的。可以用feature_select.py。

python feature_select.py input.txt output.txt
特徵提取結束可以得到weather_train_feature_select.txt ,裡面會有每個特徵詞與相關類別的相關度排序。

8.向量化

就是將我們處理好的資料進行向量化,將我們的語料轉化成向量,分好詞的語料命中之前特徵提取的特徵詞,那麼就將向量中的這個值設定為1,其他的為0。這個過程中,特徵詞就是這個向量的維度,每個語料都是乙個這麼多維度的向量。向量化執行乙個vector.sh指令碼檔案,裡面指定feature_num,text_data,train_model這幾個檔案,其中feature_num=500是指我們取前500個特徵詞作為我們訓練模型的維度,text_data使我們之前分好詞打好標籤的混合好的語料,train_data是我們指定好向量化好之後生成的向量化檔案。

同時還需要指定如下檔案:

其中feature_file是進行特徵選擇之後的檔案,weather_feature_kv.dict是一些時間和地點的簡直對,目的是為了減少我們特徵向量的維度,內容如圖所示:

weather_feature.tire是自定義的一些的天氣引數,如圖所示:

我們之前定的維度是500維,加上這兩個檔案,特徵向量就是502維的。

9.引數調優

python grid.py libsvm.weather.train.txt
其中libsvm.weather.train.txt是我們上一步向量化得到的檔案。之後是漫長的引數調優,最後會得到c和g的結果。

10.訓練模型

引數調優之後,我們就可以呼叫libsvm中的svm-train來訓練模型,訓練的時候同時要設定之前引數調優得到的結果,最終我們會得到乙個天氣的模型,訓練模型用到train_model.sh,其中要制定好生成的模型檔案路徑 :

train_model=../../../weather_source/libsvm.fea$.weather.model
除此之外,還要將引數調優得到的結果c和g傳入一起訓練,還要將引數b設定為1,為了得到的分數是其概率。最終可以得到我們想要的模型,如果我們

11.**結果

呼叫svmpredict,根據訓練獲得的模型,對資料集合進行**。通過對資料集合的**,可測得準確率與召回率。呼叫方法如下所示:

./svm-predict ../weather_source/libsvm.weather.test.train.txt ../weather_source/libsvm.fea500.weather.model ../weather_source/predict_result.txt
最終就會得到**的結果predict_result.txt 。

文字分類的基本流程

author fuguizen email fuguizen596 163.com time 2020 3 8 13 51 from sklearn.feature extraction.text import countvectorizer,tfidftransformer,tfidfvector...

NLP 中文文字分類 詳細

實現如下customprocessor class customprocessor dataprocessor def get train examples self,data dir return self.create examples self.read tsv os.path.join da...

文字分類的python實現 基於SVM演算法

svc的懲罰引數c 預設值是1.0。c越大,對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣對訓練集測試時準確率很高,但泛化能力弱。c值小,對誤分類的懲罰減小,允許容錯,泛化能力較強。儘管tf idf權重有著非常廣泛的應用,但並不是所有的文字權重採用tf idf都會有較好的效能。在有些問題上,採...