模式識別與機器學習(4)

2021-07-22 02:24:38 字數 3418 閱讀 5235

%%

%%講了推理,以及主要收穫為,原來是對損失函式求導。不過公式不是很對,因為

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理論...