【scikit-learn基礎】--『預處理』之 正則化

數據的預處理是數據分析,或者機器學習訓練前的重要步驟。
通過數據預處理,可以

  • 提高數據質量,處理數據的缺失值、異常值和重復值等問題,增加數據的準確性和可靠性
  • 整合不同數據,數據的來源和結構可能多種多樣,分析和訓練前要整合成一個數據集
  • 提高數據性能,對數據的值進行變換,規約等(比如無量綱化),讓算法更加高效

本篇介紹的正則化處理,主要功能是對每個樣本計算其范數,然后對該樣本中每個元素除以該范數,
這樣處理的結果是使得每個處理后樣本的范數(如l1-norm、l2-norm)等于1。

1. 原理

介紹正則化之前,先簡單介紹下范數的概念。

1.1. 范數

范數常被用來度量某個向量空間(或矩陣)中的每個向量的長度或大小,
可以簡單理解為向量的長度,或者向量到零點的距離,或者相應的兩個點之間的距離。

對于向量(x=[x1,x2,...,xm]x=[x1,x2,...,xm]),常見的范數有:

  1. L1范數,向量元素絕對值之和,x 到零點的曼哈頓距離(∥x∥1=∑mi=1∣xi∣∥x∥1=∑i=1m∣xi∣)
  2. L2范數,向量元素絕對值的平方和再開方,表示x到零點的歐式距離(∥x∥2=√∑mi=1∣x2i∣∥x∥2=∑i=1m∣xi2∣)
  3. p-范數,向量元素絕對值的p次方和的1/p次冪,表示x到零點的p階閔氏距離(∥x∥p=(∑mi=1∣xi∣p)1p∥x∥p=(∑i=1m∣xi∣p)1p)
  4. 無窮范數,所有向量元素絕對值中的最大值(∥x∥∞=maxi∣xi∣∥x∥∞=maxi∣xi∣)
  5. 等等。

numpy中已經提供了計算向量范數的函數。

import numpy as np# 范數計算arr = np.random.randint(0, 100, 10)
print("向量: {}".format(arr))L1 = np.linalg.norm(arr, 1)
print("L1范數: {}".format(L1))
L2 = np.linalg.norm(arr, 2)
print("L2范數: {}".format(L2))LInf = np.linalg.norm(arr, np.inf)
print("無窮范數: {}".format(LInf))# 運行結果
向量: [12 22 30 75 20 28 38 72  2 33]
L1范數: 332.0
L2范數: 126.72016414130783
無窮范數: 75.0

1.2. 正則化

有了范數的概念之后,再來看正則化,根據選用的范數不同,正則化也分為L1正則化,L2正則化等等。
范數正則化過程中扮演了重要的角色,被用來限制優化參數的大小,幫助防止模型過擬合。

from sklearn import preprocessing as ppdata = np.random.randint(1, 100, size=(3, 3))
L1 = pp.normalize(data, norm="l1")
L2 = pp.normalize(data, norm="l2")
LMax = pp.normalize(data, norm="max")print("L1正則化: {}".format(L1))
print("L2正則化: {}".format(L2))
print("Max正則化: {}".format(LMax))# 運行結果
L1正則化: 
[[0.29677419 0.09677419 0.60645161][0.20408163 0.46938776 0.32653061][0.05       0.67       0.28      ]]L2正則化:
[[0.43510613 0.14188244 0.88912993][0.33614632 0.77313654 0.53783412][0.06869324 0.92048947 0.38468217]]Max正則化:
[[0.4893617  0.15957447 1.        ][0.43478261 1.         0.69565217][0.07462687 1.         0.41791045]]

正則化之后,所有的數值都被壓縮到了?0~1之間。
后續介紹機器學習算法時,可以看到正則化如何緩解訓練結果過擬合的問題。

2. 作用

對數據進行正則化處理的主要作用有:

2.1. 防止過擬合

過擬合是指模型在訓練數據上表現很好,但在測試數據上表現不佳的現象。
主要原因是模型在訓練數據上學習了過多的噪聲和異常值,導致對訓練數據過度擬合。

正則化通過對模型的復雜性進行懲罰,使得模型在訓練數據上表現良好的同時,也能夠對測試數據有較好的預測能力。

2.2. 提升穩定性和魯棒性

穩定性是指模型對于輸入數據的小變化能夠產生可接受的結果。
也就是說,如果輸入數據在一定范圍內發生微小變化,模型的輸出結果也會相應地按照相同的排列順序發生微小變化,而不是發生較大的顛覆性變化。

魯棒性則是指模型在一定條件下對于某些性能的保持能力。
也就是說,當輸入數據中存在噪聲、異常值或不完全信息時,模型能夠通過適當的處理和算法,保持其原有的性能表現,不會因為這些干擾因素而出現大幅度性能下降。

在實際應用中,穩定性魯棒性往往是相互制約的。
過于強調穩定性可能導致模型過于簡單,無法處理復雜的數據特征;
而過于強調魯棒性可能導致模型過于復雜,容易受到噪聲和異常值的影響。
因此,需要根據實際應用場景和數據特點來權衡考慮這兩種性能指標,以實現最優的性能表現。

正則化可以通過對模型的復雜性進行懲罰,使得模型對于輸入數據的小變化不會產生太大的影響,從而提高了模型的穩定性魯棒性

2.3. 提高泛化能力

泛化能力是指模型在未曾見過的數據上的表現能力,也就是模型對于新的數據的適應能力。

正則化可以通過對模型的復雜性進行懲罰,使得模型更加專注于訓練數據中的重要特征,而不是被訓練數據中的噪聲和異常值所迷惑。
這樣可以在一定程度上提高模型的泛化能力,使得模型在未知數據上的表現更好。

3. 總結

scikit-learn中,主要有三種正則化方法,L1正則化,L2正則化和Max正則化。
實際應用中,根據數據的特征和場景對數據選擇不同的正則化方法,使得訓練后的模型能夠有更好的精度和性能。

關注靈活就業新業態,了解更多程序員兼職項目,關注公賬號:賢才寶(賢才寶https://www.51xcbw.com)?

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

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

相關文章

LeetCode Hot100 刷題筆記(2)—— 子串、普通數組、矩陣

目錄 前言 一、子串 1. 和為 K 的子數組 2. 滑動窗口最大值 3. 最小覆蓋子串 二、普通數組 4. 最大子數組和 5. 合并區間 6. 輪轉數組 7. 除自身以外數組的乘積 8. 缺失的第一個正數 三、矩陣 9. 矩陣置零 10. 螺旋矩陣 11. 旋轉圖像 12. 搜索二維矩陣 II 前言 一、子串&#…

【Git 常用操作指令指南】

一、初始化與配置 1. 設置全局賬戶信息 git config --global user.name "用戶名" # 設置全局用戶名 git config --global user.email "郵箱" # 設置全局郵箱 --global 表示全局生效,若需針對單個倉庫配置,可省略該參數 2.…

教培行業創建自己品牌的重要意義——教育培訓小程序

在競爭激烈的教培行業,創建自身品牌意義重大。 擁有獨特品牌能顯著提升機構競爭力與辨識度。如今教培市場同質化嚴重,一個亮眼的品牌小程序可使機構從眾多競爭者中脫穎而出,讓學員和家長快速識別并記住。 品牌小程序有助于增強信任度和口碑。…

Docker 介紹 · 安裝詳細教程

為什么選擇 Docker? ? 環境一致性 – 告別“在我機器上能跑”的問題,確保開發、測試、生產環境一致。 ? 高效輕量 – 秒級啟動,資源占用遠低于傳統虛擬機。 ? 跨平臺支持 – 可在任何支持 Docker 的環境中運行,包括云服務器、…

GitHub 上開源一個小項目的完整指南

GitHub 上開源一個小項目的完整指南 🚀 第一步:準備你的項目 在開源之前,確保項目是可用且有一定結構的: ? 最低要求 項目文件清晰、結構合理(比如:src/、README.md、LICENSE)項目能在本地正…

React 第三十節 使用 useState 和 useEffect Hook實現購物車

不使用 redux 實現 購物車案例 使用 React 自帶的 useState 和 useEffect Hook 即可實現購物車 export default function ShoppingCar() {// 要結算的商品 總數 以及總價const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…

藍橋杯第十一屆省賽C++B組真題解析

藍橋杯第十一屆省賽CB組真題解析 八、回文日期https://www.lanqiao.cn/problems/348/learning 方法一&#xff1a;暴力枚舉所有的日期&#xff0c;記錄有多少個回文日期。 #include <bits/stdc.h> using namespace std; int month[13]{0,31,28,31,30,31,30,31,31,30,31…

Python和MicroPython的解釋器區別

Python和MicroPython的解釋器不是同一個&#xff0c;它們在設計目標、實現方式和運行環境上都有顯著的區別。以下是它們的主要區別&#xff1a; 1. 底層實現 Python解釋器&#xff08;CPython&#xff09;&#xff1a; Python的標準解釋器是CPython&#xff08;C語言實現的Pyt…

Cython加密多層目錄中的Python腳本方案

近期有一個VueJavaDocker項目中需要加密Python腳本的需求&#xff0c;調研后決定采用Cython。 使用Cython編譯為二進制 步驟&#xff1a; 安裝Cython&#xff1a;pip install cython創建setup.py&#xff1a; from distutils.core import setup from Cython.Build import c…

力扣DAY40-45 | 熱100 | 二叉樹:直徑、層次遍歷、有序數組->二叉搜索樹、驗證二叉搜索樹、二叉搜索樹中第K小的元素、右視圖

前言 簡單、中等 √ 好久沒更了&#xff0c;感覺二叉樹來回就那些。有點變懶要警醒&#xff0c;不能止步于笨方法&#xff01;&#xff01; 二叉樹的直徑 我的題解 遍歷每個節點&#xff0c;左節點最大深度右節點最大深度當前節點當前節點為中心的直徑。如果左節點深度更大…

頭歌數據庫【數據庫概論】第10-11章 故障恢復與并發控制

第1關&#xff1a;數據庫恢復技術 1、事務的&#xff08; A&#xff09;特性要求事務必須被視為一個不可分割的最小工作單元 A、原子性 B、一致性 C、隔離性 D、持久性 2、事務的&#xff08;C &#xff09;特性要求一個事務在執行時&#xff0c;不會受到其他事務的影響。 A、原…

windows下,cursor連接MCP服務器

1.下載并安裝node 安裝后&#xff0c;在cmd命令框中&#xff0c;輸入命令node -v可以打印版本號&#xff0c;證明安裝完成 2.下載MCP服務器項目 在MCP服務器找到對應項目&#xff0c;這里以server-sequential-thinking為例子 在本地cmd命令窗口&#xff0c;使用下面命令下載…

前端配置husky,commit-lint導致的git提交錯誤:git xx@0.0.0 lint:lint-staged

前端配置husky&#xff0c;commit-lint導致的git提交錯誤&#xff1a;git xx0.0.0 lint:lint-staged git commit -m "xxx"時出現以下報錯&#xff0c;可能是前端配置husky&#xff0c;commit-lint的原因 //報錯信息 git xx0.0.0 lint:lint-staged首先要知道出現這個錯…

各種場景的ARP攻擊描述筆記(超詳細)

1、ARP報文限速 上一章我們說過ARP報文也是需要上送CPU進行處理的協議報文,如果設備對收到的大量ARP報文全部進行處理,可能導致CPU負荷過重而無法處理其他業務。因此,在處理之前需要對ARP報文進行限速,以保護CPU資源。 1.根據源MAC地址或源IP地址進行ARP限速 當設備檢測到某一…

Django 創建CSV文件

Django使用Python內置的CSV庫來創建動態的CSV&#xff08;逗號分隔值&#xff09;文件。我們可以在項目的視圖文件中使用這個庫。 讓我們來看一個例子&#xff0c;這里我們有一個Django項目&#xff0c;我們正在實現這個功能。創建一個視圖函數 getfile() 。 Django CSV例子 …

HTTPS為何仍有安全漏洞?解析加密協議下的攻擊面

本文深度剖析HTTPS協議在傳輸層、證書體系、配置管理三個維度的安全盲區&#xff0c;揭示SSL/TLS加密掩蓋下的11類攻擊路徑。基于Equifax、SolarWinds等重大事件的技術復盤&#xff0c;提供包含自動化證書巡檢、動態協議升級、加密流量威脅檢測的立體防御方案。 HTTPS不等于絕…

MyBatis 動態 SQL 使用詳解

&#x1f31f; 一、什么是動態 SQL&#xff1f; 動態 SQL 是指根據傳入參數&#xff0c;動態拼接生成 SQL 語句&#xff0c;不需要寫多個 SQL 方法。MyBatis 提供了 <if>、<choose>、<foreach>、<where> 等標簽來實現這類操作 ? 二、動態 SQL 的優點…

樂觀鎖與悲觀鎖的使用場景

悲觀鎖的應用場景 悲觀鎖的基本思想是假設并發沖突會發生&#xff0c;因此在操作數據時會先鎖定數據&#xff0c;直到完成操作并提交事務后才釋放鎖。這種方式適用于寫操作較多、并發沖突可能性較高的場景。 高寫入比例的數據庫操作&#xff1a;如果系統中有很多寫操作&#x…

cpp(c++)win 10編譯GDAL、PROJ、SQLite3、curl、libtiff

cpp&#xff08;c&#xff09;編譯GDAL、PROJ、SQLite3 Sqlite3libtiffcurlprojGDAL Sqlite3 1、下載 Sqlite3 源碼、工具、二進制預編譯 exe Sqlite3 官網&#xff1a;https://www.sqlite.org/download.html 下載 sqlite-amalgamation-3430200.zipsqlite-dll-win64-x64-3430…

【愚公系列】《高效使用DeepSeek》062-圖書庫存管理

??【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】?? ??開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主! ?? 江湖人稱"愚公搬代碼",用七年如一日的精神深耕技術領域,以"…