StandardScaler#

class sklearn.preprocessing.StandardScaler(*, copy=True, with_mean=True, with_std=True)[原始碼]#

藉由移除平均值並縮放至單位變異數來標準化特徵。

樣本 x 的標準分數計算如下

z = (x - u) / s

其中 u 是訓練樣本的平均值,如果 with_mean=False 則為零,而 s 是訓練樣本的標準差,如果 with_std=False 則為一。

透過計算訓練集中樣本的相關統計數據,在每個特徵上獨立進行中心化和縮放。然後儲存平均值和標準差,以便使用 transform 用於後續資料。

資料集的標準化是許多機器學習估計器的常見要求:如果個別特徵看起來或多或少不像標準常態分佈資料(例如,平均值為 0 且單位變異數的高斯分佈),它們可能會表現不佳。

例如,學習演算法的目標函數中使用的許多元素(例如,支援向量機的 RBF 核或線性模型的 L1 和 L2 正規化器)假設所有特徵都以 0 為中心,且具有相同數量級的變異數。如果某個特徵的變異數比其他特徵大幾個數量級,則它可能會主導目標函數,並使估計器無法正確地從其他特徵中學習。

StandardScaler 對離群值敏感,並且在存在離群值的情況下,特徵可能會彼此以不同的方式縮放。有關範例視覺化,請參閱 比較 StandardScaler 與其他縮放器

也可以透過傳遞 with_mean=False 將此縮放器應用於稀疏 CSR 或 CSC 矩陣,以避免破壞資料的稀疏結構。

請在使用者指南中閱讀更多資訊。

參數:
copybool,預設值為 True

如果為 False,則嘗試避免複製並改為就地縮放。這不保證總是在原地工作;例如,如果資料不是 NumPy 陣列或 scipy.sparse CSR 矩陣,則仍可能傳回副本。

with_meanbool,預設值為 True

如果為 True,則在縮放之前將資料中心化。當嘗試在稀疏矩陣上執行此操作時,這將不起作用(並引發例外),因為對其進行中心化需要建構密集矩陣,而這在常見的使用案例中可能太大而無法容納在記憶體中。

with_stdbool,預設值為 True

如果為 True,則將資料縮放到單位變異數(或等效地,單位標準差)。

屬性:
scale_形狀為 (n_features,) 或 None 的 ndarray

每個特徵的資料相對縮放,以達到零平均值和單位變異數。通常使用 np.sqrt(var_) 計算此值。如果變異數為零,則無法達到單位變異數,且資料保持原樣,得到縮放因子為 1。scale_with_std=False 時等於 None

在版本 0.17 中新增:scale_

mean_形狀為 (n_features,) 或 None 的 ndarray

訓練集中每個特徵的平均值。當 with_mean=Falsewith_std=False 時,等於 None

var_形狀為 (n_features,) 或 None 的 ndarray

訓練集中每個特徵的變異數。用於計算 scale_。當 with_mean=Falsewith_std=False 時,等於 None

n_features_in_int

fit 期間看到的特徵數量。

在版本 0.24 中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當 X 具有都是字串的特徵名稱時才定義。

在版本 1.0 中新增。

n_samples_seen_int 或形狀為 (n_features,) 的 ndarray

每個特徵的估計器處理的樣本數量。如果沒有遺失的樣本,則 n_samples_seen 將為整數,否則將為 dtype int 的陣列。如果使用了 sample_weights,則它將是一個浮點數(如果沒有遺失的資料),或是到目前為止看到權重的總和的 dtype float 陣列。將在新的 fit 呼叫時重設,但在 partial_fit 呼叫時會遞增。

另請參閱

縮放

沒有估計器 API 的等效函數。

PCA

使用 'whiten=True' 進一步移除特徵之間的線性相關性。

注意事項

NaN 被視為遺失值:在擬合中被忽略,並在轉換中保留。

我們使用標準差的有偏估計量,相當於 numpy.std(x, ddof=0)。請注意,ddof 的選擇不太可能影響模型效能。

範例

>>> from sklearn.preprocessing import StandardScaler
>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]
>>> scaler = StandardScaler()
>>> print(scaler.fit(data))
StandardScaler()
>>> print(scaler.mean_)
[0.5 0.5]
>>> print(scaler.transform(data))
[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]
>>> print(scaler.transform([[2, 2]]))
[[3. 3.]]
fit(X, y=None, sample_weight=None)[原始碼]#

計算平均值和標準差,以用於稍後的縮放。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列,稀疏矩陣}

用於計算平均值和標準差的資料,用於稍後沿特徵軸縮放。

yNone

已忽略。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

每個樣本的個別權重。

在版本 0.24 中新增:參數 sample_weight 對 StandardScaler 的支援。

傳回:
self物件

已擬合的縮放器。

fit_transform(X, y=None, **fit_params)[原始碼]#

先擬合數據,然後轉換數據。

使用可選參數 fit_params 將轉換器擬合到 Xy,並返回 X 的轉換版本。

參數:
X形狀為 (n_samples, n_features) 的類陣列

輸入樣本。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值為 None

目標值(無監督轉換時為 None)。

**fit_params字典

額外的擬合參數。

傳回:
X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列

已轉換的陣列。

get_feature_names_out(input_features=None)[原始碼]#

取得轉換的輸出特徵名稱。

參數:
input_features字串或 None 的類陣列,預設值為 None

輸入特徵。

  • 如果 input_featuresNone,則使用 feature_names_in_ 作為輸入特徵名稱。 如果未定義 feature_names_in_,則會產生以下輸入特徵名稱:["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 是類陣列,則如果已定義 feature_names_in_input_features 必須與 feature_names_in_ 匹配。

傳回:
feature_names_out字串物件的 ndarray

與輸入特徵相同。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看使用手冊,瞭解路由機制如何運作。

傳回:
routingMetadataRequest

一個 MetadataRequest,封裝路由資訊。

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deep布林值,預設值為 True

如果為 True,則會傳回此估算器和其中包含的子物件(也是估算器)的參數。

傳回:
params字典

參數名稱對應到其值的字典。

inverse_transform(X, copy=None)[原始碼]#

將數據縮放回原始表示法。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列,稀疏矩陣}

用於沿特徵軸縮放的數據。

copy布林值,預設值為 None

是否複製輸入 X。

傳回:
X_tr形狀為 (n_samples, n_features) 的 {ndarray, 稀疏矩陣}

已轉換的陣列。

partial_fit(X, y=None, sample_weight=None)[原始碼]#

在 X 上線上計算均值和標準差,以便稍後縮放。

X 的所有內容都作為單一批次處理。 這適用於以下情況:當 fitn_samples 非常多而不可行,或者因為 X 是從連續串流讀取時。

Chan, Tony F.、Gene H. Golub 和 Randall J. LeVeque 在「計算樣本變異數的演算法:分析和建議」中第 1.5a,b 式給出了增量均值和標準差的演算法。《美國統計學家》37.3 (1983): 242-247

參數:
X形狀為 (n_samples, n_features) 的 {類陣列,稀疏矩陣}

用於計算平均值和標準差的資料,用於稍後沿特徵軸縮放。

yNone

已忽略。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

每個樣本的個別權重。

在版本 0.24 中新增:參數 sample_weight 對 StandardScaler 的支援。

傳回:
self物件

已擬合的縮放器。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StandardScaler[原始碼]#

請求傳遞至 fit 方法的中繼資料。

請注意,只有當 enable_metadata_routing=True 時,此方法才相關(請參閱sklearn.set_config)。 請查看使用手冊,瞭解路由機制如何運作。

每個參數的選項為

  • True:請求中繼資料,如果提供,則傳遞至 fit。 如果未提供中繼資料,則會忽略該請求。

  • False:不請求中繼資料,元估算器不會將其傳遞至 fit

  • None:不請求中繼資料,如果使用者提供,元估算器會引發錯誤。

  • str:中繼資料應使用此給定別名而不是原始名稱傳遞至元估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 保留現有的請求。 這可讓您變更某些參數的請求,而不是其他參數的請求。

在 1.3 版中新增。

注意

僅當此估算器用作元估算器的子估算器時(例如在Pipeline 中使用)時,此方法才相關。 否則,它沒有任何作用。

參數:
sample_weightstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

用於 fitsample_weight 參數的中繼資料路由。

傳回:
self物件

更新後的物件。

set_inverse_transform_request(*, copy: bool | None | str = '$UNCHANGED$') StandardScaler[原始碼]#

請求傳遞至 inverse_transform 方法的中繼資料。

請注意,只有當 enable_metadata_routing=True 時,此方法才相關(請參閱sklearn.set_config)。 請查看使用手冊,瞭解路由機制如何運作。

每個參數的選項為

  • True:請求中繼資料,並在提供時傳遞至 inverse_transform。如果未提供中繼資料,則會忽略請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞至 inverse_transform

  • None:不請求中繼資料,如果使用者提供,元估算器會引發錯誤。

  • str:中繼資料應使用此給定別名而不是原始名稱傳遞至元估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 保留現有的請求。 這可讓您變更某些參數的請求,而不是其他參數的請求。

在 1.3 版中新增。

注意

僅當此估算器用作元估算器的子估算器時(例如在Pipeline 中使用)時,此方法才相關。 否則,它沒有任何作用。

參數:
copystr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

inverse_transformcopy 參數的中繼資料路由。

傳回:
self物件

更新後的物件。

set_output(*, transform=None)[原始碼]#

設定輸出容器。

有關如何使用 API 的範例,請參閱 設定輸出 API 簡介

參數:
transform{“default”, “pandas”, “polars”},預設值為 None

設定 transformfit_transform 的輸出。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定不變

於 1.4 版本新增:新增了 "polars" 選項。

傳回:
self估計器實例

估計器實例。

set_params(**params)[原始碼]#

設定此估計器的參數。

此方法適用於簡單的估計器以及巢狀物件(例如 Pipeline)。後者具有 <元件>__<參數> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估計器參數。

傳回:
self估計器實例

估計器實例。

set_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StandardScaler[原始碼]#

請求傳遞至 partial_fit 方法的中繼資料。

請注意,只有當 enable_metadata_routing=True 時,此方法才相關(請參閱sklearn.set_config)。 請查看使用手冊,瞭解路由機制如何運作。

每個參數的選項為

  • True:請求中繼資料,並在提供時傳遞至 partial_fit。如果未提供中繼資料,則會忽略請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞至 partial_fit

  • None:不請求中繼資料,如果使用者提供,元估算器會引發錯誤。

  • str:中繼資料應使用此給定別名而不是原始名稱傳遞至元估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 保留現有的請求。 這可讓您變更某些參數的請求,而不是其他參數的請求。

在 1.3 版中新增。

注意

僅當此估算器用作元估算器的子估算器時(例如在Pipeline 中使用)時,此方法才相關。 否則,它沒有任何作用。

參數:
sample_weightstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

partial_fitsample_weight 參數的中繼資料路由。

傳回:
self物件

更新後的物件。

set_transform_request(*, copy: bool | None | str = '$UNCHANGED$') StandardScaler[原始碼]#

請求傳遞至 transform 方法的中繼資料。

請注意,只有當 enable_metadata_routing=True 時,此方法才相關(請參閱sklearn.set_config)。 請查看使用手冊,瞭解路由機制如何運作。

每個參數的選項為

  • True:請求中繼資料,並在提供時傳遞至 transform。如果未提供中繼資料,則會忽略請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞至 transform

  • None:不請求中繼資料,如果使用者提供,元估算器會引發錯誤。

  • str:中繼資料應使用此給定別名而不是原始名稱傳遞至元估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 保留現有的請求。 這可讓您變更某些參數的請求,而不是其他參數的請求。

在 1.3 版中新增。

注意

僅當此估算器用作元估算器的子估算器時(例如在Pipeline 中使用)時,此方法才相關。 否則,它沒有任何作用。

參數:
copystr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

transformcopy 參數的中繼資料路由。

傳回:
self物件

更新後的物件。

transform(X, copy=None)[原始碼]#

透過置中和縮放執行標準化。

參數:
X{array-like, 稀疏矩陣,形狀為 (n_samples, n_features)}

用於沿特徵軸縮放的數據。

copy布林值,預設值為 None

是否複製輸入 X。

傳回:
X_tr形狀為 (n_samples, n_features) 的 {ndarray, 稀疏矩陣}

已轉換的陣列。