# 4.6. 內核近似
校驗者:
[@FontTian](https://github.com/FontTian)
[@numpy](https://github.com/apachecn/scikit-learn-doc-zh)
翻譯者:
[@程威](https://github.com/apachecn/scikit-learn-doc-zh)
這個子模塊包含與某些 kernel 對應的特征映射的函數,這個會用于例如支持向量機的算法當中(see [支持向量機](svm.html#svm))。 下面這些特征函數對輸入執行非線性轉換,可以用于線性分類或者其他算法。
與 [kernel trick](https://en.wikipedia.org/wiki/Kernel_trick) 相比,近似的進行特征映射更適合在線學習,并能夠有效 減少學習大量數據的內存開銷。使用標準核技巧的 svm 不能有效的適用到海量數據,但是使用近似內核映射的方法,對于線性 SVM 來說效果可能更好。 而且,使用 [`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 進行近似的內核映射,使得對海量數據進行非線性學習也成為了可能。
由于近似嵌入的方法沒有太多經驗性的驗證,所以建議將結果和使用精確的內核方法的結果進行比較。
See also
[多項式回歸:用基函數展開線性模型](linear_model.html#polynomial-regression) 用于精確的多項式變換。
## 4.6.1. 內核近似的 Nystroem 方法
[`Nystroem`](generated/sklearn.kernel_approximation.Nystroem.html#sklearn.kernel_approximation.Nystroem "sklearn.kernel_approximation.Nystroem") 中實現了 Nystroem 方法用于低等級的近似核。它是通過采樣 kernel 已經評估好的數據。默認情況下, [`Nystroem`](generated/sklearn.kernel_approximation.Nystroem.html#sklearn.kernel_approximation.Nystroem "sklearn.kernel_approximation.Nystroem") 使用 `rbf` kernel,但它可以使用任何內核函數和預計算內核矩陣. 使用的樣本數量 - 計算的特征維數 - 由參數 `n_components` 給出.
## 4.6.2. 徑向基函數內核
[`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 為徑向基函數核構造一個近似映射,又稱為 Random Kitchen Sinks \[RR2007\]. 在應用線性算法(例如線性 SVM )之前,可以使用此轉換來明確建模內核映射:
```
>>> from sklearn.kernel_approximation import RBFSampler
>>> from sklearn.linear_model import SGDClassifier
>>> X = [[0, 0], [1, 1], [1, 0], [0, 1]]
>>> y = [0, 0, 1, 1]
>>> rbf_feature = RBFSampler(gamma=1, random_state=1)
>>> X_features = rbf_feature.fit_transform(X)
>>> clf = SGDClassifier()
>>> clf.fit(X_features, y)
SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1,
eta0=0.0, fit_intercept=True, l1_ratio=0.15,
learning_rate='optimal', loss='hinge', max_iter=5, n_iter=None,
n_jobs=1, penalty='l2', power_t=0.5, random_state=None,
shuffle=True, tol=None, verbose=0, warm_start=False)
>>> clf.score(X_features, y)
1.0
```
這個映射依賴于內核值的 Monte Carlo 近似. `fit` 方法執行 Monte Carlo 采樣,而該 `transform` 方法執行 數據的映射.由于過程的固有隨機性,結果可能會在不同的 `fit` 函數調用之間變化。
該 `fit` 函數有兩個參數: `n_components` 是特征變換的目標維數. `gamma` 是 RBF-kernel 的參數. `n_components` 越高,會導致更好的內核近似, 并且將產生與內核 SVM 產生的結果更相似的結果。請注意,”擬合” 特征函數實際上不取決于 `fit` 函數傳遞的數據。只有數據的維數被使用。 詳情可以參考 [\[RR2007\]](#rr2007).
對于給定的值 `n_components` [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 在 [`Nystroem`](generated/sklearn.kernel_approximation.Nystroem.html#sklearn.kernel_approximation.Nystroem "sklearn.kernel_approximation.Nystroem") 中使用通常不太準確, 但是 [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 使用更大的特征空間,更容易計算。
[](../auto_examples/plot_kernel_approximation.html)將精確的 RBF kernel (左) 與 approximation (右) 進行比較。
示例:
- [Explicit feature map approximation for RBF kernels](../auto_examples/plot_kernel_approximation.html#sphx-glr-auto-examples-plot-kernel-approximation-py)
## 4.6.3. 加性卡方核
Additive Chi Squared Kernel (加性卡方核)是直方圖的核心,通常用于計算機視覺。
這里使用的 Additive Chi Squared Kernel 給出

這個和 `sklearn.metrics.additive_chi2_kernel` 不完全一樣.\[VZ2010\]\_ 的作者喜歡上面的版本,因為它總是積極的。 由于這個 kernel 是可添加的,因此可以分別處理嵌入的 . 這使得在規則的間隔類對傅里葉變換進行性才贏,代替近似的 Monte Carlo 采樣。
> [`AdditiveChi2Sampler`](generated/sklearn.kernel_approximation.AdditiveChi2Sampler.html#sklearn.kernel_approximation.AdditiveChi2Sampler "sklearn.kernel_approximation.AdditiveChi2Sampler") 類實現了這個組件采樣方法. 每個組件都被采樣  次,每一個輸入維數都會產生 2n+1 維(來自傅立葉變換的實部和復數部分的兩個數據段的倍數). 在文獻中, 經常取為 1 或者 2,將數據集轉換為 `n_samples * 5 * n_features` 大小(在  的情況下 ).
[`AdditiveChi2Sampler`](generated/sklearn.kernel_approximation.AdditiveChi2Sampler.html#sklearn.kernel_approximation.AdditiveChi2Sampler "sklearn.kernel_approximation.AdditiveChi2Sampler") 提供的近似特征映射可以和 [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 提供的近似特征映射合并,得到一個取冪的 chi squared kerne。可以查看 [\[VZ2010\]](#vz2010) 和 [\[VVZ2010\]](#vvz2010) [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 的合并.
## 4.6.4. Skewed Chi Squared Kernel (偏斜卡方核?暫譯)
skewed chi squared kernel 給出下面公式

它有和 指數卡方核 相似的屬性,用于計算機視覺.但是允許進行簡單的 蒙特卡洛 近似 的特征映射。
[`SkewedChi2Sampler`](generated/sklearn.kernel_approximation.SkewedChi2Sampler.html#sklearn.kernel_approximation.SkewedChi2Sampler "sklearn.kernel_approximation.SkewedChi2Sampler") 的使用和之前描述的 [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 一樣.唯一的區別是自由參數,稱之為 . 這種映射和數學細節可以參考 [\[LS2010\]](#ls2010).
## 4.6.5. 數學方面的細節
核技巧 像支持向量機,或者 核化 PCA 依賴于 再生核希爾伯特空間(RKHS) 對于任何 核函數  (叫做 Mercer kernel),保證了  進入 希爾伯特空間  的映射,例如:

 是在 Hilbert space 中做內積.
如果一個算法,例如線性支持向量機或者 PCA,依賴于數據集的數量級  ,可能會使用  , 符合孫發的映射  . 使用  的優點在于  永遠不會直接計算,允許大量的特征計算(甚至是無限的).
kernel 方法的一個缺點是,在優化過程中有可能存儲大量的 kernel 值 . 如果使用核函數的分類器應用于新的數據  ,  需要計算用來做預測,訓練集中的  有可能有很多不同的。
這個子模塊的這些類中允許嵌入 ,從而明確的與  一起工作, 這消除了使用 kernel 的需要和存儲訓練樣本.
參考:
[\[RR2007\]](#id3)[“Random features for large-scale kernel machines”](http://www.robots.ox.ac.uk/~vgg/rg/papers/randomfeatures.pdf)Rahimi, A. and Recht, B. - Advances in neural information processing 2007,[\[LS2010\]](#id7)[“Random Fourier approximations for skewed multiplicative histogram kernels”](http://www.maths.lth.se/matematiklth/personal/sminchis/papers/lis_dagm10.pdf)Random Fourier approximations for skewed multiplicative histogram kernels - Lecture Notes for Computer Sciencd (DAGM)[\[VZ2010\]](#id5)[“Efficient additive kernels via explicit feature maps”](https://www.robots.ox.ac.uk/~vgg/publications/2011/Vedaldi11/vedaldi11.pdf)Vedaldi, A. and Zisserman, A. - Computer Vision and Pattern Recognition 2010[\[VVZ2010\]](#id6)[“Generalized RBF feature maps for Efficient Detection”](https://www.robots.ox.ac.uk/~vgg/publications/2010/Sreekanth10/sreekanth10.pdf)Vempati, S. and Vedaldi, A. and Zisserman, A. and Jawahar, CV - 2010
- 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)
- 外部資源,視頻和談話