libSVM的資料格式

來源:互聯網
上載者:User

標籤:art   sha   details   dict   bsp   決策   blog   ref   nbsp   

首先介紹一下 libSVM的資料格式

Label 1:value 2:value ….

Label:是類別的標識,比如上節train.model中提到的1 -1,你可以自己隨意定,比如-10,0,15。當然,如果是迴歸,這是目標值,就要實事求是了。

Value:就是要訓練的資料,從分類的角度來說就是特徵值,資料之間用空格隔開

比如: -15 1:0.708 2:1056 3:-0.3333

需要注意的是,如果特徵值為0,特徵冒號前面的(姑且稱做序號)可以不連續。如:

       -15 1:0.708 3:-0.3333

表明第2個特徵值為0,從編程的角度來說,這樣做可以減少記憶體的使用,並提高做矩陣內積時的運算速度。我們平時在matlab中產生的資料都是沒有序號的常規矩陣,所以為了方便最好編一個程式進行轉化。

 

怎樣產生libsvm所用的資料格式

 第一種方法 使用FormatDataLibsvm.xls

我已經儲存在我百度網盤裡面了,可免費下載~記得以前是在新浪愛問下載的,需要積分……

為http://pan.baidu.com/share/link?shareid=447079&uk=2165237662

運行FormatDataLibsvm.xls(注意這時會有一個關於“宏已禁宏”的安全警示,點擊“選項”,選擇“啟用此內容”,確定即可);1,先運行FormatDataLibsvm.xls然後將資料粘貼到sheet1的topleft單元。

   2、 開啟data.xls,(註:網上很多的介紹都是直接將資料粘貼到sheet1的topleft單元),要特別注意的是這時候的資料排列順序應該是:

                  條件屬性a   條件屬性b  ...  決策屬性

                            7     5    ...  2

                            4     2    ...  1

      3、"工具"-->"宏"-->執行下面有一個選項(FormatDatatoLibsvm)-->執行,要選中這個然後點擊“運行” ,這時候資料講變成:

                 決策屬性  條件屬性a  條件屬性b  ...

                        2    1:7    2:5    ...

                       1    1:4    2:2    ...

 

等資料轉換完成後,將該檔案儲存為.txt檔案。這時資料轉換的問題就解決了。

第二種方法

.txt格式->svm格式的轉換(該段轉自http://blog.csdn.net/lztao82/article/details/7495258)

        首先說明的是,這裡所提的.txt文本資料是指資料檔案帶有逗號、空格、頓號、分號等資料分離符號的資料檔案。因為其用符號來分離,導致所有資料項目都歸類為一個屬性,無法實現上面2步驟的格式輸入,也就無法實現正確結果格式的輸出了。

 

       為瞭解決該問題,轉換該過程與上面一過程的最大不同就在於:在開啟該.txt檔案的時候根據文本資料本身的資料特點將其所包含的逗號、分號、定位字元等資料分離的符號去掉;具體的做法是:轉換運行FormatDataLibsvm.xls,“檔案”->“開啟”->選擇要開啟的data,txt檔案,接著在文本匯入嚮導中根據data.txt檔案本身的資料特點選擇“未經處理資料類型(分隔字元號)”;接著選擇分隔字元號的類型(目地是使得該資料分成獨立的一列列資料,分離成功的話,在資料預覽中將可以看到一列列分離獨立的資料) :選擇“列資料格式”(常規)->完成;

 

這時候只要調整上面"一"過程的資料格式,重複其後面的步驟2、3操作即可。

第三種方法

其實libsvm所需的資料也可以自己產生~比如我之前是利用映像的顏色特徵進行映像分割,先用程式讀取RGB值然後儲存在txt檔案中就可以了~只不過要注意儲存的格式

 

如何使用這些資料

以簡單的使用為例

在用libsvm內建的一個例子heart_scale.mat時,一切正常~

load heart_scale.mat(此處無分號)

train = heart_scale_inst;

train_label=heart_scale_label;

test=train;

test_label=train_label;

model=svmtrain(train_label,train,‘-c 2 -g 0.01‘);

[predict_label,accuracy]=svmpredict(test_label,test,model);

但是在我們用自己的例子時出現了問題~

因為train = heart_scale_inst;是用的mat檔案的特徵列

train_label=heart_scale_label;用的是mat檔案的標籤列

而我們產生的txt或者mat檔案還沒有進行賦值所以一開始進行賦值就可以了~

A=[newmat(1:2288,1:3)];%特徵列

B=[newmat(1:2288,4)];%標籤列

train = A;

train_label=B;

libSVM的資料格式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.