了解minmaxscaler()函數

在機器學習中,數據預處理過程中尤為重要的是數據的歸一化。minmaxscaler()是其中一種實現方法,它將數據集中每個特徵數據的值都縮放到同一範圍內。在本文中,我們將從多個方面詳細介紹這個函數。

一、減少特徵值偏差的影響

在機器學習模型中,特徵值如果存在不同的度量單位,則會造成較大的影響,這主要是因為特徵值之間的偏差太大。比如一個模型可能在處理兩個維度不同尺度的數據時,兩個維度得到的重要度相差很大,而導致模型精度下降。這時就可以使用minmaxscaler()函數將數據集的特徵值縮放到同一範圍內,消除度量單位帶來的影響。

首先看一下原始數據:

import numpy as np
raw_data = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])

使用minmaxscaler()函數進行數據轉換:

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(raw_data)
scaled_data
輸出:array([[0.        , 0.        , 0.        ],
              [0.5       , 0.5       , 0.5       ],
              [1.        , 1.        , 1.        ]])

可以看出,將數據縮放至0和1之間後,每個特徵數據的度量單位變得相同了,能夠減少特徵值偏差的影響。

二、避免outlier對統計分析的影響

在實際生活中,存在很多極端情況,如極度異常的氣溫數據、收入數據等。這些異常值會對數據分析產生不良的影響,在分類模型中可能會導致誤分類。在使用minmaxscaler()函數進行數據歸一化時,消除了特徵值之間的單位偏差,並將樣本點映射到了同一區間,更容易處理或去除outlier,保證數據的穩健性。數據歸一化操作能更好的提取信息,改變了部分離群點的數據特徵,使很多演算法能夠更好地訓練模型。

下面看一下具有outlier的數據進行歸一化後的結果:

raw_data_outlier = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9],
    [10,100,1000]
])
scaler.fit(raw_data_outlier) 
print("mean of raw data",np.mean(raw_data_outlier,axis=0)) # 原數據的特徵均值
print("mean of scaled data",np.mean(scaler.transform(raw_data_outlier),axis=0)) # 歸一化後的特徵均值
輸出:mean of raw data [ 5.5 28.75 252.  ]

mean of scaled data [0.375 0.29 0.218]

可以看出,在未做歸一化前,特徵100和1000會對特徵1和2產生很大的影響,而進行歸一化後,所有特徵對目標的影響變得相近了。

三、使用minmaxscaler()實現模型的加速

在一些機器學習模型中,由於特徵值之間的尺度存在很大差異,可能會在迭代過程中出現跟慢的現象,這時使用minmaxscaler()函數將數據縮放到同一區間後,在迭代過程中會減少模型的複雜度,進而加快模型的收斂速度。

下面看一下在一個簡單的邏輯回歸模型中使用PGD對比沒有使用歸一化前後的運算時間:

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import time

raw_data = load_iris().data

X_train,X_test,y_train,y_test = train_test_split(raw_data,load_iris().target,test_size=0.3)

model = LogisticRegression(solver='lbfgs')

start_time = time.time()
model.fit(X_train,y_train)
print('Cost Time:',time.time()-start_time)
print(accuracy_score(model.predict(X_test),y_test))

scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

model = LogisticRegression(solver='lbfgs')

start_time = time.time()
model.fit(X_train_scaled,y_train)
print('Cost Time:',time.time()-start_time)
print(accuracy_score(model.predict(X_test_scaled),y_test))

運行結果如下:

Cost Time: 0.0029273033142089844
0.9777777777777777
Cost Time: 0.001756429672241211
0.9777777777777777

可以看出,使用minmaxscaler()函數將數據歸一化之後,邏輯回歸模型的運算時間減少了,加快了模型的運算速度。

四、結合其他預處理技術

minmaxscaler()函數並不是數據預處理中唯一的可行方法,我們也可以選擇其他預處理技術,比如標準化或正則化。這些方法的選擇應該根據數據的分布情況或分類模型的特點而定。

下面看一下在同樣是對iris數據集進行預處理時標準化和歸一化的結果:

from sklearn.preprocessing import StandardScaler

standard_scaler = StandardScaler()
scaled_data_standard = standard_scaler.fit_transform(raw_data)

print('mean of standardization:',np.mean(scaled_data_standard,axis=0))
print('mean of scaling:',np.mean(scaled_data,axis=0))

print('std of standardization',np.std(scaled_data_standard,axis=0))
print('std of scaling',np.std(scaled_data,axis=0))

運行結果如下:

mean of standardization: [-4.73695157e-16 -7.81597009e-16 -4.26325641e-16  1.96418550e-16]
mean of scaling: [0.41666667 0.45       0.52525253]
std of standardization [1. 1. 1. 1.]
std of scaling [0.30510256 0.31100118 0.17777896]

可以看出,在這組數據上標準化和歸一化方法處理後,特徵的均值均為0,標準差(std)也較小,而標準化後的數據集std均為1。

五、結論

本文主要介紹了minmaxscaler()函數在機器學習數據預處理中的應用,其主要作用是將數據集中每個特徵數據的值都縮放到同一範圍內,可以解決度量單位不同的問題,避免outlier的影響,提高模型的運算速度和穩健性。同時我們也介紹了其他預處理技術的應用,比如標準化或正則化等,如何根據具體情況進行選擇和使用,以便提高模型精度和穩定性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/185549.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 12:24
下一篇 2024-11-26 12:24

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • 分段函數Python

    本文將從以下幾個方面詳細闡述Python中的分段函數,包括函數基本定義、調用示例、圖像繪製、函數優化和應用實例。 一、函數基本定義 分段函數又稱為條件函數,指一條直線段或曲線段,由…

    編程 2025-04-29
  • Python函數名稱相同參數不同:多態

    Python是一門面向對象的編程語言,它強烈支持多態性 一、什麼是多態多態是面向對象三大特性中的一種,它指的是:相同的函數名稱可以有不同的實現方式。也就是說,不同的對象調用同名方法…

    編程 2025-04-29

發表回復

登錄後才能評論