Kernel Ridge Regression即使用核技巧的岭回归(L2正则线性回归),它的学习形式和SVR(support vector regression)相同,但是两者的损失函数不同:KRR使用的L2正则均方误差;SVR使用的是带L2正则的
ϵ
-insensitive loss:
max(0,|y−hθ(x)|−ϵ)
。
KRR有近似形式的解,并且在中度规模的数据时及其有效率,由于KRR没有参数稀疏化的性能,因此速度上要慢于SVR(它的损失函数有利于得到稀疏化的解)。
KRR的最小二乘解:
β=(K+λI)−1y,w=∑βiXi
,这里的
K
是核函数。最小二乘解不适用于大规模数据。
Kernel Ridge Regression的使用
from sklearn.kernel_ridge import KernelRidge
KRR = KernelRidge()
Kernel Ridge Regression类的定义
class KernelRidge(BaseEstimator, RegressorMixin):
def __init__(self, alpha=1, kernel="linear", gamma=None, degree=3, coef0=1,
kernel_params=None):
alpha
:float或者list(当y是多目标矩阵时),kernel
:str或者可调用对象,核的类型
取值可以为:- linear:线性核,
k(x,xi)=x⋅xi - rbf:径向基函数, k(x,xi)=exp(−∥x−xi∥2δ2)
- sigmoid:s型函数, k(x,xi)=tanh(η<x,xi>+θ)
- poly或polynomial:多项式核函数, k(x,xi)=((x⋅xi)+R)d
- laplacian:拉普拉斯核函数, k(x,xi)=exp(−∥x−xi∥δ)
- cosine:拉普拉斯核函数, k(x,xi)=<x,xi>∥x∥∥xi∥
- chi2:卡方核函数, k(x,xi)=exp(−γ∑nk=1(xk−yk)2(xk+yk))
- additive_chi2:非指数形式卡方核函数,
k(x,xi)=−∑nk=1(xk−yk)2(xk+yk)
这些值定义在sklearn.metrics.pairwise中的一个PAIRWISE_KERNEL_FUNCTIONS常量中。 gamma
:rbf,laplacian,poly,chi2,sigmoid核中的参数,使用其他核时无效。degree
:poly核中的参数d,使用其他核时无效。coef0
:poly和sigmoid核中的0参数的替代值,使用其他核时无效。核的适用场景见:kernel
Kernel Ridge Regression类的fit()方法
def fit(self, X, y=None, sample_weight=None): 类型检查 计算kernel输出的值 调用_solve_cholesky_kernel求解参数
fit()方法的返回值
self
:KernelRidge实例对象。
属性
dual_coef_
:核空间对应的模型参数X_fit_
:训练数据,预测时也需要该值
- linear:线性核,