邻域成分分析#

class sklearn.neighbors.NeighborhoodComponentsAnalysis(n_components=None, *, init='auto', warm_start=False, max_iter=50, tol=1e-05, callback=None, verbose=0, random_state=None)[source]#

邻域成分分析(NCA)。

邻域成分分析(NCA)是一种用于度量学习的机器学习算法。它以监督方式学习线性变换,以提高变换空间中随机最近邻规则的分类准确率。

更多信息请参阅用户指南

参数:
n_componentsint, 默认值=None

投影空间的首选维度。如果为 None,则会设置为 n_features

init{‘auto’, ‘pca’, ‘lda’, ‘identity’, ‘random’} 或 形状为 (n_features_a, n_features_b) 的 ndarray, 默认值='auto'

线性变换的初始化。可能的选项包括 'auto', 'pca', 'lda', 'identity', 'random',以及形状为 (n_features_a, n_features_b) 的 numpy 数组。

  • 'auto'

    根据 n_components 的值,选择最合理的初始化方式。如果 n_components <= min(n_features, n_classes - 1),我们使用 'lda',因为它使用标签信息。否则,如果 n_components < min(n_features, n_samples),我们使用 'pca',因为它将数据投影到有意义的方向(方差更高的方向)。否则,我们只使用 'identity'

  • 'pca'

    传递给 fit 的输入的 n_components 个主成分将用于初始化变换。(参见 PCA

  • 'lda'

    传递给 fit 的输入中 min(n_components, n_classes) 个最具判别力的成分将用于初始化变换。(如果 n_components > n_classes,其余成分将为零。)(参见 LinearDiscriminantAnalysis

  • 'identity'

    如果 n_components 严格小于传递给 fit 的输入的维度,单位矩阵将被截断为前 n_components 行。

  • 'random'

    初始变换将是形状为 (n_components, n_features) 的随机数组。每个值都从标准正态分布中采样。

  • numpy 数组

    n_features_b 必须与传递给 fit 的输入的维度匹配,并且 n_features_a 必须小于或等于该维度。如果 n_components 不为 None,则 n_features_a 必须与之匹配。

warm_startbool, 默认值=False

如果为 True 且之前已调用过 fit,则前一次 fit 调用的解决方案将用作初始线性变换(n_componentsinit 将被忽略)。

max_iterint, 默认值=50

优化中的最大迭代次数。

tolfloat, 默认值=1e-5

优化的收敛容差。

callback可调用, 默认值=None

如果不为 None,则此函数在优化器的每次迭代后被调用,参数为当前解决方案(扁平化变换矩阵)和迭代次数。如果需要检查或存储每次迭代后找到的变换,这可能很有用。

verboseint, 默认值=0

如果为 0,则不打印进度消息。如果为 1,则将进度消息打印到标准输出。如果大于 1,则打印进度消息,并将 scipy.optimize.minimizedisp 参数设置为 verbose - 2

random_stateint 或 numpy.RandomState, 默认值=None

一个伪随机数生成器对象,或其整数种子。如果 init='random',则使用 random_state 初始化随机变换。如果 init='pca',则在初始化变换时,random_state 作为参数传递给 PCA。传入整数以确保在多次函数调用中结果可重现。参见 术语表

属性:
components_形状为 (n_components, n_features) 的 ndarray

在拟合期间学习到的线性变换。

n_features_in_int

拟合 期间看到的特征数量。

自 0.24 版新增。

n_iter_int

统计优化器执行的迭代次数。

random_state_numpy.RandomState

初始化期间使用的伪随机数生成器对象。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合 期间看到的特征名称。仅当 X 的所有特征名称均为字符串时才定义。

自 1.0 版新增。

另请参见

sklearn.discriminant_analysis.LinearDiscriminantAnalysis

线性判别分析。

sklearn.decomposition.PCA

主成分分析(PCA)。

参考文献

[1]

J. Goldberger, G. Hinton, S. Roweis, R. Salakhutdinov. “邻域成分分析”. Advances in Neural Information Processing Systems. 17, 513-520, 2005. http://www.cs.nyu.edu/~roweis/papers/ncanips.pdf

[2]

维基百科关于邻域成分分析的条目 https://en.wikipedia.org/wiki/Neighbourhood_components_analysis

示例

>>> from sklearn.neighbors import NeighborhoodComponentsAnalysis
>>> from sklearn.neighbors import KNeighborsClassifier
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y,
... stratify=y, test_size=0.7, random_state=42)
>>> nca = NeighborhoodComponentsAnalysis(random_state=42)
>>> nca.fit(X_train, y_train)
NeighborhoodComponentsAnalysis(...)
>>> knn = KNeighborsClassifier(n_neighbors=3)
>>> knn.fit(X_train, y_train)
KNeighborsClassifier(...)
>>> print(knn.score(X_test, y_test))
0.933333...
>>> knn.fit(nca.transform(X_train), y_train)
KNeighborsClassifier(...)
>>> print(knn.score(nca.transform(X_test), y_test))
0.961904...
fit(X, y)[source]#

根据给定的训练数据拟合模型。

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

训练样本。

y形状为 (n_samples,) 的类数组

对应的训练标签。

返回值:
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_featuresstr 或 None 的类数组, 默认值=None

仅用于根据 fit 中看到的名称验证特征名称。

返回值:
feature_names_outstr 对象的 ndarray

变换后的特征名称。

get_metadata_routing()[source]#

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

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

返回值:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, 默认值=True

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

返回值:
paramsdict

参数名称及其对应值的映射。

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

设置输出容器。

有关如何使用此 API 的示例,请参阅set_output 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> 形式的参数,以便可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回值:
self估计器实例

估计器实例。

transform(X)[source]#

将学习到的变换应用于给定数据。

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

数据样本。

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

变换后的数据样本。

抛出:
NotFittedError

如果之前未调用过 fit