回归及相关模型

  1. 线性回归模型
    一元线性回归模型使用单一特征来预测响应值,拟合的最佳曲线通过最小化预测值和真实值之间的误差得到。

多元回归模型利用多个自变量估计因变量,从而解释和预测因变量的值

优点:模型简单。部署方便,回归权重可以用于结果分析,训练快
缺点:精度低,特征存在一定的共线性问题
使用技巧:需要进行归一化处理如特征选择,避免高度相关的特征同时存在

from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
clf = LinearRegression()
clf.fit(train_data, train_target)
test_pred = clf.predict(test_data)
score = mean_squared_error(test_pred, test_target)
score
  1. K近邻回归模型
    K近邻回归模型通过找出某个样本的k个最近邻居,将这些邻居的某个属性的平均值赋给该样本,就可以得到该样本对应属性的值。
    优点:模型简单,易于理解,对于数据量小的情况方便快捷,可视化方便
    缺点:计算量大,不适合数据量大的情况,需要调参数
    使用技巧:特征需要归一化,重要特征可以适当加一定比例的权重
from sklearn.neighbors import KNeighborsRegressor
clf = KNeighborsRegressor(n_neighbors=3)
clf.fit(train_data, train_target)
test_pred = clf.predict(test_data)
score = mean_squared_error(test_pred, test_target)
score
  1. 决策树回归模型
    决策树回归可以理解为根据一定规则,将一个空间划分为若干个子空间,然后利用子空间内所有点的信息表示这个子空间,对于测试数据,只要按照特征将其归到某个子空间,便可得到对应子空间的输出值。
from sklearn.tree import DecisionTreeRegressor
clf = DecisionTreeRegressor()
clf.fit(train_data, train_target)
test_pred = clf.predict(test_data)
score = mean_squared_error(test_pred, test_target)
score
  1. 随机森林回归模型
    随机森林是通过集成学习的思想将多棵树集成的一种算法,基本单元是决策树,在回归问题中,随机森林输出所有决策树输出的平均值,随机森林回归模型的主要优点是在所有算法中,具有极好的准确率能够运行在大数据集上,能够处理高维特征的输入样本,而且不需要降维,能够评估各个特征在分类问题上的重要性,在生成过程中,能够获取到内部生成误差的一种无偏估计,对于缺省值也能获得很好的结果。
    优点:使用方便,特征无需做过多变换,精度较高,模型并行效率块
    缺点:结果不容易解释
    使用技巧:参数调节,提高精度
from sklearn.ensemble import RandomForestRegressor
clf = RandomForestRegressor(n_estimators=100)
clf.fit(train_data, train_target)
test_pred = clf.predict(test_data)
score = mean_squared_error(test_target, test_pred)
score
  1. LightGBM回归模型
    LightGBM支持高效率的并行训练,具有更快的训练速度、更低的内存消耗、更好的准确率、分布式支持、可以快速处理海量数据
    优点:精度高
    缺点:训练时间长,模型复杂
    使用技巧:有效的验证集防止过拟合,参数搜索
import lightgbm as lgb
clf = lgb.LGBMRegressor(
    learning_rate = 0.01,
    max_depth = -1,
    n_estimators = 5000,
    boosting_type='gbdt',
    random_state=2019,
    objective='regression'
)

test_pred = clf.fit(train_data, train_target, eval_metric='MSE', verbose=50)
score = mean_squared_error(test_target, test_pred)
score
  1. 基于核的岭回归
folds = KFold(n_splits=5, shuffle=True, random_state=13)
oof_kr_383 = np.zeros(train_shape)
predictions_kr_383 = np.zeros(len(X_test_383))

for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_383, y_train)):
    print("fold n°{}".format(fold_+1))
    tr_x = X_train_383[trn_idx]
    tr_y = y_train[trn_idx]
    #Kernel Ridge Regression 岭回归
    kr_383 = kr()
    kr_383.fit(tr_x,tr_y)
    oof_kr_383[val_idx] = kr_383.predict(X_train_383[val_idx])
    
    predictions_kr_383 += kr_383.predict(X_test_383) / folds.n_splits

print("CV score: {:<8.8f}".format(mean_squared_error(oof_kr_383, target)))
  1. 普通岭回归
folds = KFold(n_splits=5, shuffle=True, random_state=13)
oof_ridge_383 = np.zeros(train_shape)
predictions_ridge_383 = np.zeros(len(X_test_383))

for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_383, y_train)):
    print("fold n°{}".format(fold_+1))
    tr_x = X_train_383[trn_idx]
    tr_y = y_train[trn_idx]
    #使用岭回归
    ridge_383 = Ridge(alpha=1200)
    ridge_383.fit(tr_x,tr_y)
    oof_ridge_383[val_idx] = ridge_383.predict(X_train_383[val_idx])
    
    predictions_ridge_383 += ridge_383.predict(X_test_383) / folds.n_splits

print("CV score: {:<8.8f}".format(mean_squared_error(oof_ridge_383, target)))
  1. 使用ElasticNet 弹性网络
folds = KFold(n_splits=5, shuffle=True, random_state=13)
oof_en_383 = np.zeros(train_shape)
predictions_en_383 = np.zeros(len(X_test_383))

for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_383, y_train)):
    print("fold n°{}".format(fold_+1))
    tr_x = X_train_383[trn_idx]
    tr_y = y_train[trn_idx]
    #ElasticNet 弹性网络
    en_383 = en(alpha=1.0,l1_ratio=0.06)
    en_383.fit(tr_x,tr_y)
    oof_en_383[val_idx] = en_383.predict(X_train_383[val_idx])
    
    predictions_en_383 += en_383.predict(X_test_383) / folds.n_splits

print("CV score: {:<8.8f}".format(mean_squared_error(oof_en_383, target)))
  1. 使用BayesianRidge 贝叶斯岭回归
folds = KFold(n_splits=5, shuffle=True, random_state=13)
oof_br_383 = np.zeros(train_shape)
predictions_br_383 = np.zeros(len(X_test_383))

for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_383, y_train)):
    print("fold n°{}".format(fold_+1))
    tr_x = X_train_383[trn_idx]
    tr_y = y_train[trn_idx]
    #BayesianRidge 贝叶斯回归
    br_383 = br()
    br_383.fit(tr_x,tr_y)
    oof_br_383[val_idx] = br_383.predict(X_train_383[val_idx])
    
    predictions_br_383 += br_383.predict(X_test_383) / folds.n_splits

print("CV score: {:<8.8f}".format(mean_squared_error(oof_br_383, target)))

LASSO回归

梯度提升树回归

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值