Machine learning 核回归与线性核回归相同吗?

Machine learning 核回归与线性核回归相同吗?,machine-learning,scikit-learn,regression,Machine Learning,Scikit Learn,Regression,我想在sklearn中编写线性内核回归,因此我编写了以下代码: model = LinearRegression() weights = rbf_kernel(X_train,X_test) for i in range(weights.shape[1]): model.fit(X_train,y_train,weights[:,i]) model.predict(X_test[i]) 然后我发现sklearn中有KernelRidge: model = KernelRidg

我想在sklearn中编写线性内核回归,因此我编写了以下代码:

model = LinearRegression()
weights = rbf_kernel(X_train,X_test)

for i in range(weights.shape[1]):
    model.fit(X_train,y_train,weights[:,i])
    model.predict(X_test[i])
然后我发现sklearn中有KernelRidge:

model = KernelRidge(kernel='rbf')

model.fit(X_train,y_train)

pred = model.predict(X_train)
我的问题是:
1-这两种代码之间的区别是什么? 在KernelRidge()之后的model.fit()中,我在文档中发现,我可以为fit()函数添加第三个参数“weight”,如果我已经将一个内核函数应用于该模型,我会这样做吗

  • 这两段代码之间有什么区别
  • 基本上,他们没有共同之处。您的第一个代码段实现了线性回归,具有任意设置的样本权重。(你是怎么想到用这种方式调用
    rbf\u内核的?)这仍然只是一个线性模型,仅此而已。您只需(随机地)指定哪些样本是重要的,然后在特征(?)上循环。这毫无意义。总的来说:您使用的
    rbf\u内核
    完全是错误的;这完全不是应该如何使用它(以及为什么当您试图将它传递给fit方法时,它会给您错误,而您最终执行了一个循环并分别传递了每个列)

    将此类模型拟合为余弦(因此平均值为0)数据的示例:

  • 我在
    KernelRidge()
    之后的
    model.fit()
    函数的文档中发现,我可以添加第三个参数
    weight
    。如果我已经对模型应用了内核函数,我会这样做吗
  • 这是实际的内核方法,内核不是样本权重。(可以使用核函数来分配权重,但这不是“线性核回归”或一般“核方法”中的核的含义。)核是一种将非线性引入分类器的方法,这是因为许多方法(包括线性回归)可以表示为向量之间的点积,它可以被核函数代替,从而在不同的空间(再生希尔伯特核空间)中解决问题,这可能具有非常高的复杂性(如RBF核诱导的连续函数的无限维空间)

    与上述数据相同的拟合示例:


    首先谢谢,我意识到我的错误,因为我现在知道:在“内核回归”中使用内核不同于在“局部加权线性回归”中使用内核在“内核回归”中我们使用它作为x0和X之间距离的权重,“内核回归”这里是懒惰的学习者,但在“内核线性回归”中我们用它作为一种向模型中引入非线性的方法,“核线性回归”是一种渴望学习的方法。“核回归”是任何使用核技巧的回归的“袋术语”,因此“核线性回归”是“核回归”以及“支持向量回归”的一种特定类型。使用核函数计算权重不是“核回归”。拟合函数中的权重只是数据在梯度下降中构造回归线的权重(就像我们使用boosting时数据中的权重),但是如何将权重项添加到线性回归的闭式解\beta=(K(X^T,X)+\lambda i)^{-1}是的,我想它的名字是Nadaraya–Watson内核回归,它写的是“使用内核作为加权函数”在“内核线性回归”和“局部加权线性回归”之间有区别吗
    from sklearn.linear_model import LinearRegression
    from sklearn.kernel_ridge import KernelRidge
    import numpy as np
    from matplotlib import pyplot as plt
    
    X = np.linspace(-10, 10, 100).reshape(100, 1)
    y = np.cos(X)
    
    for model in [LinearRegression(), KernelRidge(kernel='rbf')]:
    
        model.fit(X, y)
        p = model.predict(X)
    
        plt.figure()
        plt.title(model.__class__.__name__)
        plt.scatter(X[:, 0], y)
        plt.plot(X, p)
    
        plt.show()