稀疏编码器#

class sklearn.decomposition.SparseCoder(dictionary, *, transform_algorithm='omp', transform_n_nonzero_coefs=None, transform_alpha=None, split_sign=False, n_jobs=None, positive_code=False, transform_max_iter=1000)[source]#

稀疏编码。

针对固定的、预先计算好的字典,查找数据的稀疏表示。

结果的每一行都是一个稀疏编码问题的解。目标是找到一个稀疏数组 code,使得

X ~= code * dictionary

更多信息请参见用户指南

参数:
dictionary形状为 (n_components, n_features) 的ndarray

用于稀疏编码的字典原子。假设各行已归一化为单位范数。

transform_algorithm{‘lasso_lars’, ‘lasso_cd’, ‘lars’, ‘omp’, ‘threshold’}, 默认值为’omp’

用于转换数据的算法

  • 'lars':使用最小角回归法(linear_model.lars_path);

  • 'lasso_lars':使用Lars计算Lasso解;

  • 'lasso_cd':使用坐标下降法计算Lasso解(linear_model.Lasso)。如果估计的成分是稀疏的,则'lasso_lars'会更快;

  • 'omp':使用正交匹配追踪来估计稀疏解;

  • 'threshold':将投影dictionary * X'中所有小于alpha的系数压缩为零。

transform_n_nonzero_coefsint,默认值为None

目标在解的每一列中获得的非零系数的数量。这仅用于algorithm='lars'algorithm='omp',并且在omp情况下会被alpha覆盖。如果为None,则transform_n_nonzero_coefs=int(n_features / 10)

transform_alphafloat,默认值为None

如果algorithm='lasso_lars'algorithm='lasso_cd'alpha是应用于L1范数的惩罚。如果algorithm='threshold'alpha是系数将被压缩为零的阈值绝对值。如果algorithm='omp'alpha是容差参数:目标重建误差的值。在这种情况下,它会覆盖n_nonzero_coefs。如果None,则默认为1。

split_signbool,默认值为False

是否将稀疏特征向量拆分为其负部分和正部分的串联。这可以提高下游分类器的性能。

n_jobsint,默认值为None

要运行的并行作业数。None表示1(除非在joblib.parallel_backend 上下文中)。-1表示使用所有处理器。有关更多详细信息,请参见词汇表

positive_codebool,默认值为False

查找代码时是否强制执行正数。

在版本0.20中添加。

transform_max_iterint,默认值为1000

如果algorithm='lasso_cd'lasso_lars,则执行的最大迭代次数。

在版本0.22中添加。

属性:
n_components_int

原子的数量。

n_features_in_int

fit期间看到的特征数量。

feature_names_in_形状为 (n_features_in_,) 的ndarray

fit期间看到的特征名称。仅当X具有全是字符串的特征名称时才定义。

在版本1.0中添加。

另请参见

DictionaryLearning

查找稀疏编码数据的字典。

MiniBatchDictionaryLearning

字典学习算法更快、但不太精确的版本。

MiniBatchSparsePCA

小批量稀疏主成分分析。

SparsePCA

稀疏主成分分析。

sparse_encode

稀疏编码,其中结果的每一行都是稀疏编码问题的解。

示例

>>> import numpy as np
>>> from sklearn.decomposition import SparseCoder
>>> X = np.array([[-1, -1, -1], [0, 0, 3]])
>>> dictionary = np.array(
...     [[0, 1, 0],
...      [-1, -1, 2],
...      [1, 1, 1],
...      [0, 1, 1],
...      [0, 2, 1]],
...    dtype=np.float64
... )
>>> coder = SparseCoder(
...     dictionary=dictionary, transform_algorithm='lasso_lars',
...     transform_alpha=1e-10,
... )
>>> coder.transform(X)
array([[ 0.,  0., -1.,  0.,  0.],
       [ 0.,  1.,  1.,  0.,  0.]])
fit(X, y=None)[source]#

不做任何操作并返回未更改的估计器。

此方法只是为了实现通常的API,从而在管道中工作。

参数:
X忽略

未使用,出于约定,为了API一致性而存在。

y忽略

未使用,出于约定,为了API一致性而存在。

返回:
self对象

返回实例本身。

fit_transform(X, y=None, **fit_params)[source]#

拟合数据,然后转换它。

使用可选参数fit_params将转换器拟合到Xy,并返回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]#

获取转换后的特征名称。

输出的特征名称将以小写的类名作为前缀。例如,如果转换器输出3个特征,则输出的特征名称为:["class_name0", "class_name1", "class_name2"]

参数:
input_features类似数组的字符串或None,默认为None

仅用于使用在fit中看到的名称验证特征名称。

返回:
feature_names_out字符串对象的ndarray

转换后的特征名称。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看用户指南了解路由机制的工作原理。

返回:
routingMetadataRequest

一个MetadataRequest 封装路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认为True

如果为True,则将返回此估计器和包含的作为估计器的子对象的参数。

返回:
params字典

参数名称与其值的映射。

property n_components_#

原子的数量。

property n_features_in_#

fit期间看到的特征数量。

set_output(*, transform=None)[source]#

设置输出容器。

请参见介绍set_output API了解如何使用API的示例。

参数:
transform{"default", "pandas", "polars"},默认为None

配置transformfit_transform的输出。

  • "default":转换器的默认输出格式

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:转换配置保持不变

1.4版本中新增:"polars" 选项已添加。

返回:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如Pipeline)。后者具有<component>__<parameter>形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X, y=None)[source]#

将数据编码为字典原子的稀疏组合。

编码方法由对象参数transform_algorithm确定。

参数:
X形状为(n_samples, n_features) 的ndarray

训练向量,其中n_samples是样本数,n_features是特征数。

y忽略

未使用,出于约定,为了API一致性而存在。

返回:
X_new形状为(n_samples, n_components) 的ndarray

转换后的数据。