基于偏最小二乘法PLS多輸入單輸出的回歸預測【MATLAB】

基于偏最小二乘法(PLS)多輸入單輸出的回歸預測【MATLAB】

在科學研究和工程實踐中,我們常常需要根據多個相關變量來預測一個關鍵結果。例如,根據氣溫、濕度、風速等多個氣象因素預測空氣質量指數,或根據多種原材料成分預測產品的最終性能。這類“多輸入單輸出”的預測任務,對模型處理復雜變量關系的能力提出了挑戰。本文將介紹一種經典且高效的統計建模方法——偏最小二乘法(Partial Least Squares, PLS),并展示如何在MATLAB中利用它實現精準的回歸預測。

為什么選擇偏最小二乘法(PLS)?

在處理多輸入數據時,變量之間往往存在高度相關性(即共線性),或者輸入變量的數量遠超樣本數量,這會使傳統回歸方法(如多元線性回歸)失效或表現不佳。偏最小二乘法正是為解決這類問題而設計的。

PLS的核心優勢在于它能夠:

  • 有效處理共線性:即使輸入變量之間高度相關,PLS也能穩定地提取信息,避免模型崩潰。
  • 降維與信息融合:它不直接使用原始變量,而是通過分析輸入與輸出之間的關系,構建出一組新的、互不相關的“綜合變量”(也稱潛變量或主成分)。這些綜合變量集中了原始數據中的關鍵信息,同時大幅降低了數據的復雜度。
  • 兼顧輸入與輸出的關系:與主成分分析(PCA)只關注輸入數據的方差不同,PLS在提取綜合變量時,會同時考慮這些變量對輸出目標的預測能力,確保降維過程“有的放矢”。

因此,PLS特別適合于變量多、相關性強、樣本量有限的復雜預測場景。

PLS的工作原理(直觀理解)

可以將PLS的運作過程想象成一場“信息提煉”之旅:

  1. 尋找最佳“投影方向”:PLS首先在輸入數據中尋找一個方向,使得沿著這個方向投影后得到的“綜合變量”,既能最大程度地概括輸入數據的變化,又能最好地解釋輸出變量的變化。
  2. 提取第一對“潛變量”:根據找到的方向,計算出輸入數據的第一個“綜合變量”和對應的輸出“綜合變量”。這兩個變量共同捕捉了數據中最核心的預測信息。
  3. 剝離已提取信息:將原始數據中已經被這對“潛變量”解釋的部分剔除,得到“殘差數據”。
  4. 重復過程:在殘差數據上重復上述步驟,尋找下一個最佳方向,提取第二對潛變量。這個過程可以持續進行,直到提取出足夠數量的潛變量,或者模型性能不再顯著提升。
  5. 建立預測模型:最終,PLS將這些潛變量與原始輸出變量建立回歸關系。當有新的輸入數據時,模型會先將其轉換為對應的潛變量,再通過回歸方程預測出最終的輸出結果。

整個過程自動化地完成了從高維、相關數據中提取關鍵預測因子,并建立簡潔高效模型的任務。

MATLAB實現步驟

在MATLAB中實現PLS回歸預測非常便捷,主要依賴其內置的統計和機器學習工具。以下是關鍵步驟:

  1. 數據準備

    • 使用 readtablexlsread 等函數加載數據。
    • 將數據劃分為訓練集和測試集(可使用 cvpartition)。
    • 對輸入和輸出數據進行歸一化處理(mapminmax 函數),這是PLS的標準預處理步驟。
  2. 模型訓練

    • 調用 plsregress 函數,輸入訓練集的輸入矩陣和輸出向量。
    • 指定需要提取的潛變量數量。這個數量可以通過交叉驗證(Cross-Validation)來確定,以避免過擬合。plsregress 函數會返回模型系數、得分、載荷等關鍵信息。
  3. 模型驗證與潛變量選擇

    • 利用交叉驗證結果,繪制預測誤差隨潛變量數量變化的曲線。
    • 選擇誤差最小或趨于穩定的潛變量數量,作為最終模型的配置。
  4. 預測與評估

    • 使用訓練好的模型對測試集進行預測。
    • 計算預測性能指標,如決定系數(R2)、均方根誤差(RMSE)等,評估模型的準確性。
    • 使用 plot 函數繪制預測值 vs. 真實值的散點圖,直觀檢驗模型效果。

應用場景

偏最小二乘法在眾多領域都有廣泛應用:

  • 化學與制藥:光譜數據分析(如近紅外、拉曼光譜),根據光譜特征預測物質濃度或成分。
  • 生物醫學:基因表達數據分析,預測疾病狀態或治療反應。
  • 工業過程控制:根據多個傳感器讀數預測關鍵產品質量指標。
  • 社會科學:分析調查問卷數據,預測用戶滿意度或行為傾向。

優勢與注意事項

優勢

  • 算法成熟穩定,理論基礎扎實。
  • 特別擅長處理小樣本、多變量、高共線性的數據。
  • 模型具有較好的可解釋性,可通過載荷分析了解各輸入變量的重要性。

注意事項

  • 數據標準化是必要步驟。
  • 潛變量數量的選擇至關重要,需通過交叉驗證等方法謹慎確定。
  • 主要適用于線性或近似線性關系;對于強非線性問題,可考慮結合核方法或其他非線性模型。

結語

偏最小二乘法(PLS)作為一種強大的多變量分析工具,在多輸入單輸出回歸預測任務中表現出色。它巧妙地解決了高維數據帶來的共線性和維度災難問題,通過提取關鍵潛變量,構建出簡潔而高效的預測模型。借助MATLAB強大的數據處理和統計分析功能,研究人員和工程師可以輕松實現PLS模型,快速從復雜數據中挖掘價值,為科學決策和工程優化提供有力支持。無論是初學者還是資深從業者,PLS都是一項值得掌握的重要技能。

部分代碼

%% 清空環境
warning off;          % 關閉警告提示
clc;                  % 清空命令行
clear;                % 清除工作區變量
close all;            % 關閉所有圖形窗口%% 讀取數據
res = xlsread('data.xlsx');  % 假設最后一列為輸出(標簽),其余為輸入(特征)
fprintf('數據已加載,共 %d 個樣本,%d 個特征。\n', size(res,1), size(res,2)-1);%% 劃分訓練集和測試集
train_ratio = 0.7;            % 訓練集占比
n = size(res, 1);             % 總樣本數
trainnum = floor(train_ratio * n);  % 訓練樣本數量
idx = randperm(n);            % 隨機打亂索引% 提取訓練集(輸入 P,輸出 T),并轉置為 【特征×樣本】格式
P_train = res(idx(1:trainnum), 1:end-1)';  % 輸入:前若干列為特征
T_train = res(idx(1:trainnum), end)';      % 輸出:最后一列為目標值
M = size(P_train, 2);                      % 訓練樣本個數% 提取測試集
P_test = res(idx(trainnum+1:end), 1:end-1)'; % 測試輸入
T_test = res(idx(trainnum+1:end), end)';     % 測試輸出
N = size(P_test, 2);                         % 測試樣本個數fprintf('訓練集大小: %d 個樣本\n', M);
fprintf('測試集大小: %d 個樣本\n', N);%% 數據歸一化 [0,1]
% 對輸入和輸出分別進行歸一化,并保存參數用于反歸一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);% 轉置為【樣本×特征】格式,適配 plsregress 函數輸入要求
p_train = p_train';
p_test  = p_test';
t_train = t_train';
t_test  = t_test';

運行結果在這里插入圖片描述

在這里插入圖片描述

代碼下載

https://mbd.pub/o/bread/YZWXlJhvaA==

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95606.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server核心架構深度解析

SQL Server 的體系結構是一個復雜但設計精密的系統,主要可以分為四大核心組件,它們協同工作以管理數據庫、處理查詢、確保數據安全與一致性。以下是其體系結構的核心組成部分: 核心組件:協議層 (Protocol Layer) 作用:…

Django REST Framework Serializer 進階教程

1. 序列化器概述 在 Django REST Framework(DRF)中,序列化器(Serializer)用于將復雜的數據類型(如模型實例)轉換為 JSON 格式,以便于 API 返回給客戶端。此外,序列化器還…

面試問題詳解十四:Qt 多線程同步【QSemaphore】講解

在多線程開發中,經常需要控制多個線程對共享資源的訪問數量。例如限制同時下載文件的數量、控制數據庫連接池的連接使用等等。這時候,Qt 提供的 QSemaphore(信號量)就非常派得上用場。一、什么是 QSemaphore? QSemapho…

Spark mapGroups 函數詳解與多種用法示例

mapGroups 是 Spark 中一個強大的分組操作函數,它允許你對每個分組應用自定義邏輯并返回一個結果。以下是多個使用簡單樣例數據的具體用法示例。基礎示例數據假設我們有一個簡單的學生成績數據集:// 創建示例DataFrame val studentScores Seq(("Ma…

【圖論】Graphs.jl 圖數據的讀寫與生成器

文章目錄圖數據的讀寫Graphs.loadgraphGraphs.loadgraphsGraphs.savegraph保存單個圖保存圖字典Graphs.loadlg_multGraphs.savelgGraphs.savelg_mult圖的生成器1. 隨機圖模型1.1 Erd?s–Rnyi 模型1.2 巴拉巴西-阿爾伯特模型 (無標度網絡)1.3 小世界網絡模型1.4 隨機塊模型 (SB…

Go指針全解析:從基礎到實戰

基本概念與定義指針的定義指針是一種特殊的變量類型,它存儲的不是實際數據值,而是另一個變量在計算機內存中的地址。在底層實現上,指針本質上是保存內存位置的無符號整數,它直接指向內存中的特定位置,允許程序直接操作…

Oracle 查詢有哪些用戶 提示用戶名密碼無效

要查詢 Oracle 數據庫中的所有用戶,可以使用以下 SQL 查詢語句。這個查詢將返回數據庫中所有用戶的列表。 [] SELECT username FROM all_users ORDER BY username;如果你有足夠的權限(通常是 DBA 權限),你也可以使用 dba_users 視…

小白成長之路-develops -jenkins部署lnmp平臺

文章目錄一、準備工作1.1兩臺虛擬機1.2配置文件1.3免密登錄二、實戰1.構建主item2.測試nginx,php,mysql2.1新建測試項目2.2與正式項目綁定構建后的操作2.3測試2.4導入discuz項目總結一、準備工作 1.1兩臺虛擬機 服務器:192.168.144.24 客戶端:192.168.…

【HarmonyOS 6】仿AI喚起屏幕邊緣流光特效

【HarmonyOS 6】仿AI喚起屏幕邊緣流光特效 一、前言 最近在做 HarmonyOS 6.0 的適配,發現 Beta1版本里多了個很實用的視效功能——自帶背景的雙邊流光。 之前做屏幕邊緣流光特效的時候,要么得自己寫漸變動畫拼效果,要么就得套好幾個組件疊層&…

跟做springboot尚品甄選項目

springbootvue3 【尚硅谷Java項目《尚品甄選》 SpringBootSpringCloud萌新學會企業級java項目】003.后臺系統-搭建前端環境(工程創建)_嗶哩嗶哩_bilibili E:\project\AllProJect\Shangpin Selection\項目材料素材\課件\尚品甄選項目課件 前端套用框架…

【Linux】創建線程

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 文章目錄 一、為什么需要線程? 創建線程 示例:計算斐波恩夕法 一、為什么需要線程? 在多核處理器的計算機上,線程可…

HTML應用指南:利用POST請求獲取全國九號電動車體驗店服務店位置信息

九號公司(Ninebot)作為全球領先的智能短途出行解決方案提供商,始終秉持“智慧移動,愉悅生活”的品牌理念,致力于為個人用戶打造安全、智能、時尚的城市出行體驗。依托“智能硬件 + 數字服務 + 線下觸點”三位一體的戰略布局,九號公司已建立起覆蓋全國、輻射全球的銷售與服…

Kafka面試精講 Day 4:Consumer消費者模型與消費組

【Kafka面試精講 Day 4】Consumer消費者模型與消費組 在“Kafka面試精講”系列的第四天,我們將深入探討Kafka的核心組件之一——Consumer消費者模型與消費組(Consumer Group)。這是Kafka實現高吞吐、可擴展消息消費的關鍵機制,也…

使用 Uni-app 打包 外鏈地址APK 及 iOS 注意事項

本文詳細介紹了如何使用 Uni-app 框架將項目打包為 Android APK 和 iOS 應用,重點講解了 minSdkVersion、targetSdkVersion 和 abiFilters 的配置,以及 iOS 開發的注意事項。文章還包含了您提供的 WebView 示例代碼,并提供了關鍵的注意事項&a…

異常處理小妙招——3.構造函數的安全第一原則:為什么不在構造函數中拋出異常?

文章目錄災難性的生日派對構造函數:對象的出生證明安全第一:嚴格的出生檢查為什么要在構造函數中嚴格驗證?1. 避免"僵尸對象"2. Fail-Fast(快速失敗)原則現實世界的實踐建議1. 使用工廠方法模式2. 使用Build…

iptables 和 ip route

文章目錄iptables原理及常用命令表鏈鏈表鏈表總結iptables 常用命令及參數1. 規則管理命令 (Commands)2. 規則匹配參數 (Rule-Specification - Matches)3. 目標動作參數 (Target)命令示例配置流程示例ip route常用命令iptables和ip route的聯系實用命令示例對比iptables原理及常…

RPC和HTTP的區別?

RPC和HTTP是兩種不同的通信協議,它們在通信方式、性能效率以及靈活性可擴展性等方面存在區別。以下是具體分析: 通信方式 RPC:RPC是基于遠程過程調用的二進制協議,它允許客戶端像調用本地函數一樣調用遠程服務器上的函數或方法[2]…

貝葉斯分類(Bayes Classify)

一. 核心思想貝葉斯分類是一類基于貝葉斯定理(Bayes Theorem)和概率統計的分類算法,核心思想是 “通過已知的先驗概率,結合數據的似然性,計算后驗概率,最終將樣本歸為后驗概率最高的類別”。它在機器學習、…

怎么熟悉業務,我是做前端的,但對業務了解沒有渠道

作為前端開發者,想深入了解業務但“沒有渠道”,這是非常普遍的痛點。很多前端同學只接到“切圖實現頁面”的任務,久而久之就成了“實現工具人”。但業務理解力,恰恰是區分“初級”和“高級”前端的核心分水嶺。 好消息是&#xff…

如何批量在PDF文檔最后一頁蓋章?

在面對上百份需要處理的 PDF 文檔時,逐個打開文檔蓋章再進行保存,這些步驟不僅提高我們工作的繁瑣,還容易導致處理位置錯誤或遺漏。那么怎么去將 PDF 文檔末頁實現批量自動打上電子印章?一般的方式沒有辦法來滿足我們高效率辦公的…