K箱离散化器#
- class sklearn.preprocessing.KBinsDiscretizer(n_bins=5, *, encode='onehot', strategy='quantile', dtype=None, subsample=200000, random_state=None)[source]#
- 将连续数据划分为区间。 - 更多信息请参见 用户指南。 - 版本 0.20 中新增。 - 参数:
- n_binsint 或 array-like,shape (n_features,),默认为 5
- 要生成的箱数。如果 - n_bins < 2,则引发 ValueError。
- encode{'onehot', 'onehot-dense', 'ordinal'},默认为 'onehot'
- 用于编码转换结果的方法。 - ‘onehot’:使用独热编码对转换结果进行编码并返回稀疏矩阵。被忽略的特征始终堆叠在右侧。 
- ‘onehot-dense’:使用独热编码对转换后的结果进行编码,并返回一个稠密数组。被忽略的特征始终堆叠在右侧。 
- ‘ordinal’:返回编码为整数值的箱标识符。 
 
- strategy{‘uniform’, ‘quantile’, ‘kmeans’}, default=’quantile’
- 用于定义箱宽度的策略。 - ‘uniform’:每个特征中的所有箱具有相同的宽度。 
- ‘quantile’:每个特征中的所有箱具有相同数量的点。 
- ‘kmeans’:每个箱中的值具有相同的 1D k 均值聚类的最近中心。 
 - 有关不同策略的示例,请参见:KBinsDiscretizer的不同策略演示。 
- dtype{np.float32, np.float64}, default=None
- 所需的输出数据类型。如果为 None,则输出 dtype 与输入 dtype 保持一致。仅支持 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
- 确定子采样的随机数生成。传递一个整数以在多次函数调用中获得可重复的结果。有关更多详细信息,请参见 - subsample参数。参见 词汇表。- 1.1 版本中新增。 
 
- 属性:
- bin_edges_形状为 (n_features,) 的 ndarray 数组
- 每个箱的边缘。包含形状 - (n_bins_, )各不相同的数组。被忽略的特征将具有空数组。
- n_bins_形状为 (n_features,),dtype=np.int64 的 ndarray
- 每个特征的箱数。宽度太小的箱(即 <= 1e-8)将发出警告并被移除。 
- n_features_in_int
- 在 拟合期间看到的特征数。 - 0.24 版本中新增。 
- feature_names_in_形状为 (n_features_in_,) 的 ndarray
- 在 拟合期间看到的特征名称。仅当 - X具有全是字符串的特征名称时才定义。- 1.0 版本中新增。 
 
 - 另请参阅 - 二值化器
- 用于基于参数 - threshold将值分箱为- 0或- 1的类。
 - 备注 - 有关在不同数据集上进行离散化的可视化,请参考 特征离散化。关于离散化对线性模型的影响,请参见:使用 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)[source]#
- 拟合估计器。 - 参数:
- X形状为 (n_samples, n_features) 的类数组
- 要离散化的数据。 
- yNone
- 忽略。此参数仅为了与 - Pipeline保持兼容性而存在。
- sample_weight形状为 (n_samples,) 的 ndarray
- 包含要与每个样本关联的权重值。当 - strategy设置为- "uniform"时,不能使用。- 1.3 版本中新增。 
 
- 返回:
- self对象
- 返回实例本身。 
 
 
 - fit_transform(X, y=None, **fit_params)[source]#
- 拟合数据,然后转换它。 - 将转换器拟合到 - X和- y,使用可选参数- fit_params,并返回- X的转换版本。- 参数:
- X形状为 (n_samples, n_features) 的类数组
- 输入样本。 
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组,默认为 None
- 目标值(对于无监督转换则为 None)。 
- **fit_paramsdict
- 附加拟合参数。 
 
- 返回:
- X_new形状为 (n_samples, n_features_new) 的ndarray 数组
- 转换后的数组。 
 
 
 - get_feature_names_out(input_features=None)[source]#
- 获取输出特征名称。 - 参数:
- input_featuresstr 类数组或 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_outstr 对象的ndarray
- 转换后的特征名称。 
 
 
 - get_metadata_routing()[source]#
- 获取此对象的元数据路由。 - 请查看用户指南,了解路由机制的工作原理。 - 返回:
- routingMetadataRequest
- 一个 - MetadataRequest,封装了路由信息。
 
 
 - get_params(deep=True)[source]#
- 获取此估计器的参数。 - 参数:
- deepbool,默认为 True
- 如果为 True,则将返回此估计器和作为估计器的包含子对象的参数。 
 
- 返回:
- paramsdict
- 参数名称与其值的映射。 
 
 
 - inverse_transform(X=None, *, Xt=None)[source]#
- 将离散化数据转换回原始特征空间。 - 请注意,由于离散化舍入,此函数不会重新生成原始数据。 - 参数:
- X形状为 (n_samples, n_features) 的类数组
- 分箱空间中的转换数据。 
- 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[source]#
- 请求传递到 - 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)[source]#
- 设置输出容器。 - 参见 set_output API 介绍,了解如何使用该 API 的示例。 - 参数:
- transform{“default”, “pandas”, “polars”}, default=None
- 配置 - transform和- fit_transform的输出。- "default": 变换器的默认输出格式
- "pandas": DataFrame 输出
- "polars": Polars 输出
- None: 变换配置不变
 - 版本 1.4 中新增: - "polars"选项已添加。
 
- 返回:
- self估计器实例
- 估计器实例。 
 
 
 
 
     
 
 
 
 
 
 
 
