# 4.7. 成對的矩陣, 類別和核函數
校驗者:
[@FontTian](https://github.com/FontTian)
[@numpy](https://github.com/apachecn/scikit-learn-doc-zh)
翻譯者:
[@程威](https://github.com/apachecn/scikit-learn-doc-zh)
The [`sklearn.metrics.pairwise`](classes.html#module-sklearn.metrics.pairwise "sklearn.metrics.pairwise") 子模塊實現了用于評估成對距離或樣本集合之間的聯系的實用程序。
本模塊同時包含距離度量和核函數,對于這兩者這里提供一個簡短的總結。
距離度量是形如 `d(a, b)` 例如 `d(a, b) < d(a, c)`如果對象 `a` 和 `b` 被認為 “更加相似” 相比于 `a`和 `c`. 兩個完全相同的目標的距離是零。最廣泛使用的例子就是歐幾里得距離。 為了保證是 ‘真實的’ 度量, 其必須滿足以下條件:
> 1. 對于所有的 a 和 b,d(a, b) >= 0
> 2. 正定性:當且僅當 a = b時,d(a, b) == 0
> 3. 對稱性:d(a, b) == d(b, a)
> 4. 三角不等式:d(a, c) <= d(a, b) + d(b, c)
核函數是相似度的標準. 如果對象 `a` 和 `b` 被認為 “更加相似” 相比對象 `a` 和 `c`,那么 `s(a, b) > s(a, c)`. 核函數必須是半正定性的.
存在許多種方法將距離度量轉換為相似度標準,例如核函數。 假定 `D` 是距離, and `S` 是核函數:
> 1. `S = np.exp(-D * gamma)`, 其中 `gamma` 的一種選擇是 `1 / num_features`
> 2. `S = 1. / (D / np.max(D))`
## 4.7.1. 余弦相似度
[`cosine_similarity`](generated/sklearn.metrics.pairwise.cosine_similarity.html#sklearn.metrics.pairwise.cosine_similarity "sklearn.metrics.pairwise.cosine_similarity") 計算L2正則化的向量的點積. 也就是說, if  和  都是行向量,, 它們的余弦相似度  定義為:

這被稱為余弦相似度, 因為歐幾里得(L2) 正則化將向量投影到單元球面內,那么它們的點積就是被向量表示的點之間的角度。
這種核函數對于計算以tf-idf向量表示的文檔之間的相似度是一個通常的選擇. [`cosine_similarity`](generated/sklearn.metrics.pairwise.cosine_similarity.html#sklearn.metrics.pairwise.cosine_similarity "sklearn.metrics.pairwise.cosine_similarity") 接受 `scipy.sparse` 矩陣. (注意到 `sklearn.feature_extraction.text`中的tf-idf函數能計算歸一化的向量,在這種情況下 [`cosine_similarity`](generated/sklearn.metrics.pairwise.cosine_similarity.html#sklearn.metrics.pairwise.cosine_similarity "sklearn.metrics.pairwise.cosine_similarity")等同于 [`linear_kernel`](generated/sklearn.metrics.pairwise.linear_kernel.html#sklearn.metrics.pairwise.linear_kernel "sklearn.metrics.pairwise.linear_kernel"), 只是慢一點而已.)
References:
- C.D. Manning, P. Raghavan and H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press. <http://nlp.stanford.edu/IR-book/html/htmledition/the-vector-space-model-for-scoring-1.html>
## 4.7.2. 線性核函數
函數 [`linear_kernel`](generated/sklearn.metrics.pairwise.linear_kernel.html#sklearn.metrics.pairwise.linear_kernel "sklearn.metrics.pairwise.linear_kernel") 是計算線性核函數, 也就是一種在 `degree=1` 和 `coef0=0` (同質化) 情況下的 [`polynomial_kernel`](generated/sklearn.metrics.pairwise.polynomial_kernel.html#sklearn.metrics.pairwise.polynomial_kernel "sklearn.metrics.pairwise.polynomial_kernel") 的特殊形式. 如果 `x` 和 `y` 是列向量, 它們的線性核函數是:

## 4.7.3. 多項式核函數
函數 [`polynomial_kernel`](generated/sklearn.metrics.pairwise.polynomial_kernel.html#sklearn.metrics.pairwise.polynomial_kernel "sklearn.metrics.pairwise.polynomial_kernel") 計算兩個向量的d次方的多項式核函數. 多項式核函數代表著兩個向量之間的相似度.概念上來說,多項式核函數不僅考慮相同維度還考慮跨維度的向量的相似度。當被用在機器學習中的時候,這可以原來代表著特征之間的 相互作用。多項式函數定義為:

其中:
> - `x`, `y` 是輸入向量
> - `d` 核函數維度
如果  那么核函數就被定義為同質化的.
## 4.7.4. Sigmoid 核函數
函數 [`sigmoid_kernel`](generated/sklearn.metrics.pairwise.sigmoid_kernel.html#sklearn.metrics.pairwise.sigmoid_kernel "sklearn.metrics.pairwise.sigmoid_kernel") 計算兩個向量之間的S型核函數. S型核函數也被稱為雙曲切線或者 多層感知機(因為在神經網絡領域,它經常被當做激活函數). S型核函數定義為:

where:
> - `x`, `y` 是輸入向量
> -  是斜度
> -  是截距
## 4.7.5. RBF 核函數
函數 [`rbf_kernel`](generated/sklearn.metrics.pairwise.rbf_kernel.html#sklearn.metrics.pairwise.rbf_kernel "sklearn.metrics.pairwise.rbf_kernel") 計算計算兩個向量之間的徑向基函數核 (RBF) 。 其定義為:

其中 `x` 和 `y` 是輸入向量. 如果 核函數就變成方差為  的高斯核函數.
## 4.7.6. 拉普拉斯核函數
函數 [`laplacian_kernel`](generated/sklearn.metrics.pairwise.laplacian_kernel.html#sklearn.metrics.pairwise.laplacian_kernel "sklearn.metrics.pairwise.laplacian_kernel") 是一種徑向基函數核的變體,定義為:

其中 `x` 和 `y` 是輸入向量 并且  是輸入向量之間的曼哈頓距離.
已被證明在機器學習中運用到無噪聲數據中是有用的. 可見例如 [Machine learning for quantum mechanics in a nutshell](http://onlinelibrary.wiley.com/doi/10.1002/qua.24954/abstract/).
## 4.7.7. 卡方核函數
在計算機視覺應用中訓練非線性支持向量機時,卡方核函數是一種非常流行的選擇.它能以 [`chi2_kernel`](generated/sklearn.metrics.pairwise.chi2_kernel.html#sklearn.metrics.pairwise.chi2_kernel "sklearn.metrics.pairwise.chi2_kernel") 計算然后將參數 [``](#id7)kernel=”precomputed”[``](#id9)傳遞到[`sklearn.svm.SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "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.36..., 0.89..., 0.58...],
[ 0.36..., 1. , 0.51..., 0.83...],
[ 0.89..., 0.51..., 1. , 0.77... ],
[ 0.58..., 0.83..., 0.77... , 1. ]])
```
```
>>> svm = SVC(kernel='precomputed').fit(K, y)
>>> svm.predict(K)
array([0, 1, 0, 1])
```
也可以直接使用 `kernel` 變量:
```
>>> svm = SVC(kernel=chi2_kernel).fit(X, y)
>>> svm.predict(X)
array([0, 1, 0, 1])
```
卡方核函數定義為
![k(x, y) = \exp \left (-\gamma \sum_i \frac{(x[i] - y[i]) ^ 2}{x[i] + y[i]} \right )](https://box.kancloud.cn/c2d76f4ffd47c5da52a70aa4e3d4757d_286x55.jpg)
數據假定為非負的,并且已經以L1正則化。 歸一化隨著與卡方平方距離的連接而被合理化,其是離散概率分布之間的距離。
卡方核函數最常用于可視化詞匯的矩形圖。
參考:
- 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 <http://research.microsoft.com/en-us/um/people/manik/projects/trade-off/papers/ZhangIJCV06.pdf>
- scikit-learn 0.19 中文文檔
- 用戶指南
- 1. 監督學習
- 1.1. 廣義線性模型
- 1.2. 線性和二次判別分析
- 1.3. 內核嶺回歸
- 1.4. 支持向量機
- 1.5. 隨機梯度下降
- 1.6. 最近鄰
- 1.7. 高斯過程
- 1.8. 交叉分解
- 1.9. 樸素貝葉斯
- 1.10. 決策樹
- 1.11. 集成方法
- 1.12. 多類和多標簽算法
- 1.13. 特征選擇
- 1.14. 半監督學習
- 1.15. 等式回歸
- 1.16. 概率校準
- 1.17. 神經網絡模型(有監督)
- 2. 無監督學習
- 2.1. 高斯混合模型
- 2.2. 流形學習
- 2.3. 聚類
- 2.4. 雙聚類
- 2.5. 分解成分中的信號(矩陣分解問題)
- 2.6. 協方差估計
- 2.7. 經驗協方差
- 2.8. 收斂協方差
- 2.9. 稀疏逆協方差
- 2.10. Robust 協方差估計
- 2.11. 新奇和異常值檢測
- 2.12. 密度估計
- 2.13. 神經網絡模型(無監督)
- 3. 模型選擇和評估
- 3.1. 交叉驗證:評估估算器的表現
- 3.2. 調整估計器的超參數
- 3.3. 模型評估: 量化預測的質量
- 3.4. 模型持久化
- 3.5. 驗證曲線: 繪制分數以評估模型
- 4. 數據集轉換
- 4.1. Pipeline(管道)和 FeatureUnion(特征聯合): 合并的評估器
- 4.2. 特征提取
- 4.3. 預處理數據
- 4.4. 無監督降維
- 4.5. 隨機投影
- 4.6. 內核近似
- 4.7. 成對的矩陣, 類別和核函數
- 4.8. 預測目標 (y) 的轉換
- 5. 數據集加載工具
- 6. 大規模計算的策略: 更大量的數據
- 7. 計算性能
- 教程
- 使用 scikit-learn 介紹機器學習
- 關于科學數據處理的統計學習教程
- 機器學習: scikit-learn 中的設置以及預估對象
- 監督學習:從高維觀察預測輸出變量
- 模型選擇:選擇估計量及其參數
- 無監督學習: 尋求數據表示
- 把它們放在一起
- 尋求幫助
- 處理文本數據
- 選擇正確的評估器(estimator)
- 外部資源,視頻和談話