MATLAB環境下用SVM對資料進行2 折分類

2021-07-30 22:57:37 字數 3110 閱讀 9420

資料探勘作業在matlab環境用svm對資料進行2-折交叉驗證(two-fold cross validation ),其實2-折交叉驗證就是先把資料分為訓練和測試兩類,一般都是平均分成兩組,先用訓練資料訓練乙個model然後用測試資料去**,例外用測試資料訓練另乙個model,然後用訓練資料去**,對得出來的兩個**結果求平均值,就是所要求的2-折交叉驗證的正確率。

1. 資料預處理:

1>資料清洗,去點資料中屬性值為空或者出錯的列。

2>把原始資料按行進行隨機打亂,這樣可以提高訓練出model的泛化能力。

3>對資料進行歸一化處理。

2.將資料匯入matlab,並分成兩組:

將實驗資料匯入到matlab中並且儲存為.m格式的檔案,可以用函式

data(1:size(tdata,1),:)=tdata(randperm(size(tdata,1))',:)
對資料集按行打亂,然後用mapminmax()函式進行資料歸一化。

traindata=mapminmax(traindata);

testdata=mapminmax(testdata);

3.svmcgforclass()引數的確定:

[bestcvaccuracy,bestc,bestg]=svmcgforclass(train_label,train,

cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

input:

train_label:訓練集的標籤,格式要求與svmtrain相同。

train:訓練集,格式要求與svmtrain相同。

cmin,cmax:懲罰引數c的變化範圍,即在[2^cmin,2^cmax]範圍內尋找 最佳的引數c,預設值為cmin=-8,cmax=8,即預設懲罰引數c的範圍是 [2^(-8),2^8]。

gmin,gmax:rbf核引數g的變化範圍,即在[2^gmin,2^gmax]範圍內尋找最佳的rbf核引數g,預設值為gmin=-8,gmax=8,即預設rbf核引數g的範圍是[2^(-8),2^8]。

v:進行cross validation過程中的引數,即對訓練集進行v-fold cross validation,預設為3,即預設進行3折cv過程。

cstep,gstep:進行引數尋優是c和g的步進大小,即c的取值為2^cmin,2^(cmin+cstep),…,2^cmax,,g的取值為2^gmin,2^(gmin+gstep),…,2^gmax,預設取值為cstep=1,gstep=1。

accstep:最後引數選擇結果圖中準確率離散化顯示的步進間隔大小([0,100]之間的乙個數),預設為4.5。

output:

bestcvaccuracy:最終cv意義下的最佳分類準確率。

bestc:最佳的引數c。

bestg:最佳的引數g。

確定引數的範圍是先粗略搜尋,通過觀察得出的準確率圖在進行精細搜尋。ps:這裡先用的c[-10 ,10],g[-10,10]

4.svmtrain()引數的設定:

cmd = [' -c ',num2str(bestc),' -g ',num2str(bestg)];

model=svmtrain(train_label,traindata,cmd);

-s svm型別:svm設定型別(預設0)

0 – c-svc

1 –v-svc

2 –一類svm

3 – e -svr

4 – v-svr

-t 核函式型別:核函式設定型別(預設2)

0 –線性:u』v

1 –多項式:(r*u』v + coef0)^degree

2 – rbf函式:exp(-gamma|u-v|^2)

3 –sigmoid:tanh(r*u』v + coef0)

-d degree:核函式中的degree設定(針對多項式核函式)(預設3)

-g r(gama):核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(預設1/ k)

-r coef0:核函式中的coef0設定(針對多項式/sigmoid核函式)((預設0)

-c cost:設定c-svc,e -svr和v-svr的引數(損失函式)(預設1)

-n nu:設定v-svc,一類svm和v- svr的引數(預設0.5)

-p p:設定e -svr 中損失函式p的值(預設0.1)

-m cachesize:設定cache記憶體大小,以mb為單位(預設40)

-e eps:設定允許的終止判據(預設0.001)

-h shrinking:是否使用啟發式,0或1(預設1)

-wi weight:設定第幾類的引數c為weight*c(c-svc中的c)(預設1)

-v n: n-fold互動檢驗模式,n為fold的個數,必須大於等於2

其中-g選項中的k是指輸入資料中的屬性數。option -v 隨機地將資料剖分為n部

我這裡svm型別,核函式型別都是採用預設的。

[predict_label_1,accurancy_1,prob_estimates_1] =svmpredict(test_label,testdata,model);
5.實驗結果:

以上是內容僅供參考,本人資料探勘菜鳥如有錯誤或遺漏歡迎隨時指出,謝謝

6.參考:

源**及實驗資料和要求:

[

win環境下py呼叫matlab的環境配置

我電腦安裝了多個版本的py 2.7,3.5,3.7 但其中只有3.5的支援呼叫matlab,所以這裡以3.5為例子。matlab的版本是2017a版的 先得找到matlab的安裝位址,這裡matlabroot的意思的matlab的安裝的那個檔案位址,不清楚的可以在matlab的命令欄裡直接輸入 ma...

在matlab環境下LIBSVM的demo

2 在matlab環境下用mex setup指令,設定matlab預設編譯器,我選擇是vs2010 3 解壓後libsvm後,在ibsvm 3.20 matlab路徑下執行make.m,把c檔案生成mexw64或mexw32,供matlab呼叫 4 現在可以利用libsvm測試,回到上乙個路徑ibs...

Libsvm在matlab環境下使用指南

一 安裝 二 使用 在使用之前,要對libsvm做乙個了解,而最好的資料自然是libsvm種readme檔案了。readme檔案包含了介紹,安裝,svm返回的模型引數,以及例子等。libsvm主要用了兩個函式svmtrain,svmpredict,如果你在用的時候忘了具體的引數,可以在matlab命...