LibSVMsharp的乙個多分類小demo

2021-10-09 05:54:42 字數 2618 閱讀 1184

前幾天使用乙個如下圖的libsvm的c#封裝庫進行多分類任務的demo,記錄一下步驟;

0、整理資料至合理範圍(進行歸一化處理,這裡的資料在matlab中已經處理好了);

1、處理資料為libsvm能夠識別的格式,可以使用libsvm提供的formatdatalibsvm.xls進行快速處理,這裡使用matlab進行檔案寫操作處理:

load('niab_shannone_new.mat'); %載入檔案

a=niab_shannone_new;

fp = fopen('mydataset.txt','w'); %開啟或建立新檔案,沒有則建立

for i=1:11052

v1=a(1,i); %特徵值

v2=a(2,i);

v3=a(3,i);

v4=a(4,i);

v5=a(5,i);

v6=a(6,i); %標籤

%格式化資料

formatspec = '%d 1:%f 2:%f 3:%f 4:%f 5:%f \r\n';

fprintf(fp,formatspec,v6,v1,v2,v3,v4,v5); %輸出檔案

endfclose(fp); %關閉檔案

轉換格式後資料:

2、使用subset.py劃分訓練集和測試集:0.8:0.2(11052個樣本資料–> 8842:2210)

cd svmtest  

//劃分資料集

python subset.py -s 0 mydataset.txt 8842 dataset_train.txt dataset_test.txt

3、使用訓練樣本進行訓練,並使用測試樣本進行測試來調整引數;

code:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

//新增libsvm命名空間

//參考:

using libsvmsharp.helpers;

using libsvmsharp.extensions;

using libsvmsharp;

namespace svmtest_csharp

static

void

main

(string

args)

", crossvalidationaccuracy)

; console.

writeline

("\ntest accuracy:"

, testaccuracy)

;///**輸出

console.

writeline

("請輸入資料值(demo: a-b-c-d-e,換行結束):");

string str = console.

readline()

;//讀入一行字串

string

strvalues = str.

split

('-');

//字串分割

double

values =

newdouble

[strvalues.length]

; console.

write

("輸入的資料為:");

for(

int i =

0; i < strvalues.length; i++) "

, values[i]);

} console.

write

("\n");

svmnode[

] x =

newsvmnode[5

];for(

int i =

0; i <

5; i++

)//**

double prelabel = svm.

predict

(model, x)

; console.

writeline

("這組資料的**標籤為:",(

int)prelabel)

; console.

readkey()

;}}}

出現的小問題:

1、編譯平台選擇anycpu;

2、error: libsvm.dll找不到,複製該dll到bin目錄下

引數簡單調整後,分類效果如圖:

WSAEventselect 模型的乙個多執行緒示例

最近看了一下winsock的i o模型發現作者為了方便我們理解採用的基本上是單執行緒的處理方式。於是乎抽點時間寫了wsaeventselect的多執行緒伺服器例程。未及大批量的客戶機測試難免有疏漏之處請見諒!另外除非特別重要的地方加了注釋之外,其他地方沒有注釋,想看的可要花點心思了,真是不好意思 w...

多場景疊加的乙個方法

專案中可能會用到需要在現場景中新增乙個其他場景的功能,如下 需要新增的場景名稱陣列 string strscenenmaes 場景載入 public void loadlevel string levename scenemanager.loadscene levename,loadscenemod...

多紋理,貼到乙個面

由於一張紋理的大小不能超過30m,把文理分開貼在模型上面,我應該怎麼來設定紋理的座標,可以採用以下函式能實現!實現方法 1 把分割為多個,同時把麵也分割多個。2 使用紋理融合 對第2種舉例 測試通過 sotexture2transform texturetrans1 new sotexture2tr...