首先,虽然论坛上有很多与此类似的提问,但我保证没有完全相同的,所以请不要标记为重复问题。
我在使用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()仅适用于简单的线性回归,拟合直线(在两种情况下都可能包含任意数量的特征)。