python中的scaler_【笔记】scikit-learn中的Scaler(归一化)
scikit-learn中的數據歸一化
在機器學習使用數據歸一化的時候有一個重要的注意事項
我們對訓練數據進行均值和方差的處理,得到mean_train以及std_train,但是在對測試數據進行歸一化的時候,是不能直接用測試數據的均值和方差來進行歸一化的,應該使用訓練數據的均值和方差對測試數據進行均值方差歸一化
為什么要這樣做呢,我們訓練這個模型是為了在真實的環境中去使用的,測試數據是模擬真實的環境,但是真實環境很有可能是沒法得到所有的測試數據的均值和方差的,是很難得到這種統計數據的,另外,對數據的歸一化也是算法的一部分,我們針對后面來的數據,應該也對其進行這樣的處理
那么我們就必須要保存訓練數據集得到的均值和方差
整體流程
實際操作(以鳶尾花為例)
x前十行的內容(并未進行歸一化處理)
scikit-learn中的standardscaler
想調用,只需要
from sklearn.preprocessing import StandardScaler
創建一個實例
standardScaler = StandardScaler()
進行fit操作,其包含了很多的信息
standardScaler.fit(X_train)
數組的均值(對應的四個特征的均值)
對于mean_的_,對于是由用戶傳進去的變量計算得到的,用戶可以隨時在外圍進行查詢的,在后面要有_才行
方差
standardScaler.std_
這個我的版本已經棄用了,使用的話會報錯
標準差
standardScaler.scale_
現在可以正式使用transform進行數據歸一化處理
注意:這樣處理以后,X_train實際上沒有進行變化
使用
X_train = standardScaler.transform(X_train)
就可以使X_train保存下歸一化以后的矩陣了
在對訓練矩陣進行歸一化
X_test_standard = standardScaler.transform(X_test)
使用knn算法進行預測分析準確率
值得注意的是,當我們用歸一化以后的訓練集來訓練機器算法之后,我們在預測的時候,測試數據集必須同樣進行歸一化,不然的話準確率會相當的低
在pc中手動寫出可以實現的歸一化
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
總結
以上是生活随笔為你收集整理的python中的scaler_【笔记】scikit-learn中的Scaler(归一化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android访问WebService(
- 下一篇: 互联网金融专业术语知多少?