libSVM數據格式:
參考博文:http://blog.csdn.net/kobesdu/article/details/8944851
Label 1:value 2:value ….
Label:是類別的標識,比如上節train.model中提到的1 -1,你可以自己隨意定,比如-10,0,15。當然,如果是回歸,這是目標值,就要實事求是了。
Value:就是要訓練的數據,從分類的角度來說就是特征值,數據之間用空格隔開
比如: -15 1:0.708 2:1056 3:-0.3333
需要注意的是,如果特征值為0,特征冒號前面的(姑且稱做序號)可以不連續。如:
表明第2個特征值為0,從編程的角度來說,這樣做可以減少內存的使用,並提高做矩陣內積時的運算速度。我們平時在matlab中產生的數據都是沒有序號的常規矩陣,所以為了方便最好編一個程序進行轉化。
使用 FormatDataLibsvm.xls 生成libSVM數據格式
運行FormatDataLibsvm.xls(注意這時會有一個關於“宏已禁宏”的安全警示,點擊“選項”,選擇“啟用此內容”,確定即可);1,先運行FormatDataLibsvm.xls然后將數據粘貼到sheet1的topleft單元。
等數據轉換完成后,將該文件保存為.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;
目前只進行了簡單的訓練以及測試……END