本文作者:何从庆

在目前的机器学习领域中,最常见的三种任务就是:回归分析、分类分析、聚类分析。在之前的文章中,我曾写过一篇<15分钟带你入门sklearn与机器学习——分类算法篇>。那么什么是回归呢?回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。回归分析在机器学习领域应用非常广泛,例如,商品的销量预测问题,交通流量预测问题。那么,如何为这些回归问题选择最合适的机器学习算法呢?这篇文章将从以下一个方面介绍:

1、常用的回归算法

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

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

常用的回归算法

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

注:下面回归算法的代码已上传至网盘,如果有小伙伴感兴趣,欢迎关注作者公众号"AI算法之心",后台回复"回归算法"。

1、线性回归

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

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

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

2、岭回归

上述的线性回归算法使用最小二乘法优化各个系数,对于岭回归来说,岭回归通过对系数进行惩罚(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_

3、Lasso回归

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]])

4、Elastic Net回归

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

#加载ElasticNet模型算法库
from sklearn.linear_model import ElasticNet
#加载数据集
from sklearn.datasets import make_regression
X, 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]]))

5、贝叶斯岭回归

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

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

6、SGD回归

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

import numpy as np
from sklearn import linear_model
n_samples, n_features = 10, 5
np.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)
"""

7、SVR

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

#加载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]])

8、KNN回归

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

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

9、决策树回归

决策树也可以应用于回归问题,使用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 MLPRegressor
mlp=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)

11.RandomForest回归

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

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
X, 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]]))

11、XGBoost回归

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

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

import xgboost as xgb
xgb_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))

12、LightGBM回归

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

import lightgbm as lgb
gbm = 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))

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

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

入门级比赛:

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

进阶比赛:

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

TOP比赛方案:

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

正在进行中的回归竞赛

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

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

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

数据集下载:

关注作者的公众号"AI算法之心",并回复"回归比赛数据集",可以直接下载到上述比赛数据集!

请关注和分享↓↓↓ 

本站的知识星球(黄博的机器学习圈子)ID:92416895

目前在机器学习方向的知识星球排名第一

往期精彩回顾

  • 良心推荐:机器学习入门资料汇总及学习建议(2018版)

  • 黄海广博士的github镜像下载(机器学习及深度学习资源)

  • 吴恩达老师的机器学习和深度学习课程笔记打印版

  • 机器学习小抄-(像背托福单词一样理解机器学习)

  • 首发:深度学习入门宝典-《python深度学习》原文代码中文注释版及电子书

  • 科研工作者的神器-zotero论文管理工具

  • 机器学习的数学基础

  • 机器学习必备宝典-《统计学习方法》的python代码实现、电子书及课件

  • 吐血推荐收藏的学位论文排版教程(完整版)

  • 机器学习入门的百科全书-2018年“机器学习初学者”公众号文章汇总

  • Python环境的安装(Anaconda+Jupyter notebook+Pycharm)

  • Python代码写得丑怎么办?推荐几个神器拯救你

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

  1. 残差平方和ssr的计算公式为_如何为你的回归问题选择最合适的机器学习方法?...

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | AI算法之心(公众号ID:AIHeartForYou) 作者 | 何从庆 什么是回归呢?回归 ...

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

    作者 | 何从庆 本文经授权转载自 AI算法之心(id:AIHeartForYou) 在目前的机器学习领域中,最常见的三种任务就是:回归分析.分类分析.聚类分析.在之前的文章中,我曾写过一篇<1 ...

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

    点击"小詹学Python","星标"或"置顶" 关键时刻,第一时间送达 本文转载自"AI算法之心" 在目前的机器学习领域 ...

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

    在目前的机器学习领域中,最常见的三种任务就是:回归分析.分类分析.聚类分析.在之前的文章中,我曾写过一篇<sklearn 与分类算法>.那么什么是回归呢? 回归分析是一种预测性的建模技术, ...

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

    当我们要解决任意一种机器学习问题时,都需要选择合适的算法.在机器学习中存在一种"没有免费的午餐"定律,即没有一款机器学习模型可以解决所有问题.不同的机器学习算法表现取决于数据的大小 ...

  6. 一份关于如何为回归任务选择机器学习算法指南

    摘要: 本文总结了一些针对于回归问题的机器学习方法,辩证地分析了其各自的优缺点,读者可以根据具体问题选择合适的机器学习算法以完成相应的任务. 当遇到任何类型的机器学习(ML)问题时,可能会有许多不同的 ...

  7. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  8. 回归模型选择(R语言版)

    回归模型选择(R语言版) 选择准测: With Cp , AIC and BIC, smaller values are better, but for adjusted R2 , larger va ...

  9. 当我们拿到数据进行建模时,如何选择更合适的算法?

    [每日一问]当我们拿到数据进行建模时,如何选择更合适的算法? Datawhale优秀回答者:mashagua,金小楗 目标导向 机器学习 1.先看是分类问题还是回归问题(分类就先从常用的分类模型里选择 ...

最新文章

  1. 主页被挟持 火狐浏览器_看过来!关于IE、360浏览器访问学校部分网站的设置说明在这里...
  2. Distcp 分布式拷贝
  3. HDU 2612 (两边一起)
  4. 美国副教授现身说法:如何改变“只收藏不阅读”的习惯
  5. iar怎么新建立项目_【IAR科研】2020年IAR国际学术科研项目——综合提升计划
  6. webpack官方文档分析(一):安装
  7. 注册测绘师考试(个人总结)—工程测量、地籍测量、房产测量、界线测量
  8. iOS 10 消息推送(UserNotifications)秘籍总结(一)
  9. C++编码实现定时任务执行功能
  10. pythondocumentation_python官方文档
  11. 数字麦克风灵敏度信噪比等指标解读
  12. Spring boot 文件下载乱码问题
  13. excel数据匹配_Python 自动整理 Excel 表格
  14. thymeleaf引用图片_thymeleaf显示图片(转)
  15. 一般试卷的纸张大小是多少_试卷,考试试卷是多大的纸
  16. 杨立昆最新访谈:AI威胁论是蒙昧主义,控制欲只有人才有 (全文+视频)
  17. 【电源专题】什么是开关稳压器
  18. 解决了计算机处理汉字的问题,计算机处理汉字必须解决的三个问题分别是汉字...
  19. dpdk-20.11 编译和安装
  20. 惊呆了!Java程序员最常犯的错竟然是这10个

热门文章

  1. C#开启线程的四种方式
  2. (四)建筑物多边形化简系统——“去尾巴”和分割复杂多边形
  3. BZOJ 1088 扫雷
  4. 自学ng2 -生命周期钩子
  5. flask的日志输出current_app.logger.debug
  6. Struts2之Ognl
  7. 关闭NPC call(__)
  8. noi99钉子和小球 解题报告
  9. python怎么把所有标点符号置空_Python从小白到攻城狮(1)——python环境搭建
  10. 手机邮箱配置QQ邮箱