MATLAB之线性回归,逻辑回归,最小二乘法,梯度下降,贝叶斯,最大似然估计
文章目錄
- 線性回歸(定義域(-∞,+∞),值域(-∞,+∞),即輸入輸出連續)
- 線性回歸/最小平方誤差理論
- MATLAB之線性回歸/最小平方誤差
- 損失函數/代價函數求導法求線性回歸
- 一次擬合求線性系統延時
- 邏輯回歸(logistic regression)/廣義線性回歸模型(定義域(-∞,+∞),值域一般離散)
- 概念,特點,用途
- 什么是邏輯回歸
- 邏輯回歸的優缺點
- 邏輯回歸和多重線性回歸的區別
- 邏輯回歸用途
- 概率知識預備
- 隨機變量,隨機樣本
- 條件概率公式, 乘法公式, 全概率公式
- 貝葉斯公式
- 極大似然估計
- 梯度下降法
- 學習鏈接
- matlab實現梯度下降功能,求函數f=x^2的最小值
- 邏輯回歸算法
- 學習鏈接
- Regression 常規步驟
- 構造預測函數h(x)
- 邏輯回歸2分類
線性回歸(定義域(-∞,+∞),值域(-∞,+∞),即輸入輸出連續)
線性回歸/最小平方誤差理論
回歸分析中,只包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關系,則稱為多元線性回歸分析。
最小二乘法:擬合曲線和數據的誤差平方和最小。
實驗數據: yi=f(xi) (i=0,1…m)
線性無關函數族: ψ = span{ψ0(x),ψ1(x),…ψn(x)}
一般可取線性無關函數族:= span{1,x,…xn}
擬合曲線:S(x) = a0ψ0(x)+a0ψ0(x)+…anψn(x) (n<m)
加權公式:
式中:k=0,1,…n. 如若沒給權,默認權=1
在線性回歸模型中,輸出一般是連續的,例如: y=f(x)=ax+b
實質是利用最小二乘法求系數。
MATLAB之線性回歸/最小平方誤差
% 功能:采用最小二乘法實現最小平方誤差(least squares error)/線性回歸% 編輯者:Heart_sea % 日期:2019,4,28 clear; clc; close all; % ================= import data ==========================================x = [1,2,3,4,5]';%x坐標y = [4,4.5,6,8,8.5]';%y坐標w = [1 1 1 1 1]';% 權,可以理解為在對應的點上重復觀測的次數 % ================= 調用 matlab 函數求系數(不加權) ======================= % coef=polyfit(x,y,m); x, y為已知數據點向量, 分別表示橫,縱坐標, % m表示擬合多項式的次數,結果返回m次擬合多項式系數,從高次到低次存放n = 1; %n次擬合coef = polyfit(x,y,n); ybest = polyval(coef,x); %調用MATLAB函數 % a0=coef(1); a1=coef(2); % ybest=a0*x+a1; % 由線性回歸產生的一階方程式 % ======================== 源方法求系數(加權后) ============================ % 一般可取線性無關函數族:= span{1,x,…xn} % 這里是線性回歸,可取線性函數作擬合曲線,S = a0+a1*x % 取fai0 = 1, fai1 = xX0=zeros(n+1,n+1); Y0=zeros(n+1,1); %構造矩陣X0 for k0=1:n+1 % 換列for n0=1:n+1 % 換行X0(n0,k0)=sum(w.*x.^(k0+n0-2));end end %構造列矩陣y0 for n0 = 1:n+1Y0(n0,1) = sum(w.*y.*x.^(n0-1)); end % 矩陣相除求系數 a = X0\Y0; ybest_w = a(1); %根據求得的系數初始化并構造多項式方程 ybest_w = a(1)+a(2).*x for ind = 1:nybest_w = ybest_w+a(ind+1)*x.^(ind); end% =========== figure =====================================================plot(x,ybest_w,x,ybest,x,y,'o')legend('加權后','加權前','原數據')title('Linear regression estimate')grid;損失函數/代價函數求導法求線性回歸
% 功能:利用損失函數求導,實現Linear_regression_algorithm 功能% 編輯者:Heart_sea % 日期:2019,5,6clear; % 清除工作區 clc; % 清除命令區 close all; % 清除figure% ======================= preferences set ================================= X = [1,2,3,4,5]';%x坐標 y = [4,4.5,6,8,8.5]';%y坐標 onesx = ones(length(X),2); onesx(:, 2) = X; m = size(onesx,1); % m也就是樣本數,size(A,1)返回的是矩陣A所對應的行數 theta0 = 0; % 初始化 theta1 = 0; % 初始化 theta = [theta0, theta1]';% 回歸系數 alpha = 0.01; % 步長 Steps = 10000; % 訓練步數 % ======================= Linear_regression_algorithm ================================= for k = 1:Stepstheta = theta - (alpha/m) * (deltaFunction(onesx, y, theta))';costFunc(k) = costFunctionJ(onesx, y, theta); end % =================求假設函數 x = 0:max(X); regressionCurv = theta(1) + theta(2) .* x; % =================顯示theta disp(theta); % ======================= figure ================================= figure; subplot(121); scatter(X,y,'rx'); hold on; plot(x,regressionCurv,'b') ; title('假設函數/回歸曲線')subplot(122); plot(1:Steps,costFunc); title('損失函數')% ======================= 假設函數中遞推求和部分 =========================== function sum = deltaFunction(X, y, theta)%此處的X是傳入的onesMatsum = 0;for ind = 1:size(X,1)sum = sum + (X(ind,:) * theta - y(ind)) * X(ind,:);end end % ======================= %代價函數 =======================================function J = costFunctionJ(X, y, theta)sqrErrors = (X * theta - y).^2;m = size(X,1);J = 1/(2*m) * sum(sqrErrors); end上述兩種方法,系數相同。(法二訓練步數1w步)
一次擬合求線性系統延時
% 功能:通過一次擬合的一次系數求線性系統的延時% 編輯者:Heart_sea % 日期:2019,4,26clear; clc; close all; % ======================= import data =================================== load('H和f.mat') % ======================= polyfit函數 =================================== phi = unwrap(angle(H_temp)); % 相位 p = polyfit(f, phi,1); % 相位作最小二乘法的一次擬合 % ======================= figure =================================== plot(f,phi,'r-'); % 相位曲線 hold on plot(f,p(1).*f+p(2),'g--') % 相位線性回歸曲線 legend('相位曲線','相位線性回歸曲線'); % 可以發現相位曲線和它的線性回歸曲線接近重合delay1 = (p(1).*f+p(2))./(-2*pi*f); % 用相位線性回歸曲線求延時 delay2 = phi./(-2*pi.*f); % 用相位公式求延時 % p(2)./(-2*pi*f)數值較小,可約去,故線性相位可用下式估計 delay = p(1)./(-2*pi);figure; plot(f,delay1); hold on; plot(f,delay2) legend('用相位線性回歸曲線求延時','用相位公式求延時');邏輯回歸(logistic regression)/廣義線性回歸模型(定義域(-∞,+∞),值域一般離散)
概念,特點,用途
什么是邏輯回歸
邏輯回歸就是這樣的一個過程:面對一個回歸或者分類問題,建立代價函數,然后通過優化方法迭代求解出最優的模型參數,然后測試驗證我們這個求解的模型的好壞。
Logistic回歸雖然名字里帶“回歸”,但是它實際上是一種分類方法,主要用于兩分類問題(即輸出只有兩種,分別代表兩個類別)
回歸模型中,y是一個定性變量,比如y=0或1,logistic方法主要應用于研究某些事件發生的概率
邏輯回歸的優缺點
優點:
1)速度快,適合二分類問題
2)簡單易于理解,直接看到各個特征的權重
3)能容易地更新模型吸收新的數據
缺點:
對數據和場景的適應能力有局限性,不如決策樹算法適應性那么強
邏輯回歸和多重線性回歸的區別
Logistic回歸與多重線性回歸實際上有很多相同之處,最大的區別就在于它們的因變量不同,其他的基本都差不多。正是因為如此,這兩種回歸可以歸于同一個家族,即廣義線性模型(generalizedlinear model)。
這一家族中的模型形式基本上都差不多,不同的就是因變量不同。這一家族中的模型形式基本上都差不多,不同的就是因變量不同。
·如果是連續的,就是多重線性回歸
·如果是二項分布,就是Logistic回歸
·如果是Poisson分布,就是Poisson回歸
·如果是負二項分布,就是負二項回歸
邏輯回歸用途
·尋找危險因素:尋找某一疾病的危險因素等;
·預測:根據模型,預測在不同的自變量情況下,發生某病或某種情況的概率有多大;
·判別:實際上跟預測有些類似,也是根據模型,判斷某人屬于某病或屬于某種情況的概率有多大,也就是看一下這個人有多大的可能性是屬于某病。
概率知識預備
隨機變量,隨機樣本
隨機變量:試驗之前不能預知,取值隨實驗結果而定,而試驗的結果有一定的概率。
樣本定義:
設X是具有分布函數F的隨機變量,若X1, X2, X3,… Xn是具有同一分布函數F的、相互獨立的隨機變量,則稱X1, X2, X3,… Xn為從分布函數F得到的容量為n的簡單隨機樣本,簡稱樣本。他們的觀察值x1, x2,…xn稱為樣本值。
可以將樣本看成是一個隨機變量。
條件概率公式, 乘法公式, 全概率公式
(1)條件概率公式
設A,B是兩個事件,且P(B)>0,則在事件B發生的條件下,事件A發生的條件概率(conditional probability)為:
P(A|B)=P(AB)/P(B)(2)乘法公式
1.由條件概率公式得:
P(AB)=P(A|B)P(B)=P(B|A)P(A)上式即為乘法公式;
2.乘法公式的推廣:對于任何正整數n≥2,當P(A1A2…An-1) > 0 時,有:
P(A1A2...An-1An)=P(A1)P(A2|A1)P(A3|A1A2)...P(An|A1A2...An-1)(3)全概率公式
1). B1,B2…兩兩互斥,即 Bi ∩ Bj = ? ,i≠j , i,j=1,2,…,且P(Bi)>0,i=1,2,…;
2). B1∪B2∪…=Ω ,則稱事件組 B1,B2,…是樣本空間Ω的一個劃分
設 B1,B2,…是樣本空間Ω的一個劃分,A為任一事件,則:
上式即為全概率公式(formula of total probability)
2.全概率公式的意義在于,當直接計算P(A)較為困難,而P(Bi),P(A|Bi) (i=1,2,…)的計算較為簡單時,可以利用全概率公式計算P(A)。思想就是,將事件A分解成幾個小事件,通過求小事件的概率,然后相加從而求得事件A的概率,而將事件A進行分割的時候,不是直接對A進行分割,而是先找到樣本空間Ω的一個個劃分B1,B2,…Bn,這樣事件A就被事件AB1,AB2,…ABn分解成了n部分,即A=AB1+AB2+…+ABn, 每一Bi發生都可能導致A發生相應的概率是P(A|Bi),由加法公式得
P(A)=P(AB1)+P(AB2)+....+P(ABn)=P(A|B1)P(B1)+P(A|B2)P(B2)+...+P(A|Bn)P(PBn)例:某車間用甲、乙、丙三臺機床進行生產,各臺機床次品率分別為5%,4%,2%,它們各自的產品分別占總量的25%,35%,40%,將它們的產品混在一起,求任取一個產品是次品的概率。
解: 25%,35%,40%分別為:P(B1), P(B2), P(B3) 5%,4%,2%分別為:P(A|B1), P(A|B2), P(A|B3) 根據全概率公式定義: P(A)=25%*5%+4%*35%+2%*40%=0.0345貝葉斯公式
1.與全概率公式解決的問題相反,貝葉斯公式是建立在條件概率的基礎上尋找事件發生的原因(即大事件A已經發生的條件下,分割中的小事件Bi的概率),設B1,B2,…是樣本空間Ω的一個劃分,則對任一事件A(P(A)>0),有
上式即為貝葉斯公式(Bayes formula),Bi 常被視為導致試驗結果A發生的”原因“,P(Bi)(i=1,2,…)表示各種原因發生的可能性大小,故稱先驗概率;P(Bi|A)(i=1,2…)則反映當試驗產生了結果A之后,再對各種原因概率的新認識,故稱后驗概率。有了后驗概率,就能對情況有了進一步了解。
例1:發報臺分別以概率0.6和0.4發出信號“∪”和“—”。由于通信系統受到干擾,當發出信號“∪”時,收報臺分別以概率0.8和0.2收到信號“∪”和“—”;又當發出信號“—”時,收報臺分別以概率0.9和0.1收到信號“—”和“∪”。求當收報臺收到信號“∪”時,發報臺確系發出“∪”的概率。
解:信號收到 U :A1信號收到 - :A2發報臺發出U:B1發報臺發出 -:B2 所以, P(B1) = 0.6, P(B2) = 0.4 P(A1|B1) = 0.8, P(A2|B1) = 0.2 P(A1|B2) = 0.1, P(A2|B2) = 0.9P(B1|A)=P(A|B1)P(B1) /(P(A1|B1)P(B1)+P(A1|B2)P(B2)) = (0.6*0.8)/(0.6*0.8+0.4*0.1)=0.923例2. 在夏季,某公園男性穿涼鞋的概率為1/2,女性穿涼鞋的概率為2/3,并且該公園中男女比例通常為2:1,問題:若你在公園中隨機遇到一個穿涼鞋的人,請問他的性別為男性或女性的概率分別為多少?
從問題看,就是上面講的,某事發生了,它屬于某一類別的概率是多少?即后驗概率。
設:
由已知可得:
男性和女性穿涼鞋相互獨立,所以
由貝葉斯公式算出:
極大似然估計
最大似然估計的目的就是:利用已知的樣本結果,反推最有可能(最大概率)導致這樣結果的參數值。
原理:極大似然估計是建立在極大似然原理的基礎上的一個統計方法,是概率論在統計學中的應用。極大似然估計提供了一種給定觀察數據來評估模型參數的方法,即:“模型已定,參數未知”。通過若干次試驗,觀察其結果,利用試驗結果得到某個參數值能夠使樣本出現的概率為最大,則稱為極大似然估計。
1.求極大似然函數估計值的一般步驟:
(1) 寫出似然函數; (2) 對似然函數取對數,并整理; (3) 求導數 ; (4) 解似然方程(1)寫出似然函數
由于樣本集中的樣本都是獨立分布,可以只考慮一類樣本集D,來估計參數向量θ。記已知的樣本集為:
D={x1,x2…xN}似然函數(linkehood function):聯合概率密度函數p(D|θ)稱為相對于{x1,x2…,xN}的θ的似然函數。
極大似然估計值:
而相應的統計量:
稱為參數θ的最大似然估計量,它是樣本集的函數
(2)求解似然函數
ML估計:求使得出現該組樣本的概率最大的θ值。
由于l(θ) 與 ln l(θ)在同一θ處取到極值,定義了對數似然函數:
在似然函數滿足連續、可微的正則條件下,極大似然估計量是下面微分方程的解:
2. 未知參數有多個(θ為向量)
則θ可表示為具有S個分量的未知向量:
記梯度算子:
若似然函數滿足連續可導的條件,則最大似然估計量就是如下方程的解。
方程的解只是一個估計值,只有在樣本數趨于無限多的時候,它才會接近于真實值。
例1:設樣本服從正態分布
則似然函數為:
它的對數:
求導,得方程組:
聯合解得:
梯度下降法
學習鏈接
https://baike.baidu.com/item/梯度下降/4864937?fr=aladdin
https://blog.csdn.net/walilk/article/details/50978864
https://baike.baidu.com/item/梯度下降/4864937?fr=aladdin例子
https://www.cnblogs.com/pinard/p/5970503.html
matlab實現梯度下降功能,求函數f=x^2的最小值
% 功能:實現梯度下降功能。求函數f=x^2的最小值% 編輯者:Heart_sea % 日期:2019,5,5clear; % 清除工作區 clc; % 清除命令區 close all; % 清除figure % ======================= preferences set ================================= % 設置步長為0.2,f_change為改變前后的y值變化,僅設置了一個退出條件。 syms x; %定義符號變量 step = 0.2; %設置步長 x = 2; %初始值 k = 0; %迭代記錄數 f_change = x^2; %函數初始化差值 f_current = x^2; %計算當前函數值 ezplot(@(x,y)y-x.^2) %畫出函數圖像 axis([-2,2,-0.2,3]) %固定坐標軸 hold on %使當前軸及圖像保持而不被刷新,準備接受此后將繪制的圖形while f_change>0.000000001 %設置條件,兩次計算的值之差小于某個數,跳出循環x=x-step*2*x; %-2*x(向量)為梯度反方向,step(標量)為步長f_change = f_current - x^2; %計算兩次函數值之差f_current = x^2 ; %重新計算當前的函數值plot(x,f_current,'ro','markersize',7) %標記當前的位置drawnow; %刷新屏幕pause(0.2);%程序暫停0.2秒繼續執行k=k+1; endhold off %使當前軸及圖像不再具備被刷新的性質,新圖出現時,取消原圖。即,關閉圖形保持功能。 fprintf('在迭代%d次后找到函數最小值為%e,對應的x值為%e\n',k,f_current,x)邏輯回歸算法
學習鏈接
https://blog.csdn.net/lookqlp/article/details/51161640
https://blog.csdn.net/mysteryhaohao/article/details/51240522
https://blog.csdn.net/weixin_30014549/article/details/52850870
https://www.cnblogs.com/sparkwen/p/3441197.html
https://www.cnblogs.com/Belter/p/6128644.html例子
https://blog.csdn.net/chibangyuxun/article/details/53148005公式推導重點
https://blog.csdn.net/lookqlp/article/details/51161640公式推導重點
https://www.cnblogs.com/HolyShine/p/6395965.html線性邊界與非線性邊界舉例
Regression 常規步驟
而第三步中常見的算法有:
構造預測函數h(x)
Logistic函數(或稱為Sigmoid函數),函數形式為:
z=0時,S(z) = 0.5
z>0時,S(z) > 0.5
z<0時,S(z) < 0.5
邏輯回歸2分類
% 功能:實現Logistic_regression_algorithm 功能% 編輯者:Heart_sea % 日期:2019,5,6clear; % 清除工作區 clc; % 清除命令區 close all; % 清除figure% ======================= preferences set ================================= x1 = [-5,-4,-2,-2,-3,-1,1,2,4,-6,7,2,2,4,3,5,7,6,8,7,11,12];%橫坐標 x2 = [-5,-2,-6,1,2,3,1,-2,-1,7,-4,5,8,6,6,4,7,2,4,5,-1,3]; %縱坐標 X = [x1;x2]'; y = [0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1]; XMat = ones(size(X,1),3); XMat(:,2:3) = X; % 建立X矩陣 theta0 = 0; % 2分類,有三個系數 theta1 = 0; theta2 = 0; theta = [theta0,theta1,theta2]'; alpha = 0.001; % 步長 Steps = 10000; % 訓練步數 m = size(X,1); % 樣本數量 % ======================= Logistic_regression_algorithm =================== for k = 1:Stepstheta = theta - alpha * deltaFunction(XMat,y,theta)';costFunc(k) = costFunctionJ(XMat,y,theta); end x = min(x1):0.001:max(x1); % sigmoid函數的取值為1/2,也就是說取閾值為0.5來劃分最后預測的結果 DecisionBoundary = (1/theta(3)) * (-theta(2)*x - theta(1)); % 線性邊界 % ======================= figure ========================================== figure; set(gcf, 'position', [100 200 1100 400]); subplot(121); scatter(x1(1:11),x2(1:11),'rx'); hold on; scatter(x1(12:22),x2(12:22),'ko'); hold on; plot(x,DecisionBoundary,'b');subplot(122); plot(1:Steps,costFunc); title('損失函數/代價函數') % ======================= 代價函數 ======================================== function J = costFunctionJ(X, y,theta)for i = 1:size(X,1)if y(i) == 0cost(i) = -log(1-sigmoid(X(i,:)*theta));elsecost(i) = -log(sigmoid(X(i,:)*theta));endendm = size(X,1);J = (1/m) * sum(cost); endfunction r = sigmoid(x)r = 1/(1+exp(-x)); end % ======================= 代價函數求偏導部分 =============================== function sum = deltaFunction(X, y, theta)sum = 0;for ind = 1:size(X,1)sum = sum + (sigmoid(X(ind,:) * theta) - y(ind)) * X(ind,:);end end總結
以上是生活随笔為你收集整理的MATLAB之线性回归,逻辑回归,最小二乘法,梯度下降,贝叶斯,最大似然估计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB之离散时间傅里叶变换DTFT
- 下一篇: tessorflow基本语法