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
or1
based on a parameterthreshold
.
注意
如需不同資料集離散化的視覺化效果,請參閱 特徵離散化。如需關於離散化對線性模型的影響,請參閱: 使用 KBinsDiscretizer 將連續特徵離散化。
在特徵
i
的箱子邊緣中,第一個和最後一個值僅用於inverse_transform
。在轉換期間,箱子邊緣會擴展為np.concatenate([-np.inf, bin_edges_[i][1:-1], np.inf])
如果您只想預先處理部分特徵,您可以將
KBinsDiscretizer
與ColumnTransformer
結合使用。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_params
的X
和y
,並回傳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_features
為None
,則使用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
fit
中sample_weight
參數的中繼資料路由。
- 回傳值:
- self物件
更新後的物件。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
請參閱 介紹 set_output API,以取得如何使用 API 的範例。
- 參數:
- transform{“default”, “pandas”, “polars”},預設值為 None
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換配置保持不變
在版本 1.4 中新增:新增了
"polars"
選項。
- 回傳值:
- self估算器實例
估算器實例。