作者: chua | 可以轉(zhuǎn)載, 轉(zhuǎn)載時務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明
網(wǎng)址: http://www.meichua.com/archives/181.html
1: 工具下載地址
http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz
解壓后里面有個java目錄,里面是java版的source文件
可以在該java目錄下執(zhí)行make,會在該目錄下生成libsvm.jar,而后就可以使用libsvm提供的功能了
java源碼的命名方式不符合我們一般的習(xí)慣,所以最好自己修改一下類名,方法名,這樣我們調(diào)用的時候看到的引用也會順眼些
2: 使用libsvm.jar
2.1: svm_toy這是一個applt程序,簡單的分類使用,對頁面上不同顏色的點進(jìn)行劃分
java -cp libsvm.jar svm_toy
2.2 svm_train
建立svm的模型,需要事先準(zhǔn)備一個數(shù)據(jù)文件,格式如下:
lable1 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...lable2 index1:featureValue1 index2:featureValue2 index3:featureValue3 ....lable3 index1:featureValue1 index2:featureValue2 index3:featureValue3 ....lable4 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...
這各格式中,lable是分類的標(biāo)簽,具體是值可以是1,2,3等等,lable的對象類型是double,所以你可以寫成1.0,2.0,3.0或者1,1.5,2,3
index值就是featureValue的索引,也就是要計算的矩陣中的列,具體可以寫成1,2,3,index的對象類型是integer. 這里index可以跳這些,比如某個featureValue不存在,如:
1 1:0.5 5:2.0 6:0.1
當(dāng)準(zhǔn)備好訓(xùn)練數(shù)據(jù)文件(假設(shè)文件名為train_data.txt)后,執(zhí)行
java -cp libsvm.jar svm_train train_data.txt svm_model.txt
把計算模型結(jié)果輸出到svm_model.txt中,以便在predict中使用
2.3 svm_predict使用之前建立的svm model,對數(shù)據(jù)進(jìn)行分類處理,事先需要準(zhǔn)備predict文件,格式如上,在這里lable是你預(yù)先判斷的值,會和計算結(jié)果做比較,計算出準(zhǔn)確率
java -cp libsvm.jar svm_predict predict_data.txt svm_model.txt output.txt
3 更多請查看readme
4 幾個概念的參數(shù)
在train的時候,我們可以設(shè)置參數(shù):
其中-t用來指定核函數(shù)類型:
0 – linear: u'*v1 – polynomial: (gamma*u'*v + coef0)^degree2 – radial basis function: exp(-gamma*|u-v|^2)3 – sigmoid: tanh(gamma*u'*v + coef0)
0表示使用線性函數(shù):
K(x, y) = <x, y>
1表示使用d階多項式函數(shù)
K(x, y) = (<x, y> + 1)^dfor d = 2 and 2-dimensional inputsK(x, y) = 1 + 2*x1*y1 + 2*x2*y2 + 2*x1*y1*x2*y2 + x1^2*y2^2 + x2^2*y2^2= <f(x),f(x)>f(x) = (1,√2x1,√2x2,√2x1x2, x1^2*x2^2)^T
2表示使用高斯徑向基函數(shù)
K(x,y) = exp(- (||x-y||)^2 / d^2 )
3表示使用S型函數(shù)
K(x,y) = tanh(<x,y>/d + 1)
-s用來指定SVM的類型(default 0)
0 – C-SVC1 – nu-SVC2 – one-class SVM3 – epsilon-SVR4 – nu-SVR
0,1分類問題 2分布估算問題 3,4是回歸問題
另外更多的參數(shù)見readme
5 libsvm的文本分類
我從網(wǎng)上搜集了很多資料,基本上都是英文的,所以看的可能不是很確切.一般的做法就是在文章中找關(guān)鍵詞,可以根據(jù)詞語的類別特征,詞頻,在整個文章中占的比例來建立向量,也就是一個特征為一為屬性值.也有像建立2000個詞的詞典,然后根據(jù)詞建立固定的index,入文本中出現(xiàn)就在該index的屬性值標(biāo)記,這樣的話就是2000維向量.
通常文本分類用于搜索系統(tǒng),圖書館管理系統(tǒng)等.
5.1 制作demo的分類思路
a:
首先構(gòu)造一個字典,對里面的詞進(jìn)行分類
b:
構(gòu)造model,對已經(jīng)標(biāo)記類型的文本進(jìn)行詞搜索,找出個類別下詞的總個數(shù)和出現(xiàn)次數(shù)作為index和value.比如在標(biāo)識為類型1的文本中第一類下的詞總共出現(xiàn)9個,一共出現(xiàn)40次,第二類的詞總共2個,5次.
那么構(gòu)造出來的train的數(shù)據(jù)就是:
1 1:5 2:40 3:2 4:5
這樣取得所有文本數(shù)據(jù),建立svm model
c:
進(jìn)行predict,對需要預(yù)測目錄下的文本,根據(jù)svm_model預(yù)測類型,向量的提取和構(gòu)建model中的形式是一致的