技术标签: 机器学习 深入浅出python机器学习
线性模型的基本概念 |
线性模型的一般公式
在机器学习领域,常用的线性模型包括线性回归、岭回归、套索回归、逻辑回归和线性SVC等。
假如我们有一条直线,其方程是 y = 0.5x+3,
通过两个点((1,3)和(4,5))的直线模型:
线性模型的图形表示
打印直线方程:
当数据有三个点((1,3)、(4,5)和(3,3))时:
可以看出没有穿过任何一个点,而是位于一个和3个点的距离相加最小的位置,直线方程为:
我们以scikit-learn生成的make_regression数据集为例,用Python语句绘制一条线性模型的预测线,更加清晰地反映出线性模型的原理:
打印拟合直线的系数和截距:
注意:细心的读者可能注意到coef_和intercept_这两个属性非常奇怪,它们都是一下划线_结尾。这是scikit-learn的一个特点,它总是用下划线作为来自训练数据集的属性的结尾,以便于将它们与用户设置的参数分开。
线性模型的特点
在上面内容中,我们使用的特征数只有1个的数据集。用于回归分析的线性模型在特征数为1的数据集中,是使用一条直线来进行预测分析,而当数据的特征数量达到2时则是一个平面,而对于更多特征数量的数据集来说,则是一个高维的超平面。
如果和K最近邻模型生成的预测进行比较的话,你会发现线性模型的预测方法是非常有局限性的——很多数据都没有体现在这条直线上。从某种意义上说,这是一个问题。因为使用线性模型的前提条件,是假设目标y是数据特征的线性组合。但需要特别注意的是,使用一维数据集进行验证会让我们有一点偏颇,而对于特征变量较多的数据集来说,线性模型就显得十分强大。尤其是,当训练数据集的特征变量大于数据点的数量的时候,线性模型可以对训练数据做出近乎完美的预测。
用于回归分析的线性模型也有很多种类。这些模型之间的区别在于如何从训练数据中确定模型参数w和b,以及如何控制模型复杂度.
线性回归 |
线性回归,也称为普通最小二乘法(OLS),是在回归分析中最简单也是最经典的线性模型。
岭回归——L2正则化项 |
岭回归的原理
岭回归也是回归分析中常用的线性模型,它实际上是一种改良的最小二乘法。从实际应用角度看,岭回归实际上是一种能够避免过拟合的线性模型。
在岭回归中,模型会保留所有的特征变量,但是会减小特征变量的系数值,让特征变量对预测结果的影响变小,在岭回归中是通过改变alpha参数来控制减小特征变量系数的程度。
通过保留全部特征变量,只是降低特征变量的系数值来避免过拟合的方法,我们称之为L2正则化。
可以看到得分有所调整,训练集和测试集得分一致。由于岭回归是一个相对受限的模型,所以降低了发生过拟合的可能性。
可以说,复杂度越低的模型在训练数据集上的表现越差,但是其泛化能力会更好。如果我们更在意模型在泛化方面的表现,那么我们就应该选择岭回归模型,而不是线性回归模型。
岭回归的参数调节
岭回归是在模型的简单性(使系数趋于零)和它在训练集上的性能之间取得平衡的一种模型。
注意:alpha的取值并没有一定之规。alpha的最佳设置取决于我们使用的特定数据集。增加alpha值会降低特征变量的系数,使之趋于零,从而降低在训练集的性能,但更有助于泛化。
提高了alpha,模型得分大幅度降低,然而测试集上的得分超过了训练集上的得分。这说明,如果我们的模型出现过拟合现象,可以通过提高alpha值来降低过拟合的程度。
这时相比于线性回归模型略微好点,可以尝试降低alpha值来降低过拟合程度。
可以看出较高的alpha值代表模型的限制更加严格,当alpha较高时coef_属性的数值 会更小,反之coef_属性的数值更大。
当alpha=0.1时,特征变量的系数比较大,甚至大部分于线性回归的系数重合。而线性回归模型没有经过正则化处理,从而对应的系数会特别大,甚至跑出了图外。
通过固定alpha值,改变训练数据集的数据量。可以看出不论在岭回归还是线性回归中,训练数据集的得分都比测试数据集的得分要高。而由于岭回归时正则化处理过的模型,因此它在整个图像中训练数据集的得分要比线性回归的得分低。
相比之下,岭回归在训练测试数据集的得分于训练数据集的得分差异就要小一些,尤其是在数据子集比较小的情况下。
从图中我们也可以看出,如果有足够多的数据,正则化就显得不是那么重要了,岭回归和线性回归的表现也就相差无几。
注意:随着数据量的增加,线性回归在训练数据集的得分是下降的,这说明随着数据增加,线性回归模型就越不容易产生过拟合的现象,或者说越难记住这些数据。
套索(lasso)回归——L1正则化项 |
套索(lasso)回归的原理
与岭回归一样,lasso回归也会将系数限制在非常接近0的范围内,但它进行方式略微有点不一样,称之为L1正则化。
L1正则化会使lasso回归的一些特征系数正好为0,也就是说,有一些特征会被忽略,这可以看作模型对特征的进行自动选择的一种方式。把一部分系数变成0有助于让模型更加容易理解,而且可以突出体现模型中最重要的那些特征。
与岭回归类似,lasso回归也有一个正则化参数alpha,用它来控制特征变量系数被约束到0的强度。
套索回归的参数调节
在上面例子中用了alpha默认值1.0,为了降低欠拟合的程度,我们可以试着降低alpha的值。与此同时,我们还需要增加最大迭代次数(max_iter)的默认设置。
可以看出降低alpha值,可以拟合出更加复杂的模型,从而在训练数据集和测试数据集都能获取良好的表现。而且相比于岭回归,lasso回归表现稍好一点,只用了10个特征中的7个特征。
但是,如果把alpha值设置的太低,就等于把正则化效果去除了,那么模型可能会像线性回归一样,出现过拟合。例如:
套索回归于岭回归的对比
针对不同的alpha值,将lasso回归和岭回归做个对比:
分析上图发现,当alpha=1时,大部分系数为0,不为零的系数非常小;当alpha=0.1时,大部分系数为0,但是系数为0的相比于alpha=1时有所减少;当alpha=0.0001时,模型几乎没有被正则化,大部分系数都是非零的,而且数值比较大;当alpha=0.1时,lasso回归和岭回归在预测能力上一致,但是,使用岭回归模型的时候几乎所有系数不为0。
在实践当中,岭回归往往是这两个模型中的优选。但是如果你的数据特征过多,而且其中一小部分是真正重要的,那么lasso回归就是更好的选择。同样如果你需要对模型进行解释的话,那么lasso回归会让你的模型更容易被人理解,因为它只是使用了输入特征的一部分。
注意:scikit-learn还提供了一种模型,称为弹性网模型(Elastic Net)。弹性网模型综合了lasso回归和岭回归的惩罚因子。在实践中这两个模型的组合效果最好的,然而代价是用户需要调整两个参数,一个是L1正则化参数,另一个是L2正则化参数
Spring Batch(7): 并行与扩展2016-03-26 23:54 846人阅读 评论(0) 收藏 举报 分类:Spring(6) 版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]1. 概述spring Batch提供了多种方式用于处理并行,提高性能。主要分为2大类: _springbatch 合并列
Ambari-安装&配置&优化安装过程中碰到的问题jdk, seLinux, ssh等略过ambari 安装ambari add server服务配置&优化HDFS安装过程中碰到的问题jdk, seLinux, ssh等略过ambari 安装解压tar zxf /opt/ambari/HDP-UTILS-1.1.0.21-centos7.tar.gz -C /va..._ambari调优
Apache Iceberg是一种用于大型数据分析场景的开放表格式(Table Format)。Iceberg使用一种类似于SQL表的高性能表格式,Iceberg格式表单表可以存储数十PB数据,适配Spark、Trino、PrestoDB、Flink和Hive等计算引擎提供高性能的读写和元数据管理功能,Iceberg是一种数据湖解决方案......_iceberg 数据湖
谷歌翻译。Auto Close Tag 自动添加HTML / XML关闭标签。Auto Rename Tag 自动重命名配对的HTML / XML标签。Beautify 对javascript, JSON, CSS, Sass, and HTML进行格式化对齐显示。Chinese (Simplified) Language Pack for Visual Studio Code 汉化包。Color Info 通过将鼠标悬停在颜色代码处,就可以看到颜色的预览,以及有关其转换为..
首先是有一个需求,两个显示器,程序自动获取自己所在的显示器大小,并显示到右下角。我们都知道C#有一个Screen.PrimaryScreen.Bounds,可以获取屏幕的完整尺寸,但是只能获取主显示器的尺寸,后来我发现又一个Screen.GetBounds(this),可以获取程序所在的屏幕尺寸。Console.WriteLine("主显示器完整尺寸:");Console.WriteL..._c#获取屏幕大小
数据库1.1数据库是什么数据库:存储数据的一个仓库数据库系统(DataBase System)2.1系统操作系统2.2数据库系统数据的一个工作流程系统是由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬 件)和软件平台(软件)五部分构成的运行实体数据库管理系统(DataBase Management System)3.1数据库管理系统用来管理数据库的一个软件是数据库系统的一个重要组成部分,是位于用户与操作之间的一层数据管理软件,负责数
vue实现一个div 点击外部消失vue 外部 div 点击监听 @Watch("ifShowFilter") @Watch("ifFilterLocked") filterWindowChange() { if (this.ifShowFilter === true && this.ifFilterLocked === false) { ..._菜单怎么在div外
导读:很可能,在不久的将来大多数的岗位都会由机器来担任。很多职位,如司机、医生,将会很快消失或发生巨大变化,进入全新的发展时代。看起来程序仍会继续担任程序员助手或后备的角色。毕竟,像无人驾驶、医疗诊断、切肉机等都需要先进行编程,对吗? 答案是否定的。什么是编程?编程就是把想法如数理模型,游戏,商业等转化为代码的活动,从而使计算机可以执行它同时其他人..._编程会被机器人取代吗
A题:最佳暑期工作虽然现在才11月份,但你需要开始为2021年的暑期工作做计划。今年你有各种各样的选择,但你想找出其中“最佳”的选择。你向你的数学建模小组提出了这个问题:我们有很多暑期工作的机会。有些允许我们在家线上工作,有些则需要步行或骑自行车,而另一些则要求我们开车或乘列车才能到达工作地点。每个工作每周提供不同的小时数,并且时薪也有所不同。其中一些涉及体育活动,或至少不坐在办公桌前(例如,商店的收银员,救生员或餐厅的服务员),而另一些则通常是久坐的,并可能需要分析和组织能力(例如,数据分析,办公室管_2020himcm a
目录在模型中增加元数据元数据选项abstractapp_labelbase_manager_namedb_tableget_latest_bymanagedorderingpermissionsdefault_permissionsproxyrequired_db_vendorunique_togetherindex_togetherverbose_namelabel模型的元数据, 指的是 除了字段外的所有内容在模型中增加元数据需要在模型类中添加一个子类, 名字是固定的Meta.from djang_django 元数据
在自己虚拟机上配置完成,并能运行项目后。把方法整理后交给同事,以为完事了 甚是高兴 不幸 又出现错误 ,原本以下 四步 就可完成安装# tar –zxvf mysql-5.0.95# ./configure --prefix=/usr/local/mysql --with-charset=gbk# make# make install但在make的时候 出现make: *** No targets..._ubuntu configure: error: no curses library functions found
把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换。把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。这个 高低字节交换 之后的,才是算出来的modbus的CRC校验码。加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器。_modbus校验码计算器