如何为你的回归问题选择最合适的机器学习方法?

文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。

转自 | AI算法之心(公众号ID:AIHeartForYou)

作者 | 何从庆

什么是回归呢?回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。回归分析在机器学习领域应用非常广泛,例如,商品的销量预测问题,交通流量预测问题。那么,如何为这些回归问题选择最合适的机器学习算法呢?这篇文章将从以下三个方面介绍:

1、常用的回归算法

2、回归竞赛问题以及解决方案

3、正在进行中的回归竞赛问题

01常用的回归算法

这里介绍一些回归问题中常用的机器学习方法,sklearn作为机器学习中一个强大的算法包,内置了许多经典的回归算法,下面将一一介绍各个算法:

01线性回归

线性回归拟合一个带系数的线性模型,以最小化数据中的观测值与线性预测值之间的残差平方和。

sklearn中也存在线性回归的算法库的接口,代码示例如下所示:

#加载线性模型算法库from sklearn import linear_model# 创建线性回归模型的对象regr = linear_model.LinearRegression()# 利用训练集训练线性模型regr.fit(X_train, y_train)# 使用测试集做预测y_pred = regr.predict(X_test)

02岭回归

上述的线性回归算法使用最小二乘法优化各个系数,对于岭回归来说,岭回归通过对系数进行惩罚(L2范式)来解决普通最小二乘法的一些问题,例如,当特征之间完全共线性(有解)或者说特征之间高度相关,这个时候适合用岭回归。

#加载线性模型算法库from sklearn.linear_model import Ridge# 创建岭回归模型的对象reg = Ridge(alpha=.5)# 利用训练集训练岭回归模型reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) #输出各个系数reg.coef_reg.intercept_ 

03Lasso回归

Lasso是一个估计稀疏稀疏的线性模型。它在某些情况下很有用,由于它倾向于选择参数值较少的解,有效地减少了给定解所依赖的变量的数量。Lasso模型在最小二乘法的基础上加入L1范式作为惩罚项。

#加载Lasso模型算法库from sklearn.linear_model import Lasso# 创建Lasso回归模型的对象reg = Lasso(alpha=0.1)# 利用训练集训练Lasso回归模型reg.fit([[0, 0], [1, 1]], [0, 1])"""Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,   normalize=False, positive=False, precompute=False, random_state=None,   selection=‘cyclic‘, tol=0.0001, warm_start=False)"""# 使用测试集做预测reg.predict([[1, 1]])

04Elastic Net回归

Elastic Net 是一个线性模型利用L1范式和L2范式共同作为惩罚项。这种组合既可以学习稀疏模型,同时可以保持岭回归的正则化属性。

#加载ElasticNet模型算法库from sklearn.linear_model import ElasticNet#加载数据集from sklearn.datasets import make_regressionX, y = make_regression(n_features=2, random_state=0)#创建ElasticNet回归模型的对象regr = ElasticNet(random_state=0)# 利用训练集训练ElasticNet回归模型regr.fit(X, y)print(regr.coef_) print(regr.intercept_) print(regr.predict([[0, 0]])) 

05贝叶斯岭回归

贝叶斯岭回归模型和岭回归类似。贝叶斯岭回归通过最大化边际对数似然来估计参数。

from sklearn.linear_model import BayesianRidgeX = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]]Y = [0., 1., 2., 3.]reg = BayesianRidge()reg.fit(X, Y)

06SGD回归

上述的线性模型通过最小二乘法来优化损失函数,SGD回归也是一种线性回归,不同的是,它通过随机梯度下降最小化正则化经验损失。

import numpy as npfrom sklearn import linear_modeln_samples, n_features = 10, 5np.random.seed(0)y = np.random.randn(n_samples)X = np.random.randn(n_samples, n_features)clf = linear_model.SGDRegressor(max_iter=1000, tol=1e-3)clf.fit(X, y)"""SGDRegressor(alpha=0.0001, average=False, early_stopping=False,       epsilon=0.1, eta0=0.01, fit_intercept=True, l1_ratio=0.15,       learning_rate=‘invscaling‘, loss=‘squared_loss‘, max_iter=1000,       n_iter=None, n_iter_no_change=5, penalty=‘l2‘, power_t=0.25,       random_state=None, shuffle=True, tol=0.001, validation_fraction=0.1,       verbose=0, warm_start=False)"""

07SVR

众所周知,支持向量机在分类领域应用非常广泛,支持向量机的分类方法可以被推广到解决回归问题,这个就称为支持向量回归。支持向量回归算法生成的模型同样地只依赖训练数据集中的一个子集(和支持向量分类算法类似)。

#加载SVR模型算法库from sklearn.svm import SVR#训练集X = [[0, 0], [2, 2]]y = [0.5, 2.5]#创建SVR回归模型的对象clf = SVR()# 利用训练集训练SVR回归模型clf.fit(X, y) """SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,    gamma=‘auto_deprecated‘, kernel=‘rbf‘, max_iter=-1, shrinking=True,    tol=0.001, verbose=False)"""clf.predict([[1, 1]])

08KNN回归

在数据标签是连续变量而不是离散变量的情况下,可以使用KNN回归。分配给查询点的标签是根据其最近邻居标签的平均值计算的。

X = [[0], [1], [2], [3]]y = [0, 0, 1, 1]from sklearn.neighbors import KNeighborsRegressorneigh = KNeighborsRegressor(n_neighbors=2)neigh.fit(X, y) print(neigh.predict([[1.5]]))

09决策树回归

决策树也可以应用于回归问题,使用sklearn的DecisionTreeRegressor类。

from sklearn.tree import  DecisionTreeRegressor X = [[0, 0], [2, 2]]y = [0.5, 2.5]clf = DecisionTreeRegressor()clf = clf.fit(X, y)clf.predict([[1, 1]])

10神经网络

神经网络使用slearn中MLPRegressor类实现了一个多层感知器(MLP),它使用在输出层中没有激活函数的反向传播进行训练,也可以将衡等函数视为激活函数。因此,它使用平方误差作为损失函数,输出是一组连续的值。

from sklearn.neural_network import MLPRegressormlp=MLPRegressor()mlp.fit(X_train,y_train)"""MLPRegressor(activation=‘relu‘, alpha=0.0001, batch_size=‘auto‘, beta_1=0.9,       beta_2=0.999, early_stopping=False, epsilon=1e-08,       hidden_layer_sizes=(100,), learning_rate=‘constant‘,       learning_rate_init=0.001, max_iter=200, momentum=0.9,       n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,       random_state=None, shuffle=True, solver=‘adam‘, tol=0.0001,       validation_fraction=0.1, verbose=False, warm_start=False)"""y_pred = mlp.predict(X_test)

11RandomForest回归

RamdomForest回归也是一种经典的集成算法之一。

from sklearn.ensemble import RandomForestRegressorfrom sklearn.datasets import make_regressionX, y = make_regression(n_features=4, n_informative=2,                       random_state=0, shuffle=False)regr = RandomForestRegressor(max_depth=2, random_state=0,                             n_estimators=100)regr.fit(X, y)print(regr.feature_importances_)print(regr.predict([[0, 0, 0, 0]]))

12XGBoost回归

XGBoost近些年在学术界取得的成果连连捷报,基本所有的机器学习比赛的冠军方案都使用了XGBoost算法,对于XGBoost的算法接口有两种,这里我仅介绍XGBoost的sklearn接口。更多请参考:

https://xgboost.readthedocs.io/en/latest/python/index.html

import xgboost as xgbxgb_model = xgb.XGBRegressor(max_depth = 3,                             learning_rate = 0.1,                             n_estimators = 100,                             objective = ‘reg:linear‘,                             n_jobs = -1)

xgb_model.fit(X_train, y_train,              eval_set=[(X_train, y_train)],               eval_metric=‘logloss‘,              verbose=100)y_pred = xgb_model.predict(X_test)print(mean_squared_error(y_test, y_pred))

13LightGBM回归

LightGBM作为另一个使用基于树的学习算法的梯度增强框架。在算法竞赛也是每逢必用的神器,且要想在竞赛取得好成绩,LightGBM是一个不可或缺的神器。相比于XGBoost,LightGBM有如下优点,训练速度更快,效率更高效;低内存的使用量。对于LightGBM的算法接口有两种,这里我同样介绍LightGBM的sklearn接口。更多请参考:https://lightgbm.readthedocs.io/en/latest/

import lightgbm as lgbgbm = lgb.LGBMRegressor(num_leaves=31,                        learning_rate=0.05,                        n_estimators=20)gbm.fit(X_train, y_train,        eval_set=[(X_train, y_train)],         eval_metric=‘logloss‘,        verbose=100)y_pred = gbm.predict(X_test)print(mean_squared_error(y_test, y_pred))

上述回归算法的代码作者已上传至这里:

https://hnueducn-my.sharepoint.com/:f:/g/personal/hecongqing_hnu_edu_cn/Eg6IDJrr5A5Ptm_V97nL3WUBLLTV_Y3yM6wrQFSuYUN_pQ?e=LPHLoK

02回归竞赛问题以及解决方案

为了方便小伙伴们练习机器学习中的相关项目,这里整理一些回归竞赛问题,帮助入门机器学习的小伙伴们更加深入的掌握机器学习中的回归问题。

01入门级比赛

Kaggle——房价预测

这个比赛作为最基础的回归问题之一,很适合入门机器学习的小伙伴们。

网址:https://www.kaggle.com/c/house-prices-advanced-regression-techniques

经典解决方案:

XGBoost解决方案: https://www.kaggle.com/dansbecker/xgboost

Lasso解决方案: https://www.kaggle.com/mymkyt/simple-lasso-public-score-0-12102

02进阶比赛

Kaggle——销售量预测

这个比赛作为经典的时间序列问题之一,目标是为了预测下个月每种产品和商店的总销售额。

网址:https://www.kaggle.com/c/competitive-data-science-predict-future-sales

经典解决方案:

LightGBM: https://www.kaggle.com/sanket30/predicting-sales-using-lightgbm

XGBoost: https://www.kaggle.com/fabianaboldrin/eda-xgboost

第一名解决方案:https://www.kaggle.com/c/competitive-data-science-predict-future-sales/discussion/74835#latest-503740

03TOP比赛方案

Kaggle——餐厅访客预测

网址:https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting

解决方案:

1st 方案: https://www.kaggle.com/plantsgo/solution-public-0-471-private-0-505

7th 方案:https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting/discussion/49259#latest-284437

8th 方案:https://github.com/MaxHalford/kaggle-recruit-restaurant

12th 方案:https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting/discussion/49251#latest-282765

Kaggle——CorporaciónFavoritaGrocery销售预测

网址:https://www.kaggle.com/c/favorita-grocery-sales-forecasting

解决方案:

1st 方案: https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47582#latest-360306

2st 方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47568#latest-278474

3st 方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47560#latest-302253

4st 方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47529#latest-271077

5st方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47556#latest-270515

6st方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47575#latest-269568

03正在进行中的回归竞赛

小伙伴们看到上面的解决方案是不是跃跃欲试,最近国内也有各大回归比赛,赶紧趁热打铁,来学习学习回归比赛吧!

2019年腾讯广告大赛——广告曝光预估

网址:https://algo.qq.com/application/home/home/index.html

上述比赛的数据集作者已上传至这里:

https://hnueducn-my.sharepoint.com/:f:/g/personal/hecongqing_hnu_edu_cn/En8QBIS-zQ1LolGCeTVASkYBGtclabP1T7M2PET5Jq9Pjg?e=VpOZxS

推荐阅读:

星标我,每天多一点智慧

原文地址:https://www.cnblogs.com/shuzhiwuyu/p/10790400.html

时间: 2024-08-05 01:29:14

如何为你的回归问题选择最合适的机器学习方法?的相关文章

Stanford机器学习---第六讲. 怎样选择机器学习方法、系统

原文见http://blog.csdn.net/abcjennifer/article/details/7797502  添加了一些自己的注释和笔记 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.所有内容均来自Stand

选择一个合适的PHP框架

选择一个合适的PHP框架 亚马逊每年都会通过投票选出最流行的PHP框架排行榜,这里是2015年的排行情况: 2015年PHP框架排行榜 那么,我们选择的范围也就是这些了. Laravel Laravel 官方网站 国内镜像 中文文档 博客园相关文章 枪打出头鸟! 既然是新手选择,自然是按排名排序啦. 这玩意以绝对优势排名第一,而且从上面排名结果页面看来,至少去年(2014年)它也是排第一的. 反正我跟他不熟,暂时保持中立. 还没有安装上,但是从官方文档来看还是比较麻烦,对于拥有VPS的人可能比较

机器学习方法--分类、回归、聚类

原创 2017-07-27 马文辉 MATLAB 作 者 简 介 马文辉,MathWorks中国应用工程师, 南开大学工学博士,在大数据处理与分析领域有多年研究与开发经验:曾就职于Nokia中国研究院,Adobe中国研发中心以及IBM中国. 近年来,全国赛的题目中,多多少少都有些数据,而且数据量总体来说呈不断增加的趋势, 这是由于在科研界和工业界已积累了比较丰富的数据,伴随大数据概念的兴起及机器学习技术的发展, 这些数据需要转化成更有意义的知识或模型. 所以在建模比赛中, 只要数据量还比较大,

机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识,线性回归因为它的简单,易用,且可以求出闭合解,被广泛地运用在各种机器学习应用中.事实上,除了单独使用,线性回归也是很多其他算法的组成部分.线性回归的缺点也是很明显的,因为线性回归是输入到输出的线性变换,拟合能力有限:另外,线性回归的目标值可以是(?∞,+∞),而有的时候,目标值的范围是[0,1](可以表示概率值),那么就不方便了. 逻辑回归可以说是最为常用的机器学习算法之一,最经典的场景就

【转】如何选择一个合适的磁珠BEAD

在产品数字电路EMC 设计过程中,我们常常会使用到磁珠,那么磁珠滤波地原理以及如何使用呢? 铁氧体材料是铁镁合金或铁镍合金,这种材料具有很高的导磁率,他可以是电感的线圈绕组之间在高频高阻的情况下产生的电容最小.铁氧体材料通常在高频情况下应用,因为在低频时他们主要程电感特性,使得线上的损耗很小.在高频情况下,他们主要呈电抗特性比并且随频率改变.实际应用中,铁氧体材料是作为射频电路的高频衰减器使用的.实际上,铁氧体较好的等效于电阻以及电感的并联,低频下电阻被电感短路,高频下电感阻抗变得相当高,以至于

机器学习方法:回归(一):线性回归Linear regression

开一个机器学习方法科普系列:做基础回想之用.学而时习之:也拿出来与大家分享.数学水平有限,仅仅求易懂,学习与工作够用.周期会比較长.由于我还想写一些其它的,呵呵. content: linear regression, Ridge, Lasso Logistic Regression, Softmax Kmeans, GMM, EM, Spectral Clustering Dimensionality Reduction: PCA.LDA.Laplacian Eigenmap. LLE. Is

目标决定人生——没有目标就失去一切 (没有目标的奋斗是浪费青春,比如交了钱却不去参加考试、让时间白白溜走。根据目标与定位来选择最合适的企业。人生要算总账)good

没有目标就失去一切 刚毕业那会儿,幼稚得可笑,老跟同学打电话,明面上聊聊近况,暗地里比较.你要比我工资多一百块,心里特不平衡,凭什么呀,在学校那会儿公认的我比你强.你要带个头衔,而我啥也不是,普通员工一个,感觉特没面子,又特羡慕.同学小聚,如果你递来一张名片,我没有,级别太低公司不给印,心里特不是滋味,觉得白混了.如果情况正好反过来,自己比别人强一点,嘴上虽然在安慰同学,心里偷着乐:就是嘛,这个社会还是公平的,我觉得我就是比你强.现在回头看,大家都是在些不入流的小企业混,有什么好比的,但也就为这

机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection

希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面两篇回归(一)(二)复习了线性回归,以及L1与L2正则--lasso和ridge regression.特别描述了lasso的稀疏性是如何产生的.在本篇中介绍一下和lasso可以产生差不多效果的两种feature selection的方法,forward stagewise selection和最小角回归least angle regression(LARS).尤其是

作为运维工程师如何选择一个合适的机房

好多公司把选择机房的重任交给了网络工程师,比较大的公司最终决定权还是在老板手里,如果机房没有出问题,一切还OK,一旦出问题,责任会怪罪到运维工程师头上,作为一名运维工程师也是很头疼的事. 其实想选一个合适的机房,也不是很难, 一般机房在恒温,恒湿,消防,安防等方面大同小异,对互联网客影响不大,做为一个互联网企业,我们选择机房应该最注重哪些方面那,下面我听我给你道来         第一:选择提供托管的公司,首选机房运营商                 现在提供托管的公司太多了,挑的我们眼花缭乱