• 用Python实现岭回归算法与Lasso回归算法并处理Iris数据集


    在介绍岭回归算法与Lasso回归算法之前,先要回顾一下线性回归算法。根据线性回归模型的参数估计公式可知可知,得到的前提是矩阵可逆。换句话说就是样本各个特征(自变量)之间线性无关。然而在实际问题中,常常会出现特征之间出现多重共线性的情况,使得行列式的值接近于0,最终造成回归系数无解或者无意义。

     为了解决这个问题,岭回归算法的方法是在线性回归模型的目标函数之上添加一个l2的正则项,进而使得模型的回归系数有解。具体的岭回归目标函数可表示为如下:

    在Python中,岭回归算法的实现方法如下。

     在Python中sklearn算法包已经实现了所有基本机器学习的算法。直接

    from sklearn.linear_model import Ridge,RidgeCV

    就可以调用该算法。

     Iris数据集的加载与预处理已在前文中介绍过,此处不再累述。定义岭回归算法的方法为如下:

    rigdeCV = RidgeCV(alphas=Lambdas,normalize=True,scoring='neg_mean_squared_error',cv=15)

    其中alphas用于指定多个λ值的元组或数组对象,默认该参数包含0.1、1和10三个值。normalize指是否对数据集进行归一化处理。scoring指的是用于评估模型的度量方法,此处为RMSE均分误差。cv指交叉验证的重数。

    此处我使用的是15重交叉验证法确定的λ值。上面Lambdas为logspace方法生成的数组。

    Lambdas = np.logspace(-5,2,200)

    最后训练,测试:

    rigdeCV.fit(X_train,Y_train)
    predictedResult = rigdeCV.predict(X_test)

    注意此处predictedResult为Series不是List。

    此时岭回归算法分类正确率为0.8。

     

    岭回归算法固然解决了线性回归模型中矩阵不可逆的问题。但岭回归算法无论如何会保留建模时所有的变量,无法降低模型的复杂度。为了克服岭回归算法的缺点,Lasso回归算法被提了出来。

     与岭回归算法类似,Lasso回归算法同样属于缩减性估计。而且在回归系数的缩减过程中,可以将一些不重要的回归系数缩减为0,以打到变量筛选的目的。Lasso回归算法的目标函数为如下:

    具体在Python上实现的方式与岭回归算法类似,先导入liner_model中的LassoCV类,然后就可以使用:

    lasso_cv = LassoCV(alphas=Lambdas,normalize=True,cv=10,max_iter=10000)

    这里max_iter指的是模型最大迭代次数。其它参数与岭回归类似。

    此时Lasso回归算法的准确率为0.8。

    由于岭回归算法和Lasso回归算法的相似性,在本次实验中,二者的分类结果完全相同,分类准确率同为0.8。考虑到线性回归并不是特别适合分类问题,所以这种结果也可以接受。下一步的学习方向是GBDT以及多种算法的综合模型。

  • 相关阅读:
    文件路径总结
    git本地仓库关联远程仓库
    webpack-dev-server版本
    box-sizing重置
    事件委托优缺点和实现
    移动端经验总结(持续更新)
    点击其他区域关闭dialog
    css3图片变灰
    安装 ubuntu 后,使用 sed 更换国内源
    在virtualBox中打开vdi(转载)
  • 原文地址:https://www.cnblogs.com/asagiyukina/p/10853090.html
Copyright © 2020-2023  润新知