合作专线:17362615757
行业资讯

AI新闻

当前位置:首页 > 行业资讯 > AI新闻

如何为再次回归其他问题选择中最合适的机器学习方法?


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

常用的回归算法回归竞赛问题以及解决方案正在进行中的回归竞赛问题
常用的回归算法
这里介绍一些回归问题中常用的机器学习方法,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_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]]))
5、贝叶斯岭回归
贝叶斯岭回归模型和岭回归类似。贝叶斯岭回归通过最大化边际对数似然来估计参数。
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)
6、SGD回归
上述的线性模型通过最小二乘法来优化损失函数,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)"""
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 KNeighborsRegressorneigh = 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 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)
11.RandomForest回归
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]]))
11、XGBoost回归
XGBoost近些年在学术界取得的成果连连捷报,基本所有的机器学习比赛的冠军方案都使用了XGBoost算法,对于XGBoost的算法接口有两种,这里我仅介绍XGBoost的sklearn接口。更多请参考: 

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))
12、LightGBM回归

LightGBM作为另一个使用基于树的学习算法的梯度增强框架。在算法竞赛也是每逢必用的神器,且要想在竞赛取得好成绩,LightGBM是一个不可或缺的神器。相比于XGBoost,LightGBM有如下优点,训练速度更快,效率更高效;低内存的使用量。对于LightGBM的算法接口有两种,这里我同样介绍LightGBM的sklearn接口。
更多请参考:
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))
回归竞赛问题以及解决方案
为了方便小伙伴们练习机器学习中的相关项目,这里整理一些回归竞赛问题,帮助入门机器学习的小伙伴们更加深入的掌握机器学习中的回归问题。
入门级比赛:

Kaggle——房价预测
这个比赛作为最基础的回归问题之一,很适合入门机器学习的小伙伴们。
网址:经典解决方案: XGBoost解决方案: Lasso解决方案: 
进阶比赛:

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

网址:经典解决方案:LightGBM: XGBoost: 第一名解决方案:
TOP比赛方案:

Kaggle——餐厅访客预测
网址:解决方案:1st 方案: 7th 方案:8th 方案:12th 方案:
Kaggle——CorporaciónFavoritaGrocery销售预测
网址:解决方案:1st 方案: 2st 方案:3st 方案:4st 方案:5st方案:6st方案:
正在进行中的回归竞赛

小伙伴们看到上面的解决方案是不是跃跃欲试,最近国内也有各大回归比赛,赶紧趁热打铁,来学习学习回归比赛吧!
2019年腾讯广告大赛——广告曝光预估
网址:
(本文为AI科技大本营转载文章,转载请联系原作者)

◆CTA核心技术及应用峰会◆5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。

更多重磅嘉宾请识别海报二维码查看,目前会议早鸟票发售中(原票价1099元),点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。

推荐阅读他25岁进贝尔实验室,32岁提信息论,40岁办达特茅斯会议,晚年患上阿兹海默 | 人物志微软沈向洋,百度李彦宏、王海峰,阿里王坚均候选中国工程院院士
小样,加张图你就不认识我了?“补丁”模型骗你没商量!| 技术头条东大漆桂林、清华李涓子、复旦肖仰华等大牛确认出席CTA峰会!5月一起打卡杭州京东 60 天哗变!CTO 成优化第一人 | 畅言异构计算=未来?一文带你秒懂3大主流异构《互联网人叹气图鉴》回报率29%! 大神用情感分析创建一个比特币交易算法, 原来交易玩的是心理战她说:为啥程序员都特想要机械键盘?这答案我服!
粤ICP备19111974号