scikit-learn 成對(duì)度量,近似關(guān)系和內(nèi)核

2023-02-20 14:40 更新

sklearn.metrics.pairwise子模塊工具的實(shí)用程序,以評(píng)估成對(duì)距離或樣品集的近似關(guān)系。

該模塊包含距離度量和內(nèi)核。這里對(duì)兩者進(jìn)行了簡(jiǎn)要總結(jié)。

距離度量函數(shù)d(a, b),如果對(duì)象ab被認(rèn)為比對(duì)象ac更相似 ,則d(a, b) < d(a, c)。兩個(gè)完全相同的對(duì)象的距離為零。最受歡迎的例子之一是歐幾里得距離。要成為“真實(shí)”指標(biāo),它必須滿足以下四個(gè)條件:

1. d(a, b) >= 0, for all a and b
2. d(a, b) == 0, if and only if a = b, positive definiteness
3. d(a, b) == d(b, a), symmetry
4. d(a, c) <= d(a, b) + d(b, c), the triangle inequality

核是相似度的量度,如果對(duì)象ab被視為比對(duì)象ac更為“相似” ,那么s(a, b) > s(a, c),內(nèi)核還必須是正半定數(shù)。

在距離度量和相似性度量之間進(jìn)行轉(zhuǎn)換的方法有很多種,例如核。設(shè)D距離,S為內(nèi)核:

  1. S = np.exp(-D * gamma),其中一個(gè)選擇 gamma的試探法是1 / num_features
  2. S = 1. / (D / np.max(D))

X的行向量和Y的行向量之間的距離可以使用pairwise_distances進(jìn)行計(jì)算。如果省略Y ,則計(jì)算X行向量的成對(duì)距離。同樣, pairwise.pairwise_kernels可用于使用不同的內(nèi)核函數(shù)計(jì)算X 以及Y核。有關(guān)更多詳細(xì)信息,請(qǐng)參見(jiàn)API參考。

>>> import numpy as np
>>> from sklearn.metrics import pairwise_distances
>>> from sklearn.metrics.pairwise import pairwise_kernels
>>> X = np.array([[2, 3], [3, 5], [5, 8]])
>>> Y = np.array([[1, 0], [2, 1]])
>>> pairwise_distances(X, Y, metric='manhattan')
array([[ 4.,  2.],
       [ 7.,  5.],
       [12., 10.]])
>>> pairwise_distances(X, metric='manhattan')
array([[0., 3., 8.],
       [3., 0., 5.],
       [8., 5., 0.]])
>>> pairwise_kernels(X, Y, metric='linear')
array([[ 2.,  7.],
       [ 3., 11.],
       [ 5., 18.]])

6.8.1 余弦相似度

cosine_similarity計(jì)算向量的L2正則化點(diǎn)積。也就是說(shuō),如果 是行向量,它們的余弦相似度 定義為:

之所以稱為余弦相似度,是因?yàn)闅W幾里得(L2)正則化將向量投影到單位球體上,然后它們的點(diǎn)積就是向量表示的點(diǎn)之間的角度的余弦值。

該內(nèi)核是用于計(jì)算以tf-idf向量表示的文檔的相似度的普遍選擇。cosine_similarity接受 scipy.sparse矩陣。(請(qǐng)注意,sklearn.feature_extraction.text 中的tf-idf函數(shù)可以生成規(guī)范的向量,在這種情況下,cosine_similarity 等效于linear_kernel,只是速度較慢。)

參考文獻(xiàn):

  • C.D. Manning, P. Raghavan和 H. Schütze (2008). 信息檢索簡(jiǎn)介.劍橋大學(xué)出版社。 https://nlp.stanford.edu/IR-book/html/htmledition/the-vector-space-model-for-scoring-1.html

6.8.2 線性核

linear_kernel函數(shù)計(jì)算線性核,是在 degree=1coef0=0(同質(zhì)化)情況下的polynomial_kernel的特例。如果xy是列向量,則它們的線性核為:

6.8.3 多項(xiàng)式核

polynomial_kernel函數(shù)計(jì)算兩個(gè)向量之間的度數(shù)多項(xiàng)式核。多項(xiàng)式核代表兩個(gè)向量之間的相似性。從概念上講,多項(xiàng)式內(nèi)核考慮的不僅是相同維度下向量之間的相似性,還考慮跨維度的。當(dāng)在機(jī)器學(xué)習(xí)算法中使用時(shí),這可以解決特征交互問(wèn)題。

多項(xiàng)式內(nèi)核定義為:

其中:

  • xy是輸入向量
  • d 是內(nèi)核維度

如果 則說(shuō)該內(nèi)核是同質(zhì)的。

6.8.4 Sigmoid核

sigmoid_kernel函數(shù)計(jì)算兩個(gè)向量之間的sigmoid核。sigmoid核也稱為雙曲線正切或多層感知器(因?yàn)樵谏窠?jīng)網(wǎng)絡(luò)領(lǐng)域,它經(jīng)常被用作神經(jīng)元激活函數(shù))。它定義為:

其中

  • xy是輸入向量
  • γ 被稱為斜率
  • c0 被稱為截距

6.8.5 RBF 核

rbf_kernel函數(shù)計(jì)算兩個(gè)向量之間的徑向基函數(shù)(RBF)內(nèi)核。該內(nèi)核定義為:

其中xy是輸入向量。如果 則該核稱為方差的高斯核 。

6.6.6 拉普拉斯核

laplacian_kernel函數(shù)是徑向基函數(shù)內(nèi)核的一個(gè)變體,定義為:

其中xy是輸入矢量, 是輸入向量之間的曼哈頓距離。

它已被證明在應(yīng)用于無(wú)噪聲數(shù)據(jù)的機(jī)器學(xué)習(xí)中很有用。例如機(jī)器學(xué)習(xí)中的量子力學(xué)。

6.8.7 卡方核

卡方核是在計(jì)算機(jī)視覺(jué)應(yīng)用中訓(xùn)練非線性SVM非常受歡迎的選擇??梢允褂?a rel="external nofollow" target="_blank" style="text-decoration: none; color: #1e6bb8; word-wrap: break-word; font-weight: bold; border-bottom: 1px solid #1e6bb8;">chi2_kernel計(jì)算,然后將 kernel="precomputed"傳遞給 sklearn.svm.SVC

>>> from sklearn.svm import SVC
>>> from sklearn.metrics.pairwise import chi2_kernel
>>> X = [[0, 1], [1, 0], [.2, .8], [.7, .3]]
>>> y = [0, 1, 0, 1]
>>> K = chi2_kernel(X, gamma=.5)
>>> K
array([[1.        , 0.36787944, 0.89483932, 0.58364548],
       [0.36787944, 1.        , 0.51341712, 0.83822343],
       [0.89483932, 0.51341712, 1.        , 0.7768366 ],
       [0.58364548, 0.83822343, 0.7768366 , 1.        ]])

>>> svm = SVC(kernel='precomputed').fit(K, y)
>>> svm.predict(K)
array([0, 1, 0, 1])

它也可以直接用作kernel參數(shù):

>>> svm = SVC(kernel=chi2_kernel).fit(X, y)
>>> svm.predict(X)
array([0, 1, 0, 1])

卡方核由下式給出

假定數(shù)據(jù)為非負(fù)數(shù),通常將其用L1范數(shù)標(biāo)準(zhǔn)化為1。通過(guò)與卡方距離的連接來(lái)合理化歸一化,卡方距離是離散概率分布之間的距離。

卡方核最常用于可視化詞匯的直方圖(袋)。

參考文獻(xiàn):

  • Zhang, J. and Marszalek, M. and Lazebnik, S. and Schmid, C. Local features and kernels for classification of texture and object categories: A comprehensive study International Journal of Computer Vision 2007 https://research.microsoft.com/en-us/um/people/manik/projects/trade-off/papers/ZhangIJCV06.pdf


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)