以下是示例。
这不起作用---
m = size(X, 1); % Number of training examples
p = zeros(m, 1);
p = sigmoid(X * theta); % sigmoid returns a mx1 dimensional vector
for i = 1:m
if ( p(i) >= 0.5)
p(i) = 1; % overwrite whatever value in p(i)
endif
end
以下作品---
m = size(X, 1); % Number of training examples
p = zeros(m, 1);
sig = sigmoid(X * theta);
for i = 1:m
if ( sig(i) >= 0.5)
p(i) = 1;
endif
end
第一个例子给出了浮点数而不是1或0。 目标是为满足条件的每个条目在m行中存储1个'p'。通过编程逻辑,第一个和第二个应该给出相同的结果,因为我只是覆盖满足if条件的条目,对吧?我错过了什么吗?
答案 0 :(得分:0)
您的第一个示例执行以下操作:"在X上调用sigmoid并替换所有值> 0.5与1"
m = size(X, 1);
p = zeros(m, 1);
## Here you overwrite your entire p vector do the line above has no effect
p = sigmoid(X * theta);
for i = 1:m
if ( p(i) >= 0.5)
p(i) = 1; % overwrite whatever value in p(i)
endif
end
更简单的矢量化方式是:
p = sigmoid(X * theta);
p(p>0.5) = 1;
你的第二个例子用零初始化p
并且如果sigmoid返回>则将元素设置为1。 0.5。哪个会被矢量化(是的,真的只有一行......)
p = sigmoid(X * theta) >= 0.5;
我希望你现在看到你的逻辑问题