我正在编写一个感知器来学习对面孔图片中的性别进行分类。我对 MATLAB 非常陌生,所以我需要很多帮助。我有几个问题:
我正在尝试编写一个函数:
function [y] = testset(x,w) %y = sign(sigma(x*w-threshold))
其中 y 是预测结果,x 是作为一个非常大的矩阵放入的训练/测试集,w 是方程的权重。之后的部分
%
是我正在尝试编写的,但我不知道如何在 MATLAB 代码中编写它。有什么想法吗?我正在尝试编写第二个函数:
function [err] = testerror(x,w,y) %err = sigma(max(0,-w*x*y))
w、x 和 y 具有与上述相同的值,并且 err 是我的误差函数,我试图通过感知器的步骤将其最小化。
我试图在我的感知器中创建一个步骤,通过在我的原始方程上使用梯度下降来降低错误百分比。有谁知道我如何使用梯度下降增加 w 以使用 if then 语句最小化误差函数?
如果可以帮助您回答这些问题,我可以提出到目前为止的代码。
谢谢!
编辑 - - - - - - - - - - - - -
好的,所以我仍在为此编写代码,并希望在我有更完整的内容时将其发布。我现在最大的问题是:
我有以下功能:
function [y] = testset(x,w)
y = sign(sum(x*w-threshold))
现在我知道我应该设置一个阈值,但无法弄清楚我应该输入什么作为阈值!有什么想法吗?
编辑----------------------------
这是我到目前为止所拥有的。仍然需要对其进行更改,但我将不胜感激,尤其是关于结构的意见,以及有关进行需要进行更改的建议!
function [y] = Perceptron_Aviva(X,w)
y = sign(sum(X*w-1));
end
function [err] = testerror(X,w,y)
err = sum(max(0,-w*X*y));
end
%function [w] = perceptron(X,Y,w_init)
%w = w_init;
%end
%------------------------------
% input samples
X = X_train;
% output class [-1,+1];
Y = y_train;
% init weigth vector
w_init = zeros(size(X,1));
w = w_init;
%---------------------------------------------
loopcounter = 0
while abs(err) > 0.1 && loopcounter < 100
for j=1:size(X,1)
approx_y(j) = Perceptron_Aviva(X(j),w(j))
err = testerror(X(j),w(j),approx_y(j))
if err > 0 %wrong (structure is correct, test is wrong)
w(j) = w(j) - 0.1 %wrong
elseif err < 0 %wrong
w(j) = w(j) + 0.1 %wrong
end
% -----------
% if sign(w'*X(:,j)) ~= Y(j) %wrong decision?
% w = w + X(:,j) * Y(j); %then add (or subtract) this point to w
end