網站首頁 編程語言 正文
最小二乘法
大部分的最小二乘法公式推導,都是使用的 代價函數偏導 的方式來求得的,在這里首先展示如何通過代價函數求偏導的方式得到最小二乘公式,再展示李揚老師講解的如何由向量到子空間的距離得來最小二乘法公式。
代價函數與最小二乘法
假設我們的擬合結果為:
則平方損失函數為:
平方損失函數的形式只有極小值,沒有極大值,我們要使代價函數最小,我們要找到其極值點,即偏導均為0的點,代價函數對于各參數偏導如下:
令偏導為0得:
實際上若是令:
則有:
向量到子空間的距離與最小二乘法
最小二乘法與多項式擬合
以下展示自己編寫最小二乘法擬合多項式與MATLAB自帶函數 polyfit 擬合多項式的參數對比,注意,為了和MATLAB自帶函數保持一致,θ向量變為第一個參數為 θn??,最后一個參數為 θo? , X 矩陣也做了相應的調整:
% 最小二乘法多項式擬合 % 原三次函數+隨機噪聲 f=@(x)x.^3+6.*x.^2-2.*x+4+(rand(size(x))-.5).*20; % 構造原始數據 x=-5:.1:5; y=f(x); % 自己寫一個最小二乘 n=3;% 最高次數為三次 X=(x').^(n:-1:0); theta1=((X'*X)\X'*y')'; % MATLAB自帶多項式擬合 theta2=polyfit(x,y,n); % 輸出對比 disp(theta1) disp(theta2) % 一個小技巧,下面的寫法能夠快速將 % 參數向量變成有關x的多項式匿名函數 func=matlabFunction(poly2sym(theta1));
?theta1=
0.9686 6.0178 -1.8845 4.3362
theta2=
0.9686 6.0178 -1.8845 4.3362
多項式擬合結果繪圖:
% 繪圖部分 % 保持坐標區域不刷新并添加網格 ax=gca;hold(ax,'on');grid(ax,'on'); % 繪制原數據點和擬合結果 plot(x,y,'o','MarkerFaceColor',[94,142,179]./255); plot(x,func(x),'Color',[0,64,115]./255,'LineWidth',2); % 修飾一下 ax.FontName='cambria'; ax.LineWidth=1.5; ax.GridLineStyle='--'; ax.XColor=[1,1,1].*.3; ax.YColor=[1,1,1].*.3; ax.ZColor=[1,1,1].*.3;
最小二乘法與多元線性回歸
以下展示自己編寫最小二乘法進行多元線性回歸與MATLAB自帶函數?regress
?進行多元線性回歸的參數對比:
% 最小二乘法多元線性回歸 % 原二元函數+隨機噪聲 f=@(x1,x2) 3.*x1+4.*x2+5+(rand(size(x1))-.5).*10; % 構造原始數據 [x1,x2]=meshgrid(-5:.5:5,-5:.5:5); y=f(x1,x2); % 自己寫一個最小二乘 X=[x1(:),x2(:),ones(size(x1(:)))]; theta1=((X'*X)\X'*y(:)); % MATLAB多元線性回歸 theta2=regress(y(:),X); % 輸出對比 disp(theta1) disp(theta2) % 構造擬合結果的二元匿名函數 func=matlabFunction([sym('x1'),sym('x2'),1]*theta1);
theta1=
2.9285 4.0688 4.7520
theta2=
2.9285 4.0688 4.7520
多元線性回歸結果繪圖:
% 繪圖部分 % 保持坐標區域不刷新并添加網格 ax=gca;hold(ax,'on');grid(ax,'on'); % 繪制原數據點和擬合結果 mesh(x1,x2,func(x1,x2),'FaceColor','flat','FaceAlpha',.8) scatter3(x1(:),x2(:),y(:),20,'filled') % 修飾一下 ax.FontName='cambria'; ax.LineWidth=1.5; ax.GridLineStyle='--'; ax.XColor=[1,1,1].*.3; ax.YColor=[1,1,1].*.3; ax.ZColor=[1,1,1].*.3; view(30,20)
原文鏈接:https://blog.csdn.net/slandarer/article/details/122373147
相關推薦
- 2022-04-28 shell命令執行hive腳本(hive交互)_linux shell
- 2022-10-19 React?Hook實現對話框組件_React
- 2022-04-18 python?dataframe實現統計行列中零值的個數_python
- 2022-09-18 C++如何實現二叉樹鏈表_C 語言
- 2023-05-30 Python賦值邏輯的實現_python
- 2022-07-22 idea 編譯項目后target包沒有resources文件
- 2022-08-12 k8s?series初級calico使用介紹_云其它
- 2022-12-24 fetch()函數說明與使用方法詳解_基礎知識
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支