【发布时间】:2011-03-26 22:27:59
【问题描述】:
我正在编写一个感知器来学习对人脸图片中的性别进行分类。我对 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
【问题讨论】:
-
Matlab 文档本身相当详尽,并提供了背景材料、小示例和参考资料。提取一些特定于您的领域的论文,看看他们使用了哪些方法。
-
您尝试了哪些方法,哪些方法不起作用?您有具体问题吗?
-
你能把你所有的代码都放上来吗?
-
这就是我所拥有的一切(有些代码由于某种原因没有在突出显示的部分上方突出显示)。代码的最后一部分是我正在考虑从您编写的代码中放入的代码。
-
我看到您已将数据定义为
% input samples X = X_train; Y = y_train;,我想这会加载数据...但是您需要将数据 分开 2个类,又名,-1classmale,1classfemale,在我发布的示例中,它分为两个类,例如:X1=[rand(1,100);rand(1,100);ones(1,100)]; % class '+1' X2=[rand(1,100);1+rand(1,100);ones(1,100)]; % class '-1' X=[X1,X2];所以,我告诉你的是首先拆分数据,所以这样感知器将从示例中学习......这样做会错过比较感知器和正确类的输出
标签: matlab gradient perceptron