python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)...

欢迎关注哈希大数据微信公众号【哈希大数据】

在之前我们介绍了直接使用线性回归进行波士顿房价的预测,但是预测准确率仅有60%左右。预测准确率不高一方面是我们未对数据进行一定的预处理(包括归一化和标准化等),这样不能确保在使用优化方式时,对不同特征参数起到同样的影响。 其次是未深入挖掘数据特征间关系,比如当原始数据某些特征与目标值不具有线性关系时,不应当纳入训练模型中。而且数据特征之间可能存在共线性等其他问题,不完全适合使用线性回归模型进行拟合。

因此,本节我们将介绍Ridge Regression(岭回归)和Lasso Regression(拉索回归),进行波士顿房价数据集中的特征选取和共线性问题的处理,从而更加准确的构建模型实现房价预测。

算法理论介绍

机器学习机制回顾

在之前Linear Regression普通线性回归的应用中(忘记的小伙伴可拉到文末查看线性回归详情内容),我们的输入数据是具有13个特征属性的波士顿房价数据集。

回归模型的构建就是实现这13个特征属性值的线性加权之和,用于与实际的房价进行拟合。

image

然后通过机器学习功能来训练数据集进而获取该模型的参数也就是每个特征属性之前的权值系数(即权值a的确定)。

机器学习是如何得到权值呢?是通过定义的一个损失函数,实现将训练数据代入我们模型的预测房价和真实房价的差的平方,然后再将这些平方求和,即普通最小二乘法。

image

因此求权值a的问题,就成了损失函数求和的最小化的最优化问题。

通过一定的理论推导可以得知权值系数实际为(特征属性值的广义逆):

image

而且普通的线性回归算法可以直接训练得到该结果进而实现对房价的预测。

但是,直接使用普通的线性回归模型,当训练样本数量过少,甚至少于样本维数(仅有12条房屋数据),这样将导致特征数据矩阵无法求逆,则不能完成参数a的估计;其次如果样本特征中存在大量相似的特征(即样本属性之间存在共线性关系),将会导致很多权重所代表的意义重复,使原本简单高效的模型复杂化。

因此希望可以对参数a的计算时提供某种约束(增加一个惩罚因子),只保留具有共线性的一个特征属性值,而实现特征数据的缩减同时解决过拟合的问题,岭回归和拉索回归恰好可以解决该问题。

下面来详细了解一下岭回归和拉索回归的相关理论和python实现。

岭回归 Ridge

在出现普通线性回归无法解决的问题时,可以在原来加一个小扰动值λI

image

,其中I为对角矩阵

image

,可以对特征属性的权重计算进行一定约束,形象的称加入的对角矩阵I为岭。当λ越大,惩罚约束作用就越大,而原始数据对回归求取参数的作用就会减小,λ为0时也就是普通的线性回归算法。如果给λ指定一个合适的值,就能在一定意义上解决过拟合的问题(原先过拟合的特别大或者特别小的参数会被约束到正常取值但不会为零)。可以通过多次调试寻找较优的λ值,也就是当λ调整到获取的参数值稳定时即可。

因此岭回归可以初步解决特征权值参数a的动态调整(普通线性回归是无偏估计的唯一值),进而缓解过拟合的问题(尽可能找到不同 特征与目标值的具体关系)。

拉索回归 Lasso

岭回归可以动态调整特征属性的权重参数,进而使得模型更加契合实际情况,充分解释不同特征对目标值的影响力,但是其只能将具有线性相关的相似特征属性的权重降低却不能完全剔除。

拉索回归与岭回归类似也是加入了一个扰动项,其使用的惩罚项对角矩阵而是可以实现特征选择的收缩惩罚性:

image

,可以保证当λ充分大时可以把某些特征属性的权重精确地收缩到0,也就是在模型中剔除了该特征属性,从而从大量特征数据中挑选出。该方法的两大好处:一方面剔除噪声特征(也就是房价不受其影响的特征),其次可以消除具有线性相关关系的不同属性(会造成模型的不稳定,原因在之后做具体介绍)。

除此以外,岭回归中的约束因子λ需要手动调试,而在拉索回归算法中,可以实现λ参数的交叉验证,而寻找使得误差最小的λ的取值,使用交叉检验的训练方法可以进一步提高模型的科学性和准确性。

python实现

Ridge python

同样使用scikit-learn库中的包实现该算法,岭回归算法实现的部分代码如下:

from sklearn.linear_model import Ridge

岭回归模型的导入

ridge = Ridge(alpha=float(‘{}’.format(i))).fit(house_price_train_X,house_price_train_y)# 默认的lamda的参数为i

岭回归模型训练的准确率

predict_result_ridge = ridge.predict(house_price_test_X)

predict_result_ridge1 = ridge.score(house_price_train_X, house_price_train_y)

predict_result_ridge0 = ridge.score(house_price_test_X, house_price_test_y)

print(‘岭回归惩罚参数为 {} ,训练集的准确率:’.format(i),predict_result_ridge1)

print(‘岭回归惩罚参数为 {} ,测试集的准确率:’.format(i), predict_result_ridge0)

Lasso python

普通拉索回归算法实现的部分代码如下:

普通拉索回归模型的导入

from sklearn.linear_model import Lasso

lasso = Lasso(alpha=np.float(‘{}’.format(i)) ,max_iter=1000000).fit(house_price_train_X, house_price_train_y) # 默认的lamda的参数为i

拉索模型训练的准确率

predict_result_lasso = lasso.predict(house_price_test_X)

predict_result_lasso1 = lasso.score(house_price_train_X, house_price_train_y)

predict_result_lasso0 = lasso.score(house_price_test_X, house_price_test_y)

print(‘拉索回归惩罚参数为 {} ,训练集的准确率:’.format(i), predict_result_lasso1)

print(‘拉索回归惩罚参数为 {} ,测试集的准确率:’.format(i), predict_result_lasso0)

print(‘拉索回归惩罚参数为 {},使用的特征属性有:{}’.format(i,np.sum(lasso.coef_ != 0))

交叉验证的拉索回归算法实现的部分代码如下:

实现交叉检验拉索回归模型的导入

from sklearn.linear_model import LassoCV

lasso_cv = LassoCV(alphas=np.logspace(-3,1,2,50) ,max_iter=1000000).fit(house_price_train_X, house_price_train_y) # 默认的lamda的参数为i

交叉检验拉索模型训练的准确率

predict_result_lasso_cv = lasso_cv.predict(house_price_test_X)

predict_result_lasso_cv1 = lasso_cv.score(house_price_train_X, house_price_train_y)

predict_result_lasso_cv0 = lasso_cv.score(house_price_test_X, house_price_test_y)

print(‘交叉检验拉索回归 训练集的准确率:’, predict_result_lasso_cv1)

print(‘交叉检验拉索回归 测试集的准确率:’, predict_result_lasso_cv0)

image.png

预测对比结果

1、当设置惩罚参数为0时会提示建议使用回归模型。2、当惩罚参数不同时,lasso算法选数据特征属性个数是不同的。3、如果惩罚参数设置过大,则无法进行预测。4、也因数据自身特征,三种方式的预测准确率相差不大。可以提示我们在训练不同数据时,要针对性的选用不同模型。(源码请直接通过给后台发消息获取哦!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode64. 最小路径和(dp)

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。代码 …

mysql浅拷贝_深拷贝与浅拷贝

在Python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。1、浅拷贝:利用切片操作、工厂方法list方法拷贝2、深拷贝:…

盘州市“检企联合” 探索大数据应用新路

为认真贯彻落实“科技强检”及推进大数据应用的决策部署,8月31日,盘州市人民检察院组织召开以“检察大数据”为主题的“两长”座谈会。市经信局、中国移动盘州分公司、中国电信盘州分公司等单位负责人,检察院在家班子成员及院各部门主要负责人…

iOS中的颜色

最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下。 先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout 里通过nib 注册使用,为这个xib设置了背景色&#x…

编程面试中需要了解的5件事

This article is intended for those who are trying to start their programming career, or are preparing to interview for their dream job. As someone who’s been on both sides of the interviewing table, I understand how it feels to be the interviewee.本文适用…

多线程的基础知识

1、程序、进程、线程的基本概念 程序:为了完成某种任务用某一种语言编写的一组指令的集合就叫程序。程序就是一段静态的代码。 进程:进程是程序的依次执行过程,或者说是正在运行的一个程序。这是一个动态的过程,有它自身的产生运行…

springboot实现单点登录_什么是单点登录,php是如何实现单点登录的

文章来自:php中文网链接:https://www.php.cn/php-weizijiaocheng-429869.html作者:中文网商务合作:请加微信(QQ):2230304070视频教程分享码农网:http://www.mano100.cn/rjyfk_url-url.html ,升级终身会员即…

背景图处理,这是个好东西记录一下

背景图处理 rgba (),前3个是三原色,第四个参数是透明度转载于:https://www.cnblogs.com/ChineseLiao/p/7479207.html

python使用GUI(图形用户界面)

打开后: File→New File(Ctrl N) 转载于:https://www.cnblogs.com/ly123456/p/6269859.html

Altium Designer(AD24)新工程复用设计文件图文教程及视频演示

🏡《专栏目录》 目录 1,概述2,复用方法一视频演示2.1,创建工程2.2,复用设计文件 3,复用方法二视频演示4,总结 欢迎点击浏览更多高清视频演示 1,概述 本文简述使用AD软件复用设计文件…

两点定标法_一种两点校正红外热像仪的非均匀性的模块及方法

一种两点校正红外热像仪的非均匀性的模块及方法【技术领域】[0001] 本发明属于红外热成像系统的非均匀性校正领域,特别是一种两点校正红外热像 仪的非均匀性的模块及方法。【背景技术】[0002] 在过去的几十年中,红外探测器件的元数不断增加,由…

leetcode851. 喧闹和富有(dfs)

在一组 N 个人(编号为 0, 1, 2, …, N-1)中,每个人都有不同数目的钱,以及不同程度的安静(quietness)。 为了方便起见,我们将编号为 x 的人简称为 "person x "。 如果能够肯定 perso…

如何选择正确的容器编排以及如何进行部署

by Michael Douglass迈克尔道格拉斯(Michael Douglass) 如何选择正确的容器编排以及如何进行部署 (How to choose the right container orchestration and how to deploy it) Running server processes inside containers is here to stay. If your environment is small with…

Oracle 学习笔记(三)

oracle 表查询 oracle 表基本查询 在此,基于 scott 用户存在的 emp,dept 表演示学习。 emp 雇员表 clerk 员工 salesman 销售 manager 经理 analyst 分析师 president 总裁 mgr 上级的编号 hiredate 入职时间 sal 工资 comm 奖金 deptno 部…

html meta标签使用总结(转)

之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8"> 但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方。 简介 在查…

bzoj 4009 接水果 整体二分

Description 先给出一些盘子, 用路径x-y表示, 有权值 再有Q个询问, 表示水果, 用路径x-y表示 如果盘子是水果的子路径, 可以接住 对于每个水果, 输出可以接住它的盘子的第k小权 Solution 对于x-lca-y的盘子&#xff0c;水果一定一个在x子树&#xff0c;一个在y子树 对于x-lca的…

离散元 python_刚开始学习离散元软件Yade,有什么建议?

用Yade-DEM 做过博士期间的部分工作&#xff0c;也是从毫无所知到算是入门&#xff0c;分享一点我的学习过程&#xff0c;为那些刚接触Yade的同学提供些许参考&#xff0c;希望对大家有帮助。0. Yade 简介Yade 是一个用于离散元分析的开源平台&#xff0c;是法国Lab 3SR-Grenob…

leetcode529. 扫雷游戏(dfs)

让我们一起来玩扫雷游戏&#xff01; 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷&#xff0c;‘E’ 代表一个未挖出的空方块&#xff0c;‘B’ 代表没有相邻&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右&#xff0c;和所有4个对角线&#…

redhat6 删除mysql_Red Hat enterprise linux 6卸载默认安装的 mysql

因为Red Hat enterprise linux 6 自带了一个mysql&#xff0c;所以当你安装新的mysql时&#xff0c;就会提示错误如&#xff1a;error&#xff1a;Failed dependencies&#xff1a;MySQL conflicts with mysql-5.1.47-4.el6.i686rmp -qa mysql 可以看到安装的mysql于是将自带的…

swift通知栏推送_如何使用Swift使用推送通知构建食品交付应用

swift通知栏推送by Neo Ighodaro由新Ighodaro 如何使用Swift使用推送通知构建食品交付应用 (How to build a food delivery app with push notifications using Swift) A basic understanding of Swift and Node.js is needed to follow this tutorial.要学习本教程&#xff0…