Sklearn SVR模型实践

线性回归模型:

流程:

读取数据,划分训练测试数据集,生成模型实例(SVR),预测,计算其loss值。

训练数据集拟合data与label之间的关系。

代码示例如下所示:

导入相应的库函数

# from sklearn.model_selection import train_test_split
# from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np
import json

读取数据、划分数据集等操作

train_data = json.load(open('./train_file_name'))
X = np.asarray(train_data)
#label data
test_data = json.load(open('test_file_name'))
y = np.asarray(test_data)
def mape(y_ture,y_label):
    return np.mean(np.abs((y_true - y_label) / y_label))

x_train = x[:10000,:]
x_test = x[10000:,:]
y_train = y[:10000]
y_test = y[10000:]

linear_svr = SVR(kernel='linear')
linear_svr.fit(x_train,y_train)
linear_predict = linear_svr.predict(x_test)
#calculate the different criterion
mape(linear_predict,y_test)
mean_squared_error(linear_predict,y_test)
mean_absolute_error(linear_predict,y_test)

 

### 非线性回归模型Sklearn 中的实现 虽然 `sklearn` 的核心模块提供了用于线性回归的功能,但它也支持多种非线性回归技术。这些方法通常依赖于核技巧、多项式特征扩展或其他复杂的建模方式来处理非线性关系。 #### 方法一:使用多项式特征扩展 可以通过增加高阶项(如二次或三次幂)以及交互项的方式将原始数据转换为更高维度的空间,在这个空间中应用线性回归可以捕捉到原数据中的非线性模式[^2]。 以下是具体代码示例: ```python from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.pipeline import make_pipeline import numpy as np # 创建模拟数据集 np.random.seed(0) X = np.sort(np.random.rand(100, 1), axis=0) * 6 - 3 y = X ** 2 + np.sin(X * 5) + np.random.randn(*X.shape) / 3 # 使用多项式特征扩展构建管道 degree = 3 # 设置多项式的最高次幂 model_poly = make_pipeline(PolynomialFeatures(degree), LinearRegression()) # 训练模型 model_poly.fit(X, y) # 输出预测结果 print(model_poly.predict([[2]])) ``` 此方法的核心在于利用 `PolynomialFeatures` 将输入变量映射至更高的维数,并在此基础上训练标准的线性回归模型。 --- #### 方法二:基于核的支持向量机 (SVM) 另一种常见的非线性回归方法是采用带有径向基函数(RBF) 或其他类型的核函数的支持向量回归(SVR)[^4]。SVR 能够自动完成从低维到高维空间的数据变换过程,从而更好地适应复杂的关系结构。 下面是一个简单的 SVR 应用实例: ```python from sklearn.svm import SVR import matplotlib.pyplot as plt # 加载相同的数据集 svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1) # 拟合 SVM 回归器 svr_rbf.fit(X, y.ravel()) # 绘制拟合曲线 plt.scatter(X, y, color="darkorange", label="data") plt.plot(X, svr_rbf.predict(X), color="navy", lw=2, label="RBF model") plt.legend() plt.show() ``` 这里我们选择了 RBF 核作为默认选项之一;当然也可以尝试其他的核形式比如 'poly' 来观察效果差异。 --- #### 方法三:决策树及其集成版本 除了上述提到的传统统计学视角下的解决方案外,还有许多现代机器学习工具能够有效应对非线性问题,其中包括但不限于随机森林(Random Forests),极端梯度提升(XGBoost),光速GBDT(LightGBM)等。它们均属于广义上的加法模型框架下的一种特殊表现形式——即通过组合多个弱分类/回归单元形成强大的整体估计能力[^3]。 例如,我们可以很容易地调用 scikit-learn 提供的标准接口快速搭建起一棵 CART 决策树来进行数值型目标值的学习任务: ```python from sklearn.tree import DecisionTreeRegressor tree_regressor = DecisionTreeRegressor(max_depth=3) tree_regressor.fit(X, y) # 展示预测图形化表示 plt.figure(figsize=(8, 6)) plt.scatter(X, y, c="k", label="Data points") plt.plot(X, tree_regressor.predict(X), c="g", linewidth=2, label="Decision Tree Fit") plt.xlabel('Input Feature') plt.ylabel('Target Value') plt.title("Non-linear Regression via Decision Trees") plt.legend(); ``` 以上三种途径分别代表了不同哲学理念指导下的实践路径,各有优劣长短之处需视具体情况而定。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值