NeighborhoodComponentsAnalysis#

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) 是一種用於度量學習的機器學習演算法。它以監督方式學習線性轉換,以提高轉換空間中隨機最近鄰規則的分類準確性。

請在使用者指南中閱讀更多資訊。

參數:
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

最佳化的收斂容差。

callbackcallable,預設值=None

如果不是 None,則會在最佳化器的每次迭代後呼叫此函式,並將目前解(扁平轉換矩陣)和迭代次數作為引數。如果想要檢查或儲存每次迭代後找到的轉換,這可能會很有用。

verboseint,預設值=0

如果為 0,則不會列印任何進度訊息。如果為 1,則會將進度訊息列印到 stdout。如果 > 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

fit 期間看到的特徵數量。

在 0.24 版本中新增。

n_iter_int

計算最佳化器執行的迭代次數。

random_state_numpy.RandomState

初始化期間使用的虛擬隨機數生成器物件。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。只有當 X 的特徵名稱都是字串時才定義。

在 1.0 版本中新增。

另請參閱

sklearn.discriminant_analysis.LinearDiscriminantAnalysis

線性判別分析。

sklearn.decomposition.PCA

主成分分析 (PCA)。

參考文獻

[1]

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

[2]

Wikipedia 上關於鄰域成分分析的條目 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)[原始碼]#

根據給定的訓練資料擬合模型。

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

訓練樣本。

y形狀為 (n_samples,) 的類陣列

對應的訓練標籤。

返回:
self物件

已擬合的估算器。

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

擬合資料,然後轉換它。

使用可選參數 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)[原始碼]#

取得轉換的輸出特徵名稱。

輸出特徵名稱將以小寫的類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出特徵名稱為:["class_name0", "class_name1", "class_name2"]

參數:
input_features字串或 None 的類陣列,預設值=None

僅用於使用在 fit 中看到的名稱來驗證特徵名稱。

返回:
feature_names_out字串物件的 ndarray

轉換後的特徵名稱。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看使用指南,了解路由機制如何運作。

返回:
routingMetadataRequest

封裝路由資訊的MetadataRequest

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deepbool,預設值=True

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

返回:
paramsdict

對應到其值的參數名稱。

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) 的類陣列

資料樣本。

返回:
X_embedded:形狀為 (n_samples, n_components) 的 ndarray

已轉換的資料樣本。

引發:
NotFittedError

如果之前未呼叫fit