机器学习(一)梯度下降算法
生活随笔
收集整理的這篇文章主要介紹了
机器学习(一)梯度下降算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一?梯度下降算法理論知識
梯度下降算法分為批度下降算法和隨機下降算法。批度下降算法遍歷全部數據適合高維數據的處理,但計算速度慢。隨機梯度下降算法每次只對一個樣本進行訓練。所以計算速度較快,但是由于選取的樣本少不一定是梯度下降最快的地方,所以可能得不到局部最優值。此外基于這兩種算法衍生出了一些改進的算法,比如小批量梯度下降算法。
梯度下降算法是基于最小均方誤差準測進行計算的,主要的推導過程如下圖所示
二 梯度下降算法matlab代碼實現
數據下載
2.1批量梯度下降算法
此段代碼的功能是根據年齡預測身高。屬于監督學習
clear all; close all; clc; x = load('ex2x.dat'); %裝入樣本輸入特征數據到x,年齡 y = load('ex2y.dat'); %裝入樣本輸出結果數據到y,身高 figure('name','線性回歸-批量梯度下降法'); plot(x,y,'o') %把樣本在二維坐標上畫出來 xlabel('年齡') %x軸說明 ylabel('身高') %y軸說明 m = length(y); % 樣本數目 x = [ones(m, 1), x]; % 輸入特征增加一列,x0=1 theta = zeros(size(x(1,:)))' % 初始化theta MAX_ITR = 1500;%最大迭代數目 alpha = 0.07; %學習率 i = 0; while(i<MAX_ITR)grad = (1/m).* x' * ((x * theta) - y);%求出梯度theta = theta - alpha .* grad;%更新thetaif(i>2)delta = old_theta-theta;delta_v = delta.*delta;if(delta_v<0.000000000000001)%如果兩次theta的內積變化很小,退出迭代break;endendold_theta = theta;i=i+1; end i theta predict1 = [1, 3.5] *theta predict2 = [1, 7] *theta hold on plot(x(:,2), x*theta, '-') % x現在是一個2列的矩陣 legend('訓練數據', '線性回歸')%標記每個數據設置2.2 隨機梯度下降算法
運行后可以發現最大迭代次數已經增加到了15000,1500次迭代不能得到收斂的點,可見隨機梯度下降法,雖然計算梯度時候,工作量減小,但是因為不是最佳的梯度下降方向,可能會使得迭代次數增加:?
clear all; close all; clc; x = load('ex2x.dat'); y = load('ex2y.dat'); figure('name','線性回歸-隨機梯度下降法'); plot(x,y,'o') xlabel('年齡') %x軸說明 ylabel('身高') %y軸說明 m = length(y); % 樣本數目 x = [ones(m, 1), x]; % 輸入特征增加一列 theta = zeros(size(x(1,:)))';%初始化thetaMAX_ITR = 15000;%最大迭代數目 alpha = 0.01;%學習率 i = 0; while(i<MAX_ITR)%j = unidrnd(m);%產生一個最大值為m的隨機正整數j,j為1到m之間j = mod(i,m)+1;%注意梯度的計算方式,每次只取一個樣本數據,通過輪轉的方式取到每一個樣本。grad = ((x(j,:)* theta) - y(j)).*x(j,:)';theta = theta - alpha * grad;if(i>2)delta = old_theta-theta;delta_v = delta.*delta;if(delta_v<0.0000000000000000001)break;endendold_theta = theta;i=i+1; end i theta predict1 = [1, 3.5] *theta predict2 = [1, 7] *theta hold on plot(x(:,2), x*theta, '-') legend('訓練數據', '線性回歸')2.3小批量梯度下降算法
clear all; close all; clc; x = load('ex2x.dat'); y = load('ex2y.dat'); figure('name','線性回歸-小批量梯度下降法') plot(x,y,'o') xlabel('年齡') %x軸說明 ylabel('身高') %y軸說明 m = length(y); % 樣本數目x = [ones(m, 1), x]; % 輸入特征增加一列 theta = zeros(size(x(1,:)))'; %初始化thetaMAX_ITR = 15000;%最大迭代數目 alpha = 0.01;%學習率 i = 0; b = 5; %小批量的數目 while(i<MAX_ITR)j = mod(i,m-b)+1;%每次計算梯度時候,只考慮b個樣本數據grad = (1/b).*x(j:j+b,:)'*((x(j:j+b,:)* theta) - y(j:j+b));theta = theta - alpha * grad;if(i>2)delta = old_theta-theta;delta_v = delta.*delta;if(delta_v<0.0000000000000000001)break;endendold_theta = theta;i=i+b; end i theta predict1 = [1, 3.5] *theta predict2 = [1, 7] *theta hold on plot(x(:,2), x*theta, '-') legend('訓練數據', '線性回歸')?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的机器学习(一)梯度下降算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 向后转动作要领_跆拳道腿法之转身侧踢动作
- 下一篇: 华为鲁勇:云市场进入新阶段,千行百业数字