日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中的scaler_【笔记】scikit-learn中的Scaler(归一化)

發(fā)布時(shí)間:2023/12/20 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的scaler_【笔记】scikit-learn中的Scaler(归一化) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

scikit-learn中的數(shù)據(jù)歸一化

在機(jī)器學(xué)習(xí)使用數(shù)據(jù)歸一化的時(shí)候有一個重要的注意事項(xiàng)

我們對訓(xùn)練數(shù)據(jù)進(jìn)行均值和方差的處理,得到mean_train以及std_train,但是在對測試數(shù)據(jù)進(jìn)行歸一化的時(shí)候,是不能直接用測試數(shù)據(jù)的均值和方差來進(jìn)行歸一化的,應(yīng)該使用訓(xùn)練數(shù)據(jù)的均值和方差對測試數(shù)據(jù)進(jìn)行均值方差歸一化

為什么要這樣做呢,我們訓(xùn)練這個模型是為了在真實(shí)的環(huán)境中去使用的,測試數(shù)據(jù)是模擬真實(shí)的環(huán)境,但是真實(shí)環(huán)境很有可能是沒法得到所有的測試數(shù)據(jù)的均值和方差的,是很難得到這種統(tǒng)計(jì)數(shù)據(jù)的,另外,對數(shù)據(jù)的歸一化也是算法的一部分,我們針對后面來的數(shù)據(jù),應(yīng)該也對其進(jìn)行這樣的處理

那么我們就必須要保存訓(xùn)練數(shù)據(jù)集得到的均值和方差

整體流程

實(shí)際操作(以鳶尾花為例)

x前十行的內(nèi)容(并未進(jìn)行歸一化處理)

scikit-learn中的standardscaler

想調(diào)用,只需要

from sklearn.preprocessing import StandardScaler

創(chuàng)建一個實(shí)例

standardScaler = StandardScaler()

進(jìn)行fit操作,其包含了很多的信息

standardScaler.fit(X_train)

數(shù)組的均值(對應(yīng)的四個特征的均值)

對于mean_的_,對于是由用戶傳進(jìn)去的變量計(jì)算得到的,用戶可以隨時(shí)在外圍進(jìn)行查詢的,在后面要有_才行

方差

standardScaler.std_

這個我的版本已經(jīng)棄用了,使用的話會報(bào)錯

標(biāo)準(zhǔn)差

standardScaler.scale_

現(xiàn)在可以正式使用transform進(jìn)行數(shù)據(jù)歸一化處理

注意:這樣處理以后,X_train實(shí)際上沒有進(jìn)行變化

使用

X_train = standardScaler.transform(X_train)

就可以使X_train保存下歸一化以后的矩陣了

在對訓(xùn)練矩陣進(jìn)行歸一化

X_test_standard = standardScaler.transform(X_test)

使用knn算法進(jìn)行預(yù)測分析準(zhǔn)確率

值得注意的是,當(dāng)我們用歸一化以后的訓(xùn)練集來訓(xùn)練機(jī)器算法之后,我們在預(yù)測的時(shí)候,測試數(shù)據(jù)集必須同樣進(jìn)行歸一化,不然的話準(zhǔn)確率會相當(dāng)?shù)牡?/p>

在pc中手動寫出可以實(shí)現(xiàn)的歸一化

import numpy as np

class StandardScaler:

def __init__(self):

self.mean_ = None

self.scale_ = None;

def fit(self, X):

assert X.ndim == 2, "The dimension of X must be 2"

self.mean_ = np.array([np.mean(X[:, i]) for i in range(X.shape[1])])

self.scale_ = np.array([np.std(X[:, i]) for i in range(X.shape[1])])

return self

def tranform(self, X):

assert X.ndim == 2, "The dimension of X must be 2"

assert self.mean_ is not None and self.scale_ is not None, \

"must fit before transform!"

assert X.shape[1] == len(self.mean_), \

"the feature number of X must be equal to mean_ and std_"

resX = np.empty(shape=X.shape, dtype=float)

for col in range(X.shape[1]):

resX[:, col] = (X[:, col] - self.mean_[col]) / self.scale_[col]

return resX

總結(jié)

以上是生活随笔為你收集整理的python中的scaler_【笔记】scikit-learn中的Scaler(归一化)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。