python中的scaler_【笔记】scikit-learn中的Scaler(归一化)
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android访问WebService(
- 下一篇: websocket python爬虫_p