线性回归通常是人们为机器学习和数据科学学习的第一个算法。它简单易懂,但是由于其功能有限,在实际业务中并不是最佳选择。大多数情况下,线性回归被用作基线模型来评估和比较研究中的新方法。,在处理实际问题时,我们应该了解并尝试过许多其他回归算法。在本文中,将通过使用Scikit-learn和 XGBoost 的动手练习来学习 9 种流行的回归算法。本文的结构如下:,本次数据使用的是一个藏在Python第三方vega_datasets模块中的著名的数据科学公开数据集。,vega_datasets里的数据集内容挺多,有统计数据也有地理数据,还有不同数据量的版本,例如flights数据集包含了2k、5k、200k、3m等多个版本。,调用是写:df = data('iris')或者df = data.iris(),数据存在在Anaconda3/Lib/site-packages/vega_datasets目录下,存本地的在local_datasets.json里有描述。本地存的有csv格式的也有json格式的。,线性回归通常学习机器学习与数据科学的第一个算法。线性回归是一种线性模型,它假设输入变量 ( X) 和单个输出变量 ( y)之间存在线性关系。一般来说,有两种情况:,这个算法很常见,Scikit-learn[2]内置简单线性回归LinearRegression()算法。接下来就和小猴子一起创建一个LinearRegression对象,并使用训练数据进行训练。,训练完成后,可以使用LinearRegression的coef_属性中查看模型系数参数:,现在使用训练好的模型并为训练数据拟合一条线。,关于线性回归的几个关键点:,当想要为非线性可分数据创建模型时,多项式回归是最受欢迎的选择之一。它类似于线性回归,但使用变量X和y之间的关系并为数据点找到绘制适合曲线的最佳方法。,对于多项式回归,一些自变量的幂大于 1。例如,可能提出如下的二次模型:,Scikit-learn内置多项式回归PolynomialFeatures。首先,我们需要生成一个由所有具有指定次数的多项式特征组成的特征矩阵:,接下来,让我们创建一个LinearRegression对象并将其拟合到X_poly我们刚刚生成的特征矩阵中。,现在采用该模型并为训练数据拟合一条线,X_plot如下所示:,关于多项式回归的几个关键点:,众所周知的支持向量机在处理分类问题时非常有效。其实,SVM 也经常用在回归问题中,被称为支持向量回归(SVR)。同样,Scikit-learn内置了这种方法SVR()。,在拟合 SVR 模型之前,通常较好的做法是对数据进行数据标准化操作,及对特征进行缩放。数据标准化的目的是为了确保每个特征都具有相似的重要性。我们通过StandardScaler()方法对训练数据操作。,接下来,我们创建了一个SVR与对象的内核设置为'rbf'和伽玛设置为'auto'。之后,我们调用fit()使其适合缩放的训练数据:,现在采用该模型并为训练数据拟合一条线,scaled_X如下所示:,支持向量回归的几个关键点,决策树 (DT) 是一种用于分类和回归的非参数监督学习方法 。目标是创建一个树模型,通过学习从数据特征推断出的简单决策规则来预测目标变量的值。一棵树可以看作是分段常数近似。,决策树回归也很常见,以至于Scikit-learn内置了DecisionTreeRegressor. 甲DecisionTreeRegressor对象可以在没有特征缩放如下创建:,下面使用训练好的模型,绘制一条拟合曲线。,关于决策树的几个关键点:,一般地,随机森林回归与决策树回归非常相似,它是一个元估计器,在数据集的各种子样本集上拟合许多决策树,并使用平均方法来提高预测准确性和控制过拟合。,随机森林回归器在回归中的性能可能比决策树好,也可能不比决策树好(虽然它通常在分类中表现更好),因为树构造算法本质上存在微妙的过度拟合-欠拟合权衡。,随机森林回归很常见,以至于Scikit-learn内置了RandomForestRegressor. 首先,我们需要创建一个RandomForestRegressor具有指定数量估计器的对象,如下所示:,下面使用训练好的模型,绘制一条拟合曲线。,关于随机森林回归的几个关键点:,LASSO 回归是使用收缩的线性回归的变体。收缩是数据值向中心点收缩作为均值的过程。这种类型的回归非常适合显示重度多重共线性(特征彼此之间的重度相关性)的模型。,Scikit-learn内置了LassoCV.,下面使用训练好的模型,绘制一条拟合曲线。,关于套索回归的几点:,岭回归与 LASSO 回归非常相似,因为这两种技术都使用收缩。Ridge 回归和 LASSO 回归都非常适合显示重度多重共线性(特征彼此之间的高度相关性)的模型。它们之间的主要区别在于 Ridge 使用 L2 正则化,这意味着没有一个系数像在 LASSO 回归中那样变为零(而是接近零)。,Scikit-learn内置了RidgeCV.,下面使用训练好的模型,绘制一条拟合曲线。,关于岭回归的几个关键点:,ElasticNet 是另一个使用 L1 和 L2 正则化训练的线性回归模型。它是 LASSO 和岭回归技术的混合体,因此它也非常适合显示严重多重共线性(特征彼此高度相关)的模型。,Lasso 和 Ridge 之间权衡的一个实际优势是它允许 Elastic-Net 在旋转时继承一些 Ridge 的稳定性。,Scikit-learn内置了ElasticNetCV模型.,下面使用训练好的模型,绘制一条拟合曲线。,ElasticNet 回归的几个关键点:,极限梯度提升( XGBoost ) 是梯度提升算法的高效实现。梯度提升是指一类可用于分类或回归问题的集成机器学习算法。,XGBoost是由最初开发的开放源码库tianqi-chen[3]在他的题为“2016论文XGBoost:可扩展树增压系统[4]”。该算法被设计为具有计算效率和高效性。,第一步是安装 XGBoost 库(如果尚未安装)。,可以通过创建以下实例来定义 XGBoost 模型XGBRegressor:,下面使用训练好的模型,绘制一条拟合曲线。,关于 XGBoost 的几个关键点:,到这里本文就结束啦,本文我们通过使用Scikit-learn和 XGBoost 的动手实践介绍了 九种流行的回归算法。在解决实际问题时,可以尝试不同的算法并找到解决实际问题的最佳回归模型。
© 版权声明
文章版权归作者所有,未经允许请勿转载。