利用最小二乘法求線性分類器係數**如下:
function
[ w,b ] = leastsquares( traindata,trainlabel )
%最小二乘法線性分類器
[nums,demens]=size(traindata)
; traindata=[traindata,ones(nums,1)]
; r=traindata'*traindata;
e=traindata'
*trainlabel;
w=inv(r)
*e; b=norm(trainlabel-traindata*w,2)
;end
svm即代入kkt條件的二次規劃問題
**如下:
function
[model] = svmtrain(x, y, c)
% 函式的核心就是對拉格朗日對偶式的二次規劃問題, 通過返回的alpha得到我們需要的支援向量
m = length(y)
; h = y * y' * ((x'
)'* x');
%線性核運算
f = -ones(m, 1)
; a = ;
b = ;
aeq = y';
beq = 0;
lb = zeros(m, 1);
ub = c * ones(m, 1);
alphas0 = zeros(m, 1);
epsilon = 0.1;
options = optimset('largescale', 'off', 'display', 'off')
; alphas1 = quadprog(h, f, a, b, aeq, beq, lb, ub, alphas0, options)
; logic_vector = abs(alphas1) > epsilon;
model.vec_x = x(logic_vector, :)
; model.vec_y = y(logic_vector)
; model.alphas = alphas1(logic_vector)
;end
function result = svmtest(model, x)
% 在svmtrain中我們主要計算的就是那幾個支援向量, 對應的, 核心就是alpha
% 現在有了alpha, 我們通過公式可以輕而易舉地計算出w, 我們還不知道b的值, 也即是超平面偏差的值
% 所有先將我們的支援向量代入到公式中, 計算出乙個臨時的w
% 對於一直的支援向量來說, 我們已經知道了它的label, 所有可以計算出b, 將超平面拉過來, 再將這個b運用到測試集中即可
% 帶入公式w = sum(alpha .
* y_sv)
*kernel(x_sv, x_test)
% x是輸入需要**的值
tmp = (model.alphas' .* model.vec_y'
*(model.vec_x*model.vec_x'))'
;% 計算出偏差, 也就是超平面的截距
total_bias = model.vec_y - tmp;
bias = mean(total_bias)
;% 我們已經得到了alpha, 因為w是由alpha表示的, 所以通過alpha可以計算出w
% w = sum(alpha .
* y_sv)
*kernel(x_sv, x_test)
% 其中y_sv是sv的標籤, x_sv是sv的樣本, x_test是需要**的資料
w = (model.alphas' .* model.vec_y'
*(model.vec_x*x'))'
; result.w = w;
result.y_pred = sign(w + bias)
; result.b = bias;
end
SVM線性分類MATLAB實現
資料集需要自行處理,這裡針對的是cancer資料集 clear ticload c users administrator desktop cancer.mat mu cancer 1 444,zi cancer 445 end,整理資料,第一列 1,2 作為標籤 cycle n 1 進行cycle...
SVM入門 線性分類器(2)
線性分類器 一定意義上,也可以叫做感知機 是最簡單也很有效的分類器形式.在乙個線性分類器中,可以看到svm形成的思路,並接觸很多svm的核心概念.用乙個二維空間裡僅有兩類樣本的分類問題來舉個小例子。如圖所示 c1和c2是要區分的兩個類別,在二維平面中它們的樣本如上圖所示。中間的直線就是乙個分類函式,...
支援向量機 線性分類SVM
模型原型 sklearn.svm.linearsvc penalty l2 loss squared hinge dual true,tol 0.0001,c 1.0,multi class ovr fit intercept true,intercept scaling 1,class weigh...