matlab SVM有監督學習

2021-07-23 06:29:34 字數 3268 閱讀 3166

在機器學習領域,支援向量機svm(support vector machine)是乙個有監督的學習模型,通常用來進行模式識別、分類、以及回歸分析。
*參考 :

1. 2.

* 說明. matlab 版本: matlab_r2015a

**資料集: 將參考1中資料集重新命名便於直接匯入。

–icesongqiang

clear all;

clc;

%% 資料集已經整理,直接load

load ('bedroom.mat') % bedroom

load ('forest.mat') % forest

load ('labelset.mat') % labelset

dataset = [bedroom; forest];

%%%% 訓練集和測試集獲取

% 取bedroom,forest的前5行作為訓練集

train_set = [dataset(1

:5, :); dataset(11

:15, :)];

% 相應的訓練集的標籤

train_set_label = [labelset(1

:5); labelset(11

:15)];

% 將第一類的6-10,第二類的16-20,做為測試集

test_set = [dataset(6

:10, :); dataset(16

:20, :)];

% 相應的測試集的標籤

test_set_label = [labelset(6

:10); labelset(16

:20)];

%%%% 資料預處理,將訓練集和測試集歸一化到[0,1]區間

[mtrain, ntrain] = size(train_set);

[mtest, ntest] = size(test_set);

test_dataset = [train_set; test_set];

% mapminmax為matlab自帶的歸一化函式

[dataset_scale, ps] = mapminmax(test_dataset', 0, 1)

dataset_scale = dataset_scale';

train_set = dataset_scale((1

:mtrain), :);

test_set = dataset_scale((mtrain+1):(mtrain+mtest), :);

%%%% svm網路訓練

model = svmtrain(train_set, train_set_label,'kernel_function','linear','showplot',true);

%% svm網路**

[predict_label] = svmclassify(model, test_set, 'showplot', true);

%% 結果分析

% 測試集的實際分類和**分類圖

figure;

hold on;

plot(test_set_label,'o');

plot(predict_label,'r*');

xlabel('測試集樣本','fontsize',12);

ylabel('類別標籤','fontsize',12);

legend('實際測試集分類','**測試集分類');

title('測試集的實際分類和**分類圖','fontsize',12);

最開始使用 參考1中

model = svmtrain(train_set_label, train_set, '-s 2 -c 1 -g 0.07');
會報出錯誤,個人感覺也應該是訓練集引數在第一位,於是參考2中的

svmmodel = svmtrain(traindata, trainlabel,'kernel_function','linear','showplot',true);

符合

svmstruct = svmtrain(training, y, 'param1',val1, 'param2',val2, ...)

形式;

2. 參考1中

[predict_label] = svmpredict(test_set_labels, test_set, model);

沒有svmpredict()函式,使用參考2中

predict_label = svmclassify(svmmodel,testdata,'showplot',true);

通過。搞清楚了,原來上面是使用的matlab自帶的svm庫,而參考1使用的libsvm,libsvm與matlab自帶的svm的區別參考3:

*參考3:

複製原文如下:

1 matlab自帶的svm實現函式僅有的模型是c-svc(c-support vector classification); 而libsvm工具箱有c-svc(c-support vector classification),nu-svc(nu-support vector classification),one-class svm(distribution estimation),epsilon-svr(epsilon-support vector regression),nu-svr(nu-support vector regression)等多種模型可供使用。

2 matlab自帶的svm實現函式僅支援分類問題,不支援回歸問題;而libsvm不僅支援分類問題,亦支援回歸問題。

3 matlab自帶的svm實現函式僅支援二分類問題,多分類問題需按照多分類的相應演算法程式設計實現;而libsvm採用1v1演算法支援多分類。

4 matlab自帶的svm實現函式採用rbf核函式時無法調節核函式的引數gamma,貌似僅能用預設的;而libsvm可以進行該引數的調節。

5 libsvm中的二次規劃問題的解決演算法是smo;而matlab自帶的svm實現函式中二次規劃問題的解法有三種可以選擇:經典二次方法;smo;最小二乘。(這個是我目前發現的matlab自帶的svm實現函式唯一的優點~)

而 libsvm的安裝可以參考其他,不做其他深入了解。

有監督學習

利用一組帶有標籤的資料,學習從輸入到輸出的對映,然後將這種對映關係應用到未知資料上,達到分類或回歸的目的。分類 當輸出為離散的,學習任務為分類任務。回歸 當輸出為連續的,學習任務為回歸任務。訓練集 用來訓練的已標註的資料,用來建立模型,發現規律。測試集 已標註的資料,通常隱藏標記,輸送給以訓練的模型...

有監督學習 無監督學習與半監督學習

這個問題可以回答得很簡單 是否有監督 supervised 就看輸入資料是否有標籤 label 輸入資料有標籤,則為有監督學習,沒標籤則為無監督學習。但根據知乎慣例,答案還是要繼續擴充套件的。首先看什麼是學習 learning 乙個成語就可概括 舉一反三。此處以高考為例,高考的題目在上考場前我們未必...

有監督學習和無監督學習 無監督學習

一.無監督學習包含的演算法 聚類 kmeans聚類演算法 降維 pca 之所以叫無監督學習 是因為模型是從無標籤的資料開始學習,沒有目標值。二.kmeans聚類 1.聚類演算法步驟 定義 將高維資料轉化為低維資料的過程,在此過程中可能會捨棄原有資料,創造新的變數 作用 降低原始資料的維數 複雜度 損...