機器學習:欠擬合、過擬合、正則化

本文目錄:

  • 一、欠擬合
  • 二、過擬合
  • 三、擬合問題原因及解決辦法
  • 四、正則化:盡量減少高次冪特征的影響
    • (一)L1正則化
    • (二)L2正則化
    • (三)L1正則化與L2正則化的對比
  • 五、正好擬合代碼(附贈)

一、欠擬合

欠擬合:一個假設 在訓練數據上不能獲得更好的擬合,并且在測試數據集上也不能很好地擬合數據 ,此時認為這個假設出現了欠擬合的現象。(模型過于簡單)

欠擬合代碼實現:

例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error  # 計算均方誤差
from sklearn.model_selection import train_test_splitdef dm01_欠擬合():# 1. 準備x, y數據, 增加上噪聲.# 用于設置隨機數生成器的種子(seed), 種子一樣, 每次生成相同序列.np.random.seed(666)# x: 隨機數, 范圍為 (-3, 3), 100個.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 標準差, normal: 正態分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 實例化 線性回歸模型.estimator = LinearRegression()# 3. 訓練模型X = x.reshape(-1, 1)estimator.fit(X, y)# 4. 模型預測.y_predict = estimator.predict(X)print("預測值:", y_predict)# 5. 計算均方誤差 => 模型評估print(f'均方誤差: {mean_squared_error(y, y_predict)}')# 6. 畫圖plt.scatter(x, y)           # 散點圖plt.plot(x, y_predict, color='r')   # 折線圖(預測值, 擬合回歸線)plt.show()                  # 具體的繪圖if __name__ == '__main__':dm01_欠擬合()

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

二、過擬合

過擬合:一個假設 在訓練數據上能夠獲得比其他假設更好的擬合, 但是在測試數據集上卻不能很好地擬合數據 (體現在準確率下降),此時認為這個假設出現了過擬合的現象。

過擬合代碼實現:

例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error  # 計算均方誤差
from sklearn.model_selection import train_test_splitdef dm03_過擬合():# 1. 準備x, y數據, 增加上噪聲.# 用于設置隨機數生成器的種子(seed), 種子一樣, 每次生成相同序列.np.random.seed(666)# x: 隨機數, 范圍為 (-3, 3), 100個.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 標準差, normal: 正態分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 實例化 線性回歸模型.estimator = LinearRegression()# 3. 訓練模型X = x.reshape(-1, 1)# hstack() 函數用于將多個數組在行上堆疊起來, 即: 數據增加高次項.X3 = np.hstack([X, X**2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10])estimator.fit(X3, y)# 4. 模型預測.y_predict = estimator.predict(X3)print("預測值:", y_predict)# 5. 計算均方誤差 => 模型評估print(f'均方誤差: {mean_squared_error(y, y_predict)}')# 6. 畫圖plt.scatter(x, y)  # 散點圖# sort()  該函數直接返回一個排序后的新數組。# numpy.argsort()   該函數返回的是數組值從小到大排序時對應的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折線圖(預測值, 擬合回歸線)plt.show()  # 具體的繪圖if __name__ == '__main__':dm03_過擬合()

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

三、擬合問題原因及解決辦法

1.欠擬合產生原因: 學習到數據的特征過少。

解決辦法:

1)添加其他特征項,有時出現欠擬合是因為特征項不夠導致的,可以添加其他特征項來解決。

2)添加多項式特征,模型過于簡單時的常用套路,例如將線性模型通過添加二次項或三次項使模型泛化能力更強。

2.過擬合產生原因: 原始特征過多,存在一些嘈雜特征, 模型過于復雜是因為模型嘗試去兼顧所有測試樣本。

解決辦法:

1)重新清洗數據,導致過擬合的一個原因有可能是數據不純,如果出現了過擬合就需要重新清洗數據。

2)增大數據的訓練量,還有一個原因就是我們用于訓練的數據量太小導致的,訓練數據占總數據的比例過小。

3)正則化

4)減少特征維度。

四、正則化:盡量減少高次冪特征的影響

在這里插入圖片描述

(一)L1正則化

LASSO回歸: from sklearn.linear_model import Lasso
在這里插入圖片描述
代碼如下:

from sklearn.linear_model import Lasso  # L1正則
from sklearn.linear_model import Ridge  # 嶺回歸 L2正則def dm04_模型過擬合_L1正則化():# 1. 準備x, y數據, 增加上噪聲.# 用于設置隨機數生成器的種子(seed), 種子一樣, 每次生成相同序列.np.random.seed(666)# x: 隨機數, 范圍為 (-3, 3), 100個.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 標準差, normal: 正態分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 實例化L1正則化模型, 做實驗: alpha懲罰力度越來越大, k值越來越小.estimator = Lasso(alpha=0.005)# 3. 訓練模型X = x.reshape(-1, 1)# hstack() 函數用于將多個數組在行上堆疊起來, 即: 數據增加高次項.X3 = np.hstack([X, X**2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10])estimator.fit(X3, y)print(f'權重: {estimator.coef_}')# 4. 模型預測.y_predict = estimator.predict(X3)print("預測值:", y_predict)# 5. 計算均方誤差 => 模型評估print(f'均方誤差: {mean_squared_error(y, y_predict)}')# 6. 畫圖plt.scatter(x, y)  # 散點圖# sort()  該函數直接返回一個排序后的新數組。# numpy.argsort()   該函數返回的是數組值從小到大排序時對應的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折線圖(預測值, 擬合回歸線)plt.show()  # 具體的繪圖if __name__ == '__main__':dm04_模型過擬合_L1正則化()

(二)L2正則化

Ridge回歸: from sklearn.linear_model import Ridge
在這里插入圖片描述
代碼如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, Lasso, Ridge
from sklearn.metrics import mean_squared_error  # 計算均方誤差
from sklearn.model_selection import train_test_splitdef dm05_模型過擬合_L2正則化():# 1. 準備x, y數據, 增加上噪聲.# 用于設置隨機數生成器的種子(seed), 種子一樣, 每次生成相同序列.np.random.seed(666)# x: 隨機數, 范圍為 (-3, 3), 100個.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 標準差, normal: 正態分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 實例化L2正則化模型, 做實驗: alpha懲罰力度越來越大, k值越來越小.estimator = Ridge(alpha=0.005)# 3. 訓練模型X = x.reshape(-1, 1)# hstack() 函數用于將多個數組在行上堆疊起來, 即: 數據增加高次項.X3 = np.hstack([X, X**2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10])estimator.fit(X3, y)print(f'權重: {estimator.coef_}')# 4. 模型預測.y_predict = estimator.predict(X3)print("預測值:", y_predict)# 5. 計算均方誤差 => 模型評估print(f'均方誤差: {mean_squared_error(y, y_predict)}')# 6. 畫圖plt.scatter(x, y)  # 散點圖# sort()  該函數直接返回一個排序后的新數組。# numpy.argsort()   該函數返回的是數組值從小到大排序時對應的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折線圖(預測值, 擬合回歸線)plt.show()  # 具體的繪圖if __name__ == '__main__':# dm04_模型過擬合_L1正則化()dm05_模型過擬合_L2正則化()

(三)L1正則化與L2正則化的對比

在這里插入圖片描述

五、正好擬合代碼(附贈)

例:
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as pltdef dm02_模型ok():# 1. 準備x, y數據, 增加上噪聲.# 用于設置隨機數生成器的種子(seed), 種子一樣, 每次生成相同序列.np.random.seed(666)# x: 隨機數, 范圍為 (-3, 3), 100個.x = np.random.uniform(-3, 3, size=100)# loc: 均值, scale: 標準差, normal: 正態分布.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)# 2. 實例化 線性回歸模型.estimator = LinearRegression()# 3. 訓練模型X = x.reshape(-1, 1)X2 = np.hstack([X, X ** 2])estimator.fit(X2, y)# 4. 模型預測.y_predict = estimator.predict(X2)print("預測值:", y_predict)# 5. 計算均方誤差 => 模型評估print(f'均方誤差: {mean_squared_error(y, y_predict)}')# 6. 畫圖plt.scatter(x, y)  # 散點圖# sort()  該函數直接返回一個排序后的新數組。# numpy.argsort()   該函數返回的是數組值從小到大排序時對應的索引值plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')  # 折線圖(預測值, 擬合回歸線)# plt.plot(x, y_predict)plt.show()  # 具體的繪圖

運行結果:
在這里插入圖片描述
今天的分享到此結束。

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

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

相關文章

Linux命令之ausearch命令

一、命令簡介 ausearch 是 Linux 審計系統 (auditd) 中的一個實用工具,用于搜索審計日志中的事件。它是審計框架的重要組成部分,可以幫助系統管理員分析系統活動和安全事件。 二、使用示例 1、安裝ausearch命令 Ubuntu系統安裝ausearch命令,安裝后啟動服務。 root@testser…

mac電腦安裝nvm

方案一、常規安裝 下載安裝腳本:在終端中執行以下命令來下載并運行 NVM 的安裝腳本3: bash curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.39.5/install.sh | bash配置環境變量:安裝完成后,需要配置環境變量。如…

Excel 操作 轉圖片,轉pdf等

方式一 spire.xls.free&#xff08;沒找設置分辨率的方法&#xff09; macOs開發Java GUI程序提示缺少字體問題解決 Spire.XLS&#xff1a;一款Excel處理神器_spire.xls免費版和收費版的區別-CSDN博客 官方文檔 Spire.XLS for Java 中文教程 <dependency><groupI…

oracle goldengate實現遠程抽取postgresql 到 postgresql的實時同步【絕對無坑版,親測流程驗證】

oracle goldengate實現postgresql 到 postgresql的實時同步 源端&#xff1a;postgresql1 -> postgresql2 流復制主備同步 目標端&#xff1a;postgresql 數據庫版本&#xff1a;postgresql 12.14 ogg版本&#xff1a;21.3 架構圖&#xff1a; 數據庫安裝以及流復制主備…

2.從0開始搭建vue項目(node.js,vue3,Ts,ES6)

從“0到跑起來一個 Vue 項目”&#xff0c;重點是各個工具之間的關聯關系、職責邊界和技術演化脈絡。 從你寫代碼 → 到代碼能跑起來 → 再到代碼可以部署上線&#xff0c;每一步都有不同的工具參與。 &#x1f63a;&#x1f63a;1. 安裝 Node.js —— 萬事的根基 Node.js 是…

MQTT的Thingsboards的使用

訪問云服務 https://thingsboard.cloud/ 新建一個設備 彈出 默認是mosquittor的客戶端。 curl -v -X POST http://thingsboard.cloud/api/v1/tnPrO76AxF3TAyOblf9x/telemetry --header Content-Type:application/json --data "{temperature:25}" 換成MQTTX的客戶…

金磚國家人工智能高級別論壇在巴西召開,華院計算應邀出席并發表主題演講

當地時間5月20日&#xff0c;由中華人民共和國工業和信息化部&#xff0c;巴西發展、工業、貿易與服務部&#xff0c;巴西公共服務管理和創新部以及巴西科技創新部聯合舉辦的金磚國家人工智能高級別論壇&#xff0c;在巴西首都巴西利亞舉行。 中華人民共和國工業和信息化部副部…

BLE協議全景圖:從0開始理解低功耗藍牙

BLE(Bluetooth Low Energy)作為一種針對低功耗場景優化的通信協議,已經廣泛應用于智能穿戴、工業追蹤、智能家居、醫療設備等領域。 本文是《BLE 協議實戰詳解》系列的第一篇,將從 BLE 的發展歷史、協議棧結構、核心機制和應用領域出發,為后續工程實戰打下全面認知基礎。 …

表單校驗代碼和樹形結構值傳遞錯誤解決

表單校驗代碼&#xff0c;兩種方式校驗&#xff0c;自定義的一種校驗&#xff0c;與element-ui組件原始的el-form表單的校驗不一樣&#xff0c;需要傳遞props和rules過去校驗 const nextStep () > {const data taskMsgInstance.value.formDataif(data.upGradeOrg ) {elm…

vscode 配置 QtCreat Cmake項目

1.vscode安裝CmakeTool插件并配置QT中cmake的路徑&#xff0c;不止這一處 2.cmake生成器使用Ninja&#xff08;Ninja在安裝QT時需要勾選&#xff09;&#xff0c;可以解決[build] cc1plus.exe: error: too many filenames given; type ‘cc1plus.exe --help’ for usage 編譯時…

關于數據倉庫、數據湖、數據平臺、數據中臺和湖倉一體的概念和區別

我們談論數據中臺之前&#xff0c; 我們也聽到過數據平臺、數據倉庫、數據湖、湖倉一體的相關概念&#xff0c;它們都與數據有關系&#xff0c;但他們和數據中臺有什么樣的區別&#xff0c; 下面我們將圍繞數據平臺、數據倉庫、數據湖和數據中臺的區別進行介紹。 一、相關概念…

WIN11+eclipse搭建java開發環境

環境搭建&#xff08;WIN11ECLIPSE&#xff09; 安裝JAVA JDK https://www.oracle.com/cn/java/technologies/downloads/#jdk24安裝eclipse https://www.eclipse.org/downloads/ 注意&#xff1a;eclipse下載時指定aliyun的軟件源&#xff0c;后面安裝會快一些。默認是jp漢化e…

通義靈碼深度實戰測評:從零構建智能家居控制中樞,體驗AI編程新范式

一、項目背景&#xff1a;零基礎挑戰全棧智能家居系統 目標&#xff1a;開發具備設備控制、環境感知、用戶習慣學習的智能家居控制中樞&#xff08;PythonFlaskMQTTReact&#xff09; 挑戰點&#xff1a; 需集成硬件通信(MQTT)、Web服務(Flask)、前端交互(React) 調用天氣AP…

【Python進階】CPython

目錄 ?? 前言??? 技術背景與價值?? 當前技術痛點??? 解決方案概述?? 目標讀者說明?? 一、技術原理剖析?? 核心架構圖解?? 核心作用講解?? 關鍵技術模塊說明?? Python實現對比??? 二、實戰演示?? 環境配置要求?? 核心代碼實現案例1:查看字節碼案例…

Hive中資源優化方法的詳細說明

在Hive中&#xff0c;資源優化的核心目標是合理分配集群資源&#xff08;如內存、CPU、任務并行度等&#xff09;&#xff0c;避免資源競爭和浪費&#xff0c;提升查詢效率。以下是資源優化的具體方法&#xff0c;涵蓋 YARN資源配置、任務并行度、內存管理、JVM重用、推測執行 …

流媒體協議分析:流媒體傳輸的基石

在流媒體傳輸過程中&#xff0c;協議的選擇至關重要&#xff0c;它決定了數據如何封裝、傳輸和解析&#xff0c;直接影響著視頻的播放質量和用戶體驗。本文將深入分析幾種常見的流媒體傳輸協議&#xff0c;探討它們的特點、應用場景及優缺點。 協議分類概述 流媒體傳輸協議根據…

GitHub 趨勢日報 (2025年05月29日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 1864 agenticSeek 753 langflow 749 n8n 736 prompt-eng-interactive-tutorial 42…

Jenkins-Pipeline:學習筆記

Jenkins-Pipeline:學習筆記 在 DevOps 領域中,Pipeline(流水線) 是實現持續集成(CI)和持續部署(CD)的核心機制。學習 Pipeline 通常需要從以下幾個方面入手,涵蓋基礎概念、工具使用、語法規則、實踐優化等 一、Pipeline 基礎概念 什么是 Pipeline? 流水線是將軟件交…

內存管理 : 04段頁結合的實際內存管理

一、課程核心主題引入 這一講&#xff0c;我要給大家講的是真正的內存管理&#xff0c;也就是段和頁結合在一起的內存管理方式。之前提到過&#xff0c;我們先學習了分段管理內存的工作原理&#xff0c;知道操作系統采用分段的方式&#xff0c;讓用戶程序能以分段的結構進行編…

RAID磁盤陣列配置

RAID磁盤陣列配置 文章目錄 RAID磁盤陣列配置一、磁盤管理其他相關命令1.fsck-檢查文件的正確性2.dd-建立和使用交換文件3.mkswap-建立和設置SWAP交換分區 二、RAID配置 一、磁盤管理其他相關命令 1.fsck-檢查文件的正確性 [rootlocalhost ~]# fsck -aC /dev/sda1 //檢查文…