機器學習實驗一SVM分類實驗


一、實驗目的和內容

(一)實驗目的

    1、熟悉支持向量機SVM(Support Vector Machine)模型分類算法的使用。

    2、用svm-train中提供的代碼框架(填入SVM分類器代碼)用train.data訓練數據提供的矩陣來訓練參數得到訓練模型model,利用libsvm進行模型的訓練,分類預測等。

    3、利用model和svm-train的代碼來分類測試數據集test.data,並報告其分類正確率。

(二)實驗內容

    支持向量機將向量映射到一個更高維的空間裡,在這個空間里建立有一個最大間隔超平面。在分開數據的超平面的兩邊建有兩個互相平行的超平面。分隔超平面使兩個平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。

   1、數據預處理(將原始數據格式做一定的處理,轉換成libsvm能夠使用的而數據)

   2、訓練數據集的訓練,產生訓練模型。

   3、測試數據集的分類預測,觀察分析實驗結果。

二、實驗過程

實驗步驟和詳細實驗內容

(一)實驗步驟

1、對原始數據集進行預處理,將文本數據集轉換成為libsvm能夠使用的數據。

(1)原始數據格式:

條件屬性a 

條件屬性b 

條件屬性c 

條件屬性d 

條件屬性e 

條件屬性f 

條件屬性g 

條件屬性h 

條件屬性i 

條件屬性j 

決策屬性

0.006129

-0.029258

-1.000000

-1.000000

-1.000000

-1.000000

-1.000000

-1.000000

-1.000000

-1.000000

1

(2)數據格式轉換需要:

當數據較少時,可以用formatdatalibsvm輕松地將文本數據轉換成為svm工具使用的數據。使用方法為:

打開train.data然后將數據粘貼到sheet1的單元格中。

‚再"工具"-->"宏"-->執行下面有一個選項(FormatDatatoLibsvm)-->執行,要選中這個然后運行就可以了 ,這時數據轉換的問題就解決了(如果沒有宏選項,點擊“開始--excel選項---在功能區顯示“開發工具”選項卡”)

ƒ可以copy到一個記事本中即可。但是注意在用libsvm的時候要在命令行輸入.txt后綴。

決策屬性

條件屬性a 

條件屬性b 

條件屬性c 

條件屬性d 

條件屬性e 

條件屬性f 

條件屬性g 

條件屬性h 

條件屬性i 

條件屬性j 

1

1:.006129

2:-.029258

3:-1

4:-1

5:-1

6:-1

7:-1

8:-1

9:-1

10:-1

2、將處理好的數據集train.txt通過libsvm包中的svm-train進行訓練,生成訓練模型train.model。

3、利用訓練好的模型對測試數據集test.txt進行分類預測,觀其分類結果和識別正確率。

4、分析得到的實驗結果,思考有什么問題以及改進辦法等。

(二)詳細實驗內容

   1、對實驗中給出的數據集train.data進行數據格式轉換,能夠更有效地將文本數據轉換成為svm工具使用的數據。

    2、利用1轉換好的數據,通過實驗指導書中給出的通用SVM 軟件包Libsvm建立分類模型,生成訓練模型train.model。

    3、利用2所訓練好的模型對測試數據集test.txt進行分類預測,觀察分類結果以及分類正確率。

三、實驗結果

實驗結果數據(如果有評測要求應包括評測結果,例如分類的准確率)

分析:在原始訓練數據集中可以發現,這實際上是一個非均衡數據集,正樣本的數據和負樣本的數據數量偏差十分大,決策屬性1很少,而決策屬性-1較多。

分析:自動選擇最優參數,自動進行歸一化。利用我們生成的模型對測試數據集進行預測,得到的預測准確率為94.3533%

四、實驗總結

完成試驗后對實驗中的問題進行總結(可包括實驗結果討論及下一步工作)

    本次實驗是通過LIBSVM進行模型的構建與預測,使用libsvm進行分類,只需要有屬性矩陣和標簽,然后就可以建立分類模型(model),然后利用得到的這個model進行分類預測了。對數據進行預處理之后,調用相關的軟件包能夠將訓練數據集轉換出訓練模型,並且對測試數據集進行簡單的分類,得到了最后的分類結果。

在實驗過程中也發現了一些問題,就是訓練數據樣板不平衡。這本身是一個二元分類問題,分類器是由訓練數據訓練出來的模型,所以訓練數據肯定會對其造成直接的影響,這里所說的不平衡性就是各個類別的訓練 sample 數目不平衡。比如,在二元分類的情況下在原始訓練數據集中可以發現,這實際上是一個非均衡數據集,正樣本的數據和負樣本的數據數量偏差十分大。因此導致測試的結果分類正確率accuracy只有94.3533%,最后的分類輸出也只有-1了。

通過調研和分析,我收集到一些方法可以解決樣本為非均衡數據集的方法:

1、在兩類正負樣本比例非常不均衡的情況下,就不能再用「分類正確率」(accuracy)來衡量模型性能,而要用少數類的「准確率」(precision)和「召回率」(recall),或者二者的綜合(F1, equal error rate, area under curve 等等)。

2、增加數量較少決策屬性的樣本特征,把少數類的數據復制幾份,並適當加噪聲。這可以增強模型的魯棒性,調整兩類訓練樣本的權重,使得兩類的總權重相等。

3、采樣,選擇每個正樣本的k近鄰,然后在該樣本和近鄰樣本的連線上隨機采樣。

4、數據預處理。基本的目標就是把數據變平衡,常見的方法有over-sample,under-samplesmote等。

總結:

1、支持向量機的關鍵技術:支持向量機性能的優劣主要取決於核函數的選取,所以對於一個實際問題而言,如何根據實際的數據模型選擇合適的核函數從而構造SVM算法.目前比較成熟的核函數及其參數的選擇都是人為的,根據經驗來選取的,帶有一定的隨意性.在不同的問題領域,核函數應當具有不同的形式和參數,所以在選取時候應該將領域知識引入進來.

2、在使用libsvm進行分類訓練時,也要注意正負樣本的均衡問題,我們可以采用上面提到的一些方法進行解決。

3、在接下來需要嘗試將不同的訓練樣本訓練出模型,調整正負樣本的比例,尋找最優參數的設置,提高模型的分類預測正確率。

參考文獻:

[1]姬水旺,姬旺田,支持向量機訓練算法綜述[J],微機發展,141),2004

[2]劉江華,程君實,陳佳品,支持向量機訓練算法綜述[J],信息與控制,311),2002

[3]Libsvm學習筆記(http://mirrorlake.bokee.com/5133582.html

[4]LIBSVM使用方法及參數設置(http://blog.sina.com.cn/s/blog_60f842960101j5rw.html)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM