天天看點

監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:

分類

模型如下:

監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
  1. 回歸問題:學習的結果是連續的,比如房價等等
  2. 分類問題:學習的結果是非連續的,分成某幾個類

梯度下降

例子:

監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:

條件:

  • 對于輸入X有n個特征值。X = { x1,x2,x3,x4,.......,xn x 1 , x 2 , x 3 , x 4 , . . . . . . . , x n }
  • 一共有m組輸入。 X1,X2,......,Xm X 1 , X 2 , . . . . . . , X m

結果:

  • 根據給出的資料得到函數 hθ h θ (x),關于 θ θ 的一個函數
  • 監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:

假設:

  • 監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
  • J(θ) J ( θ ) 主要用來描述該方程在樣本點的逼近程度

特點:

  • 都具有局部最小值
  • 最後的結果并不一定是總體的最小值

1.批梯度下降:

  • 思路:

    先初始化 θ θ = 0向量,然後通過學習,不斷改變 θ θ 使 Jθ J θ 不斷減小,緻使方程不斷在學習點逼近真值。(至于為什麼要選擇最小二乘法和為什麼這個值有極限,稍後給出證明)

  • 疊代方程:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    其中:
    • α α 決定下降速度
  • 推導方程:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    疊代算法:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
  • 注意:
    • 該算法每次疊代檢視了所有樣本,知道 θ θ 收斂
    • 收斂的意思是:誤差在允許的範圍内就沒有繼續發生變化了

2.增量梯度下降:

  • 疊代算法:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
  • 注意:
    • 每次疊代隻用到了第 i i 個樣本

正規方程組

1.矩陣導數

  • 表示:

    對矩陣A的導數,函數ff是一個由矩陣到實數的映射

    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
  • 矩陣的迹:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
  • 相關的性質:
    • 交換性,要就矩陣的乘法有意義:
      監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    • 監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    • 監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:

2.最小二乘法

令 J(θ) J ( θ ) 偏導為 0 我們可以直接求出 θ θ , 推導過程:

監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:

機率論解釋

1.問題:

為什麼線上性回歸中我們要用最小二乘作為誤差項,而不用三次方,四次方之類的。

2.解答:

  • 設:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    ϵ(i) ϵ ( i ) 是誤差項, ϵ(i) ϵ ( i ) ~ N(0,σ2) N ( 0 , σ 2 )
  • 是以:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    即: y(i) y ( i ) | x(i);θ x ( i ) ; θ ~ N(θTx(i),σ2) N ( θ T x ( i ) , σ 2 )
  • 用最大概然法:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
    監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
  • 了解:

    我們把輸入X,X = { x1,x2,x3,x4,.......,xn x 1 , x 2 , x 3 , x 4 , . . . . . . . , x n }看做一組樣本,而 Y Y 是一組樣本對應的觀測值,而且由前面的推導我們可以知道該事件是符合y(i)y(i)| x(i);θ x ( i ) ; θ ~ N(θTx(i),σ2) N ( θ T x ( i ) , σ 2 ) 。是以利用最大似然法我們可以求出未知參數 θ θ ,即最大化 L(θ) L ( θ ) 。

    • 在梯度下降中。最大化 L(θ) L ( θ ) ,就是最小化
      監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:
      即 J(θ) J ( θ ) ,是以我們讓 J(θ) J ( θ ) 的偏導作為增量更新 θ θ ,最後 J(θ) J ( θ ) 的偏導近似為0時,我們認為疊代結束。
    • 在上面最小二乘法中。最大化 L(θ) L ( θ ) ,也就是令 l(θ) l ( θ ) 的偏導為0,是以我們可以直接求 l(θ) l ( θ ) 的偏導為0,求出 θ θ .
      監督學習&回歸問題(Regression)分類梯度下降正規方程組機率論解釋代碼實作:

代碼實作:

  主要檔案:

  

  • test1相當于主要檔案
  • GradientDecent主要是梯度下降更新 θ θ
  • ComputeCost主要用來根據給出的 θ θ 計算出代價 J J <script type="math/tex" id="MathJax-Element-39">J</script>

test1函數:

%% part0; 裝載資料
data = load('ex1data1.txt');
x = data(:,);
y = data(:,);
m = length(y);

%%    part1: 初始化,畫出離散的點
plot(x,y,'rx','Markersize',);
ylabel('profit in $10,000s');
xlabel('population in $10,000s');
pause;

%%  part2:run gradient descent,view theta

x = [ones(m,), data(:,)];
theta = zeros(,);
iterations  = ;
alpha = ;
computeCost(x, y, theta)
theta = gradientDescent(x, y, theta, alpha, iterations);
x2 = :;
y2 = theta(,) + theta(,) * x2;
plot(x(:,),y,'rx',x2,y2,'blu','Markersize',);
ylabel('profit in $10,000s');
xlabel('population in $10,000s');
pause;

%% Part 4: Visualizing J(theta_0, theta_1) 

%給出相應的theta0,theta1的連續值100個,組成100*100的theta矩陣,根據每個theta組合算出cost J形成一個三維圖形
%theta0, theta1, J。友善檢視J的下降方向

fprintf('Visualizing J(theta_0, theta_1) ...\n')

% Grid over which we will calculate J
theta0_vals = linspace(-, , );
theta1_vals = linspace(-, , );

% initialize J_vals to a matrix of 0's
J_vals = zeros(length(theta0_vals), length(theta1_vals));

% Fill out J_vals
for i = :length(theta0_vals)
    for j = :length(theta1_vals)
      t = [theta0_vals(i); theta1_vals(j)];    
      J_vals(i,j) = computeCost(x, y, t);
    end
end


% Because of the way meshgrids work in the surf command, we need to 
% transpose J_vals before calling surf, or else the axes will be flipped
J_vals = J_vals';
% Surface plot
figure;
surf(theta0_vals, theta1_vals, J_vals)
xlabel('\theta_0'); ylabel('\theta_1');

% Contour plot
figure;
% Plot J_vals as 15 contours spaced logarithmically between 0.01 and 100
contour(theta0_vals, theta1_vals, J_vals, logspace(-, , ))
xlabel('\theta_0'); ylabel('\theta_1');
hold on;
plot(theta(), theta(), 'rx', 'MarkerSize', , 'LineWidth', );


           

GradientDecent函數:

function [theta,J_history] = gradientDescent(x, y, theta, alpha, num_iters)
%GRADIENTDESCENT Performs gradient descent to learn theta
%   theta = GRADIENTDESENT(X, y, theta, alpha, num_iters) updates theta by 
%   taking num_iters gradient steps with learning rate alpha

% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, );
thetas = zeros(num_iters,);

for iter = :num_iters

    % ====================== YOUR CODE HERE ======================
    % Instructions: Perform a single gradient step on the parameter vector
    %               theta. 
    %
    % Hint: While debugging, it can be useful to print out the values
    %       of the cost function (computeCost) and gradient here.
    %

    for j = :
        dec = ;
        for i = :m
            dec = dec + (x(i,:)*theta - y(i,)) * x(i,j);
        end
        theta(j,) = theta(j,) - alpha*dec/m;
    end

    % ============================================================
    % Save the cost J in every iteration    
    J_history(iter) = computeCost(x, y, theta);

end
end
           

ComputeCost 函數:

function J = computeCost(x, y, theta)
%COMPUTECOST Compute cost for linear regression
%   J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
%   parameter for linear regression to fit the data points in X and y

% Initialize some useful values
m = length(y); % number of training examples

% You need to return the following variables correctly 
J = ;
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
%               You should set J to the cost.
for i= : m
    J = J + (y(i,:)- x(i,:)*theta)^;
end

J = J /(*m);

% =========================================================================

end
           

代碼

百度雲下載下傳

其它平台隻是資訊轉發(留言可能看不到),歡迎同學們到個人blog交流:https://faiculty.com/

繼續閱讀