%%
%%講了推理,以及主要收穫為,原來是對損失函式求導。不過公式不是很對,因為
clear
x=load('./ex4data/ex4x.dat');
y=load('./ex4data/ex4y.dat');
[m,n]=size(x);
x=[ones(m,1),x];
figure
pos=find(y);neg=find(y==0);
plot(x(pos,2),x(pos,3),'+');
hold on
plot(x(neg,2),x(neg,3),'o');
hold on
xlabel('exam 1 score');
ylabel('exam 2 score');
%上面是畫資料點,下面**是logistics回歸
theta=zeros(n+1,1); %回歸係數
%直接令logistic回歸的值為0.5,則可以得到e的指數為0,即:
%theta(1)*1+theta(2)*plot_x+theta(3)*plot_y=0,解出plot_y即可。
%g=inline('1.0./(1.0+exp(-z))');
%max_itr=1500;%迭代次數
%alpha=0.01; %學習率
% for num_iterations=1:max_itr %懂了上標是什麼意思的,原來是指維度,即對於乙個變數來說指取了
% grad=(1/(m))*x'*(g(x*theta)-y);%第幾個例項,一般來說,一張影象是乙個變數,影象的維度表示資料
% theta=theta-alpha*grad; %換句話說,譬如這裡的年齡是個變數,取了幾個值,代表著維度。
% %矩陣相乘就是求和了
% end
max_itr = 7;
j = zeros(max_itr, 1);
for i = 1:max_itr
% calculate the hypothesis function
z = x * theta;
%h = g(z);%轉換成logistic函式
h=1.0./(1.0+exp(-z));
grad = (1/m).*x' * (h-y);%梯度的向量表示法 g(i) = sum(dif.* x(:, i), 1)/m; 注意這是點乘。運算是對應的
h = (1/m).*x' * diag(h) * diag(1-h) * x;%hessian矩陣的向量表示法
j(i) =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h));%損失函式的向量表示法
for ii=1:(n+1)
for jj=1:(n+1)
h1(ii,jj) = sum((h.*(ones(m,1)-h)).* x(:, ii).*x(:,jj), 1)/m;%多個負號,按理是要負號的啊
endend %這個挺好,這樣對應公式還是挺快的 。
theta = theta - inv(h1)*grad;
end%畫圖
plot_x = [min(x(:,2))-2, max(x(:,2))+2];
plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));
plot(plot_x, plot_y)
legend('admitted', 'not admitted', 'decision boundary')
hold off
另乙個.m
%%
%%講了推理,以及主要收穫為,原來是對損失函式求導。不過公式不是很對,因為
clear
x=load('./ex4data/ex4x.dat');
y=load('./ex4data/ex4y.dat');
[m,n]=size(x);
x=[ones(m,1),x];
figure
pos=find(y);neg=find(y==0);
plot(x(pos,2),x(pos,3),'+');
hold on
plot(x(neg,2),x(neg,3),'o');
hold on
xlabel('exam 1 score');
ylabel('exam 2 score');
%上面是畫資料點,下面**是logistics回歸
theta=zeros(n+1,1); %回歸係數
%直接令logistic回歸的值為0.5,則可以得到e的指數為0,即:
%theta(1)*1+theta(2)*plot_x+theta(3)*plot_y=0,解出plot_y即可。
%g=inline('1.0./(1.0+exp(-z))');
z=x*theta;
h=1.0./(1.0+exp(-z));
%max_itr=1500;%迭代次數
%alpha=0.00001; %學習率
alpha=[0.130082343771923,5.00882567970842,8.78832968558437;
5.00882567970842,201.254613548375,335.714823876853;
8.78832968558437,335.714823876853,601.801497555077]; %說明整體是對的,但是學習率的變化影響了。
for num_iterations=1:1000
% z=x*theta;
% h=1.0./(1.0+exp(-z));
grad=(1/(m))*x'*(h-y);
for ii=1:(n+1)
for jj=1:(n+1)
h1(ii,jj) = sum((h.*(ones(m,1)-h)).* x(:, ii).*x(:,jj), 1)/m;%多個負號,按理是要負號的啊
endend %這個挺好,這樣對應公式還是挺快的 。
%theta=theta-h1\grad;
theta=theta-alpha\grad;
%矩陣相乘就是求和了
end
%畫圖plot_x = [min(x(:,2))-2, max(x(:,2))+2];
plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));
plot(plot_x, plot_y)
legend('admitted', 'not admitted', 'decision boundary')
hold off
模式識別與機器學習(2)
參考部落格 隨機梯度下降 clear all x load ex2data ex2x.dat y load ex2data ex2y.dat x 1.15 1.9 3.06 4.66 6.84 7.95 10,14,16 x power x,0.5 y power x,0.5 m length y ...
模式識別與機器學習(5)
clear x load ex5data ex5linx.dat y load ex5data ex5liny.dat x load linear regression ex2data ex2x.dat y load linear regression ex2data ex2y.dat plot x...
PRML筆記 模式識別與機器學習
prml筆記 notes on pattern recognition and machine learning.pdf 知乎pattern recognition and machine learning這本書怎麼看?介紹了概率論,區分了經典概率論 frequentist 和 bayesian理論...