python sklearn數(shù)據(jù)預(yù)處理之正則化詳解
數(shù)據(jù)的預(yù)處理是數(shù)據(jù)分析,或者機(jī)器學(xué)習(xí)訓(xùn)練前的重要步驟。
通過(guò)數(shù)據(jù)預(yù)處理,可以
- 提高數(shù)據(jù)質(zhì)量,處理數(shù)據(jù)的缺失值、異常值和重復(fù)值等問(wèn)題,增加數(shù)據(jù)的準(zhǔn)確性和可靠性
- 整合不同數(shù)據(jù),數(shù)據(jù)的來(lái)源和結(jié)構(gòu)可能多種多樣,分析和訓(xùn)練前要整合成一個(gè)數(shù)據(jù)集
- 提高數(shù)據(jù)性能,對(duì)數(shù)據(jù)的值進(jìn)行變換,規(guī)約等(比如無(wú)量綱化),讓算法更加高效
本篇介紹的正則化處理,主要功能是對(duì)每個(gè)樣本計(jì)算其范數(shù),然后對(duì)該樣本中每個(gè)元素除以該范數(shù),
這樣處理的結(jié)果是使得每個(gè)處理后樣本的范數(shù)(如l1-norm、l2-norm)等于1。
1. 原理
介紹正則化之前,先簡(jiǎn)單介紹下范數(shù)的概念。
1.1. 范數(shù)
范數(shù)常被用來(lái)度量某個(gè)向量空間(或矩陣)中的每個(gè)向量的長(zhǎng)度或大小,
可以簡(jiǎn)單理解為向量的長(zhǎng)度,或者向量到零點(diǎn)的距離,或者相應(yīng)的兩個(gè)點(diǎn)之間的距離。
對(duì)于向量(x=[x1?,x2?,...,xm?]),常見(jiàn)的范數(shù)有:
numpy中已經(jīng)提供了計(jì)算向量范數(shù)的函數(shù)。
import numpy as np # 范數(shù)計(jì)算 arr = np.random.randint(0, 100, 10) print("向量: {}".format(arr)) L1 = np.linalg.norm(arr, 1) print("L1范數(shù): {}".format(L1)) L2 = np.linalg.norm(arr, 2) print("L2范數(shù): {}".format(L2)) LInf = np.linalg.norm(arr, np.inf) print("無(wú)窮范數(shù): {}".format(LInf)) # 運(yùn)行結(jié)果 向量: [12 22 30 75 20 28 38 72 2 33] L1范數(shù): 332.0 L2范數(shù): 126.72016414130783 無(wú)窮范數(shù): 75.0
1.2. 正則化
有了范數(shù)的概念之后,再來(lái)看正則化,根據(jù)選用的范數(shù)不同,正則化也分為L(zhǎng)1正則化,L2正則化等等。
范數(shù)在正則化過(guò)程中扮演了重要的角色,被用來(lái)限制優(yōu)化參數(shù)的大小,幫助防止模型過(guò)擬合。
from sklearn import preprocessing as pp data = 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)) # 運(yùn)行結(jié)果 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]]
正則化之后,所有的數(shù)值都被壓縮到了 0~1之間。
后續(xù)介紹機(jī)器學(xué)習(xí)算法時(shí),可以看到正則化如何緩解訓(xùn)練結(jié)果過(guò)擬合的問(wèn)題。
2. 作用
對(duì)數(shù)據(jù)進(jìn)行正則化處理的主要作用有:
2.1. 防止過(guò)擬合
過(guò)擬合是指模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,但在測(cè)試數(shù)據(jù)上表現(xiàn)不佳的現(xiàn)象。
主要原因是模型在訓(xùn)練數(shù)據(jù)上學(xué)習(xí)了過(guò)多的噪聲和異常值,導(dǎo)致對(duì)訓(xùn)練數(shù)據(jù)過(guò)度擬合。
正則化通過(guò)對(duì)模型的復(fù)雜性進(jìn)行懲罰,使得模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)良好的同時(shí),也能夠?qū)y(cè)試數(shù)據(jù)有較好的預(yù)測(cè)能力。
2.2. 提升穩(wěn)定性和魯棒性
穩(wěn)定性是指模型對(duì)于輸入數(shù)據(jù)的小變化能夠產(chǎn)生可接受的結(jié)果。
也就是說(shuō),如果輸入數(shù)據(jù)在一定范圍內(nèi)發(fā)生微小變化,模型的輸出結(jié)果也會(huì)相應(yīng)地按照相同的排列順序發(fā)生微小變化,而不是發(fā)生較大的顛覆性變化。
而魯棒性則是指模型在一定條件下對(duì)于某些性能的保持能力。
也就是說(shuō),當(dāng)輸入數(shù)據(jù)中存在噪聲、異常值或不完全信息時(shí),模型能夠通過(guò)適當(dāng)?shù)奶幚砗退惴ǎ3制湓械男阅鼙憩F(xiàn),不會(huì)因?yàn)檫@些干擾因素而出現(xiàn)大幅度性能下降。
在實(shí)際應(yīng)用中,穩(wěn)定性和魯棒性往往是相互制約的。
過(guò)于強(qiáng)調(diào)穩(wěn)定性可能導(dǎo)致模型過(guò)于簡(jiǎn)單,無(wú)法處理復(fù)雜的數(shù)據(jù)特征;
而過(guò)于強(qiáng)調(diào)魯棒性可能導(dǎo)致模型過(guò)于復(fù)雜,容易受到噪聲和異常值的影響。
因此,需要根據(jù)實(shí)際應(yīng)用場(chǎng)景和數(shù)據(jù)特點(diǎn)來(lái)權(quán)衡考慮這兩種性能指標(biāo),以實(shí)現(xiàn)最優(yōu)的性能表現(xiàn)。
正則化可以通過(guò)對(duì)模型的復(fù)雜性進(jìn)行懲罰,使得模型對(duì)于輸入數(shù)據(jù)的小變化不會(huì)產(chǎn)生太大的影響,從而提高了模型的穩(wěn)定性和魯棒性。
2.3. 提高泛化能力
泛化能力是指模型在未曾見(jiàn)過(guò)的數(shù)據(jù)上的表現(xiàn)能力,也就是模型對(duì)于新的數(shù)據(jù)的適應(yīng)能力。
正則化可以通過(guò)對(duì)模型的復(fù)雜性進(jìn)行懲罰,使得模型更加專(zhuān)注于訓(xùn)練數(shù)據(jù)中的重要特征,而不是被訓(xùn)練數(shù)據(jù)中的噪聲和異常值所迷惑。
這樣可以在一定程度上提高模型的泛化能力,使得模型在未知數(shù)據(jù)上的表現(xiàn)更好。
3. 總結(jié)
在scikit-learn
中,主要有三種正則化方法,L1正則化,L2正則化和Max正則化。
實(shí)際應(yīng)用中,根據(jù)數(shù)據(jù)的特征和場(chǎng)景對(duì)數(shù)據(jù)選擇不同的正則化方法,使得訓(xùn)練后的模型能夠有更好的精度和性能。
到此這篇關(guān)于python sklearn數(shù)據(jù)預(yù)處理之正則化詳解的文章就介紹到這了,更多相關(guān)sklearn數(shù)據(jù)預(yù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳細(xì)聊一聊為什么Python沒(méi)有main函數(shù)
相信很多初學(xué)python的人看代碼的時(shí)候都會(huì)先找一下main()方法,從main往下看,但事實(shí)上python中是沒(méi)有你理解中的“main()”方法的,下面這篇文章主要給大家介紹了關(guān)于為什么Python沒(méi)有main函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-03-03Python打工人必備之windows倒計(jì)時(shí)鎖屏功能的實(shí)現(xiàn)
每個(gè)人的電腦里都會(huì)有不想讓別人知道的隱私,或者是上班時(shí)間偷偷摸魚(yú)怕被發(fā)現(xiàn)的小秘密。那怎么辦?就干脆把隱私鎖起來(lái)!從源頭上杜絕被他人偷窺自己的隱私。本文就來(lái)用Python實(shí)現(xiàn)一個(gè)windows倒計(jì)時(shí)鎖屏功能,需要的可以參考一下2023-04-04Python json格式化打印實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python json格式化打印實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07Python pyside6編寫(xiě)一個(gè)廣告圖片生成器
這篇文章主要為大家詳細(xì)介紹了Python如何使用pyside6編寫(xiě)一個(gè)廣告圖片生成器,可以快速制作包含產(chǎn)品圖片和文字的廣告圖片,需要的可以參考下2025-01-01python 循環(huán)讀取txt文檔 并轉(zhuǎn)換成csv的方法
今天小編就為大家分享一篇python 循環(huán)讀取txt文檔 并轉(zhuǎn)換成csv的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Python實(shí)現(xiàn)常見(jiàn)的回文字符串算法
這篇文章主要介紹了Python實(shí)現(xiàn)常見(jiàn)的回文字符串算法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11使用?OpenCV-Python?識(shí)別答題卡判卷功能
這篇文章主要介紹了使用?OpenCV-Python?識(shí)別答題卡判卷,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12