function plotdata(x, y)
figure; hold on;
pos = find(y==1);%返回向量y中數值為1的位置,pos也為向量
neg = find(y==0);%返回向量y中數值為0的位置,neg也為向量
%繪製y==1的點,使用紅+表示
plot(x(pos,1),x(pos,2),'r+','linewidth',2,'markersize',7);
%繪製y==0的點,使用藍o表示
(2)計算代價值和梯度
補充完整sigmoid函式。
function g = sigmoid(z)
g = zeros(size(z));
g = 1./(1+exp(-z));
end
補充完整costfunction函式
function [j, grad] = costfunction(theta, x, y)
m = length(y); % number of training examples
j = 0;
grad = zeros(size(theta));
j = ((log(sigmoid(x*theta)))'*y + (log(1-sigmoid(x*theta)))'*(1-y))/(-m);
grad = (sigmoid(x*theta)-y)'*x/m;
end
計算出theta為零向量的代價值和梯度分別為:
cost at initial theta (zeros): 0.693147
gradient at initial theta (zeros):
-0.100000
-12.009217
-11.262842
-0.1000
-12.0092
-11.2628
(3)使用fminunc函式進行優化
options = optimset('gradobj', 'on', 'maxiter', 400);
[theta, cost] = fminunc(@(t)(costfunction(t, x, y)), initial_theta, options);
% print theta to screen
fprintf('cost at theta found by fminunc: %f\n', cost);
fprintf('theta: \n');
fprintf(' %f \n', theta);
fprintf(' -25.161\n 0.206\n 0.201\n');
cost at theta found by fminunc: 0.203506
theta:
-24.933057
0.204408
0.199619
-25.161
0.206
0.201
(4)繪製決策邊界
function plotdecisionboundary(theta, x, y)
plotdata(x(:,2:3), y);
hold on;
if size(x, 2) <= 3
% only need 2 points to define a line, so choose two endpoints
plot_x = [min(x(:,2))-2, max(x(:,2))+2];
% calculate the decision boundary line
plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1));
% plot, and adjust axes for better viewing
plot(plot_x, plot_y);
% legend, specific for the exercise
legend('admitted', 'not admitted', 'decision boundary');
axis([30, 100, 30, 100]);
else
% here is the grid range
u = linspace(-1, 1.5, 50);
v = linspace(-1, 1.5, 50);
z = zeros(length(u), length(v));
% evaluate z = theta*x over the grid
for i = 1:length(u)
for j = 1:length(v)
z(i,j) = mapfeature(u(i), v(j))*theta;
endend
z = z'; % important to transpose z before calling contour
% plot z = 0
% notice you need to specify the range [0, 0]
contour(u, v, z, [0, 0], 'linewidth', 2)
endhold off
end
決策邊界在本二元分類中實際為z = theta(1) *x0+ theta(2) *x1 + theta(3) x2 = 0(x0 =1)
解該方程得到 x2 = -1/theta(3)(theta(1) + theta(2) *x1)
獲得的圖形為:
(5)**函式和**準確率
完成predict函式:
function p = predict(theta, x)
m = size(x, 1); % number of training examples
p = zeros(m, 1);
p = sigmoid(x*theta) >=0.5;
end
計算資料[1 45 85]分類y = 1的概率:
prob = sigmoid([1 45 85] * theta);
fprintf(['for a student with scores 45 and 85, we predict an admission ' ...
'probability of %f\n'], prob);
fprintf('expected value: 0.775 +/- 0.002\n\n');
其輸出為:
for a student with scores 45 and 85, we predict an admission probability of 0.774324
expected value: 0.775 +/- 0.002
統計原始資料分類的準確率:
p = predict(theta, x);
fprintf('train accuracy: %f\n', mean(p == y) * 100);
fprintf('\n');
其輸出為:
train accuracy: 89.000000
吳恩達機器學習問題2
吳恩達課程中遇到的問題 第三週程式設計題 問題1 如果有大佬麻煩告知下 謝謝 就是為啥寫的 m,n size x 但是size x 是118 28,但是 m n 是 100 2?問題2 代價函式costfuction裡,為啥計算梯度grad的時候,明明公式是 最後乘的是x,但是 程式卻要寫成x 即x...
吳恩達機器學習筆記
為了解決實際生活中的問題,我們通常需要乙個數學模型。比如,小明有乙個房子 他想賣掉房子 為了知道房子的 小明收集了該地區近兩年的房屋交易 他發現房屋 與房屋大小呈正相關,所以他畫了了一幅圖 小明的房屋大小用紅色的 代替。可見和小明房屋一樣大小的房子並不存在,而類似的房屋 又有很大差別,如此小明決定用...
吳恩達機器學習感悟
吳恩達機器學習,斯坦福2014筆記 由8.2 神經元和大腦想到的 神經重連實驗,比如眼睛連到聽覺皮層,則聽覺皮層學會了看 眼睛連到觸覺皮層,則觸覺皮層學會了看 舌頭上加攝像頭關聯的電極陣列,則負責舌頭感知的皮層學會了看。這寫neuron re wiring實驗,給出的結論是大腦各區使用的是同一種演算...