KBinsDiscretizer#

class sklearn.preprocessing.KBinsDiscretizer(n_bins=5, *, encode='onehot', strategy='quantile', dtype=None, subsample=200000, random_state=None)[原始碼]#

將連續資料分箱成區間。

更多資訊請參閱使用者指南

於 0.20 版本加入。

參數:
n_binsint 或形狀為 (n_features,) 的類陣列,預設值為 5

要產生的箱數。如果 n_bins < 2,則會引發 ValueError。

encode{‘onehot’, ‘onehot-dense’, ‘ordinal’},預設值為 ‘onehot’

用於編碼轉換結果的方法。

  • ‘onehot’:使用 one-hot 編碼對轉換結果進行編碼,並回傳稀疏矩陣。忽略的特徵會永遠堆疊在右側。

  • ‘onehot-dense’:使用 one-hot 編碼對轉換結果進行編碼,並回傳密集陣列。忽略的特徵會永遠堆疊在右側。

  • ‘ordinal’:回傳編碼為整數值的箱子識別碼。

strategy{‘uniform’, ‘quantile’, ‘kmeans’},預設值為 ‘quantile’

用於定義箱子寬度的策略。

  • ‘uniform’:每個特徵中的所有箱子都具有相同的寬度。

  • ‘quantile’:每個特徵中的所有箱子都具有相同數量的點。

  • ‘kmeans’:每個箱子中的值都具有 1D k-means 叢集的相同最近中心。

關於不同策略的範例,請參閱: 展示 KBinsDiscretizer 的不同策略

dtype{np.float32, np.float64},預設值為 None

輸出的期望資料類型。如果為 None,則輸出資料類型與輸入資料類型一致。僅支援 np.float32 和 np.float64。

於 0.24 版本加入。

subsampleint 或 None,預設值為 200_000

用於擬合模型的最大樣本數,以提高計算效率。subsample=None 表示在計算決定分箱閾值的量化值時,會使用所有訓練樣本。由於量化值計算依賴於對 X 的每個列進行排序,而該排序的時間複雜度為 n log(n),因此建議在具有大量樣本的資料集上使用子樣本。

變更於 1.3 版本:strategy="quantile" 時,subsample 的預設值從 None 變更為 200_000

變更於 1.5 版本:strategy="uniform"strategy="kmeans" 時,subsample 的預設值從 None 變更為 200_000

random_stateint、RandomState 實例或 None,預設值為 None

決定子取樣的隨機數產生。傳遞一個 int 以在多個函數呼叫中產生可重現的結果。如需更多詳細資訊,請參閱 subsample 參數。請參閱詞彙表

於 1.1 版本加入。

屬性:
bin_edges_形狀為 (n_features,) 的 ndarray 陣列

每個箱子的邊緣。包含形狀各異的陣列 (n_bins_, )。忽略的特徵將具有空陣列。

n_bins_形狀為 (n_features,) 的 ndarray,dtype=np.int64

每個特徵的箱數。寬度太小(即 <= 1e-8)的箱子將被移除並發出警告。

n_features_in_int

fit期間看到的特徵數。

於 0.24 版本加入。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

於 1.0 版本加入。

另請參閱

Binarizer

Class used to bin values as 0 or 1 based on a parameter threshold.

注意

如需不同資料集離散化的視覺化效果,請參閱 特徵離散化。如需關於離散化對線性模型的影響,請參閱: 使用 KBinsDiscretizer 將連續特徵離散化

在特徵 i 的箱子邊緣中,第一個和最後一個值僅用於 inverse_transform。在轉換期間,箱子邊緣會擴展為

np.concatenate([-np.inf, bin_edges_[i][1:-1], np.inf])

如果您只想預先處理部分特徵,您可以將 KBinsDiscretizerColumnTransformer 結合使用。

KBinsDiscretizer 可能會產生恆定特徵(例如,當 encode = 'onehot' 且某些箱子不包含任何資料時)。可以使用特徵選擇演算法(例如,VarianceThreshold)移除這些特徵。

範例

>>> from sklearn.preprocessing import KBinsDiscretizer
>>> X = [[-2, 1, -4,   -1],
...      [-1, 2, -3, -0.5],
...      [ 0, 3, -2,  0.5],
...      [ 1, 4, -1,    2]]
>>> est = KBinsDiscretizer(
...     n_bins=3, encode='ordinal', strategy='uniform'
... )
>>> est.fit(X)
KBinsDiscretizer(...)
>>> Xt = est.transform(X)
>>> Xt  
array([[ 0., 0., 0., 0.],
       [ 1., 1., 1., 0.],
       [ 2., 2., 2., 1.],
       [ 2., 2., 2., 2.]])

有時,將資料轉換回原始特徵空間可能會很有用。inverse_transform 函數會將分箱資料轉換回原始特徵空間。每個值將等於兩個箱子邊緣的平均值。

>>> est.bin_edges_[0]
array([-2., -1.,  0.,  1.])
>>> est.inverse_transform(Xt)
array([[-1.5,  1.5, -3.5, -0.5],
       [-0.5,  2.5, -2.5, -0.5],
       [ 0.5,  3.5, -1.5,  0.5],
       [ 0.5,  3.5, -1.5,  1.5]])
fit(X, y=None, sample_weight=None)[原始碼]#

擬合估計器。

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

要離散化的資料。

yNone

忽略。此參數僅為與 Pipeline 相容而存在。

sample_weight形狀為 (n_samples,) 的 ndarray

包含與每個樣本相關聯的權重值。當 strategy 設定為 "uniform" 時無法使用。

在版本 1.3 中新增。

回傳值:
self物件

回傳實例本身。

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

擬合資料,然後轉換資料。

將轉換器擬合到帶有可選參數 fit_paramsXy,並回傳 X 的轉換版本。

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

輸入樣本。

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)[原始碼]#

取得此估計器的參數。

參數:
deepbool,預設值為 True

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

回傳值:
params字典

參數名稱對應到它們的值。

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

將離散化的資料轉換回原始特徵空間。

請注意,由於離散化捨入,此函數不會重新產生原始資料。

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

分箱空間中轉換後的資料。

Xt形狀為 (n_samples, n_features) 的類陣列

分箱空間中轉換後的資料。

自 1.5 版起已棄用:Xt 在 1.5 版中已棄用,並將在 1.7 版中移除。請改用 X

回傳值:
Xinvndarray,dtype={np.float32, np.float64}

原始特徵空間中的資料。

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

請求傳遞到 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_output(*, transform=None)[原始碼]#

設定輸出容器。

請參閱 介紹 set_output API,以取得如何使用 API 的範例。

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

設定 transformfit_transform 的輸出。

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

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換配置保持不變

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

回傳值:
self估算器實例

估算器實例。

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

設定此估算器的參數。

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

參數:
**paramsdict

估算器參數。

回傳值:
self估算器實例

估算器實例。

transform(X)[原始碼]#

離散化數據。

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

要離散化的資料。

回傳值:
Xt{ndarray, 稀疏矩陣}, dtype={np.float32, np.float64}

分箱空間中的數據。如果 self.encode='onehot',則為稀疏矩陣,否則為 ndarray。