可扩展机器学习——线性回归(linear Regression)
注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图也是引用的原来的教程,若内容上有任何错误,希望与我联系,若内容有侵权,同样也希望告知,我会尽快删除。这部分本应该加上实验的部分,实验的部分在后期有时间再补上。
可扩展机器学习系列主要包括以下几个部分:
概述 - Spark分布式处理 - 线性回归(linear Regression) - 梯度下降(Gradient Descent) - 分类——点击率预测(Click-through Rate Prediction) - 神经科学
三、线性回归(linear Regression)
1、线性回归概述
回归(Regression)问题的目标是从观测样本中学习到一个到连续的标签值的映射,这是一个监督学习的问题。回归问题有:
- Height, Gender, Weight → Shoe Size
- Audio features → Song year
- Processes, memory → Power consumption
- Historical financials → Future stock price
- 等等
2、线性最小二乘回归
2.1、回归的基本概念
2.2、线性回归的优点
上述便是线性回归的基本形式,对于线性回归,有以下的一些优点:
- 简单
- 在实际中通常表现很好
- 通过对特征的提取,可以引进复杂的模型
2.3、线性回归的目标
线性回归的目标是找到一条直线或者称为超平面能够最好的拟合样本,如下面的1−D1-D的情况:
其中,x轴表示的特征,y轴表示的是标签。此时的线性映射为:
2.4、线性回归的评价
2.5、线性模型的学习
2.6、线性回归模型的求解
2.7、过拟合和泛化能力
求解模型的目的是要使用模型,即在新的数据集上使用模型,若其能在新的数据集上表现的很好,说明求解出的模型具有很好的泛化能力(Generalization ability)。最小均方回归容易导致过拟合,因为其对训练数据过分拟合。过拟合的情况如下图所示:
简单的模型通常更具有泛化能力(Occam剃刀)。
3、回归问题实例
3.1、监督学习的流程
对于监督学习的流程的具体过程见下图:
3.2、音乐发行年代的预测
对于具体的监督学习任务,可以拆分成下面的过程:
下面是每一步具体的操作。
3.2.1、获取数据
实验的目标是要根据音乐中声音特征预测音乐所属的年代,原始数据可以从UCI的ML库中找到Millionsong Dataset
,地址为YearPredictionMSD Data Set。原始数据中是1980到2014年间的西方的商业唱片,特征为平均12音色,标签为发行年代。
3.2.2、分割数据集
将数据集分成训练集和测试集,训练集用于训练,而测试集用于评价模型的优劣。测试误差显示出我们的模型是否具有很好的泛化能力。
3.2.3、特征提取
3.2.4、监督学习
此时,数据集中就包括了训练集,验证集和测试集,其中,训练集用于训练模型,验证集用于评估不同的模型,测试集则是评估最终的模型的准确性。
对于模型中的一些自由参数,或称为超参数(hyperparameter),可以采用网格搜索(Grid Search)的方法获取,网格搜索是指定义好区间,在区间上取固定的长度来取得不同的值,如下图所示:
3.2.5、评估
3.2.6、预测
预测是指对新的观测数据,利用训练好的模型对其进行预测,得到相应的年代。
4、分布式实现
如:
矩阵的乘法也可以通过矩阵对应的列和行的外积的和实现。
如:
在分布式实现的时候,可以采用如下的方法实现矩阵的计算:
若需要PDF版本,请关注我的新浪博客@赵_志_勇,私信你的邮箱地址给我。
参考文献
- .Net中DES加密的细节问题
- 分布式监控系统Zabbix--完整安装记录 -添加web页面监控
- .Net中使用带UI的OCX的方法
- 2017数据科学领域15大热门GitHub项目
- 简单分页的性能优化
- Flash/Flex学习笔记(42):坐标旋转
- 分布式监控系统Zabbix-完整安装记录 -添加端口监控
- Flash/Flex学习笔记(40):弹性运动续--弹簧
- 表格样式—粗边框细表格线
- 分布式监控系统Zabbix--完整安装记录 -添加apache监控
- Flash/Flex学习笔记(38):缓动动画
- 把EmEditor改造成简单的Word
- centos7下FFmpeg环境部署记录
- Mac下使用rz、sz远程上传下载文件的配置记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pandas.DataFrame.drop_duplicates 用法介绍
- python如何进入交互模式
- PHP静态方法和静态属性及常量属性的区别与介绍
- 详解PHP变量传值赋值和引用赋值变量销毁
- Keras 利用sklearn的ROC-AUC建立评价函数详解
- PHP如何防止XSS攻击与XSS攻击原理的讲解
- 如何验证python安装成功
- python三引号如何输入
- Python定义一个函数的方法
- keras 模型参数,模型保存,中间结果输出操作
- python判断是空的实例分享
- keras绘制acc和loss曲线图实例
- 基于Python实现2种反转链表方法代码实例
- Python smtp邮件发送模块用法教程
- Python3基于print打印带颜色字符串