大家早安、午安、晚安,上一篇学习了一些常见线性回归算法的核心思想以及简单的编程实现,本文主要是了解一些scikit-learn中的回归模型的主要内容和应用方法,希望对大家有所帮助。正文开始~~
点开sklearn中的Regression部分的内容,震惊了,光线性回归模型就如图1所示的一大片,更别说其他的非线性回归方法了,但是本文还是对应上一篇的内容,只聊聊sklearn中的最小二乘法和岭回归。
一、广义线性模型(Generalized Linear Models)
sklearn中的广义线性模型指的是:通过对输入特征值的线性组合来预测目标值,正如图2所述:
图2中,coef_在某一定程度上表示特征值之间的相关程度;intercept_表示插入的一个值。
1、最小二乘法(Ordinary Least Squares)-对应模型:LinearRegression
这个模型中权重的求解,主要是基于图3中的最优化模型:
class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)
normalize->对数据进行归一化,提升算法的鲁棒性,使用该参数的前提四fit_intercept设置为true,否则无效。
1)标准化(Standardization)与归一化(Normalization)
备注:其实在对特征值的预处理过程中,sklearn提供了不同的处理方法,详情见Preprocessing data,此处只简单介绍简单的几种。
Standardization->对数据进行标准化,通过scale函数将数据转换为标准正态分布数据(N~(0,1))(此函数可以规定处理的轴是axis=0或axis=1,0表示每个特征值下的全部数据处理为标准正太分布,1表示每个样本的特征值做标准正态化处理)。
此外,还有一些方法,如最大最小值方法,将特征值限定在一定的范围区间内,比如MinMaxScaler、MaxAbsScaler
什么时候进行标准化比较好(来之知乎大牛的解释):
针对基于距离的分类或者回归算法,需要scale数据,这样那些实际不重要、但是数值比较大的特征值,就不会因为数值大而影响决策
Normalization->主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。p-范数的计算公式:||X||_p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p。该方法主要应用于文本分类和聚类中
具体操作的话,针对每个样本,先求解该样本的p范数,然后让该样本的每个特征值除以该范数.处理后每个样本的p-范数和为1。适宜度量样本的相似性。
关于标准化和归一化,可以参考About Feature Scaling and Normalization
2、岭回归(Ridge Regression)->Ridge
sklearn中岭回归模型和上一篇中提到的岭回归的模型是一样的,就是在最小平方误差的基础上加上对惩罚因子:
class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)
alpha->岭参数,默认是1,数字越大,对应的回归系数越小,趋于稳定;数字越小,回归系数越大,回归系数不稳定。详情见上一篇
举个栗子:存在一组数据,且找到完全符合y=w*x+c的w,利用岭回归模型,设置不同的alpha参数时,对比拟合得到的回归参数coef_和w的平方误差的区别。
1)准备数据
2)设置不同的alpha参数,对比不同alpha对回归效果的影响
3)效果图
从上图9可以看到,岭参数会影响回归参数的准确度,当alpha很大后,误差非常大;当alpha很小时,回归参数都很大且基本不变。在alpha的变化中,发现有些回归系数增大,有些减小,表明这些特征值之间存在相关性。发现在alpha=1时,准确性效果还不错。
好哒,先到这里,以后继续深入探索,请见谅。晚安~