LinearRegression与svm.SVR(kernel=”linear”)的区别

首先,虽然论坛上有很多与此类似的提问,但我保证没有完全相同的,所以请不要标记为重复问题。

我在使用scikit的sklearn进行线性回归时遇到了两种方法,我无法理解这两者之间的区别,特别是在第一个代码中调用了train_test_split()方法,而在第二个代码中直接调用了fit方法。

我在学习时使用了多种资源,这个单一的问题让我非常困惑。

第一个使用SVR的方法

X = np.array(df.drop(['label'], 1))X = preprocessing.scale(X)y = np.array(df['label'])X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2)clf = svm.SVR(kernel='linear')clf.fit(X_train, y_train)confidence = clf.score(X_test, y_test)

第二个方法如下

# 将数据分成训练/测试集diabetes_X_train = diabetes_X[:-20]diabetes_X_test = diabetes_X[-20:]# 将目标值分成训练/测试集diabetes_y_train = diabetes.target[:-20]diabetes_y_test = diabetes.target[-20:]# 创建线性回归对象regr = linear_model.LinearRegression()# 使用训练集训练模型regr.fit(diabetes_X_train, diabetes_y_train)# 使用测试集进行预测diabetes_y_pred = regr.predict(diabetes_X_test)

所以我的主要关注点是使用svr(kernel=”linear”)和使用LinearRegression()之间的区别


回答:

这是我找到的资料:

直观上,像所有回归模型一样,它试图通过最小化成本函数来拟合一条线到数据上。然而,SVR的有趣之处在于你可以使用非线性核函数。在这种情况下,你最终会进行非线性回归,即拟合曲线而不是直线。这个过程基于核技巧和在对偶形式而不是原始形式中表示解/模型。也就是说,模型被表示为训练点的组合,而不是特征和一些权重的函数。同时,基本算法保持不变:转向非线性的过程中唯一真正的变化是核函数,它从简单的内积变为某种非线性函数。

所以SVR允许进行非线性拟合问题,而LinearRegression()仅适用于简单的线性回归,拟合直线(在两种情况下都可能包含任意数量的特征)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注