[ML]机器学习(machine learning)的入门之旅
背景
大学室友问我有没有参加过kaggle,我说这是啥?(听都没听过...)
他说他最近在做一个关于bosch(博世)的工业数据预测问题,问我有没有兴趣玩玩数据分析?
我一想,刚好最近也闲来无事,不如了解下...
前言
kaggle其实就是个数据分析/机器学习的比赛了,里面会有各种官方机构或者无聊之人,出各种题目,让你做,然后弄个leaderboard(排行榜),第一名或者前几名获得最终奖金。 (国内有个类似的比赛叫 天池, 基本就是阿里淘宝每年双十一的用户购买欲预测或者商品推荐算法等)
所以,要参加kaggle,就需要:
- 进入官网,注册个kaggle的用户,所以请点击这里
- 然后选择个比赛,比如如下:
Santander Product Recommendation
屏幕快照 2016-11-14 下午12.50.32.png - 下载数据
点此下载recommendation的数据
屏幕快照 2016-11-14 下午12.52.05.png - 分析数据
...
这里就是你进行各种数据分析,训练,建模,算法研究等的过程,下面会详细讲具体怎么玩.
... -
完成+提交
5.1 完成
完成后将我们的预测数据生成sample_submission.csv里给的格式的数据(感觉是:官方准备了答案模板,你照着涂满就好)。
5.2 提交
提交前,首先要按流程,点击统一他们的规则条款(如下):
屏幕快照 2016-11-14 下午1.00.45.png
然后进入提交页面,提交就可以了.
- 提交后看一下你leaderboard的排名,如果排名太靠后,那就修改模型,调参数,优化算法.
以上,kaggle之旅结束
所以,参加kaggle很简单,看着步骤来就可以了,无非麻烦的是题目是全英文的,如果理解有偏差,可能出现方向偏离的情况,不过一部分场景,他们会把题目验证的算法或者数学公式都会列出来。
真正麻烦的是当你把几十M的数据下载下来的时候,怎么处理才是关键,继续往下走...
机器学习
本人啥也不懂,以下内容就是胡扯。如有错误或不当之处,望指点纠正,多谢多谢.
1. 前言
1.1 从kaggle引入
我们拿到kaggle下载下来的数据会发现分为2类,test数据和train数据. 机器学习其实就是给你一堆train数据,你先用这些数据进行分析,然后用你分析出的结果在test上数据上跑一圈,进行验证或是分析预测。
具体怎么分析,就需要用到机器学习的知识和技能。
1.2 机器学习的简单定义
有个大牛,叫Tom Mitchell,他定义了machine learning就是:E-T-P.
E(experience): 就是之前的经验(相当于train data)
T(task): 就是基于各种算法的训练过程
P(probability): 就是对将来概率的预测
而且这是一个循环,首先基于experience进行算法分析和预测,然后用数据跑task,如果跑出来的结果和预期probability相符,则会继续提升自身的experience,然后继续...
"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E."
2. 机器学习包含哪些东西
2.1 监督学习和无监督学习
大的来说,就是监督学习(Supervised Learning)和无监督学习(UnSupervised Learning)
这个很简单了,就是好比给你一套试题让你去做,然后同时再给你一套历年真题,但是一个人给你的真题带了参考答案(Supervised Learning),一个不带参考答案(UnSupervised Learning)。
监督学习比较简单,谁都懂,我就不详说了.
无监督学习,对于初学者,可能有些场景,会和监督学习有些混淆,所以稍微举几个例子:
- 比如天体星空的分析
- 一个大party中的声音分析
- 某个东西的分类(市场的分类,邮件的分类,网站的分类-google搜索)都属于 '无监督学习'
- 给个东西(比如任意的一个网页),自动的去判断属性(比如技术类/文艺类/限制类), 也属于 '无监督学习'
我自己在学习的过程中,发现有些场景,的确,如果背景交代不清晰的话,很可能判断错误将无监督学习认为是监督学习。所以专门把无监督的举例说明了下。
另外,机器学习还有半监督学习和增强学习,也不有着不同的应用和研究,这里就暂不细说啦。
2.2 监督学习(回归和分类)
监督学习的解决方案分为:回归和分类
回归就是输出是连续值(或者你理解成是随机值,需要我们去预测)
分类就是输出是离散值(基本常见的就是非A即B,非B即C...非Y即Z)
2.2.1 回归
大家张口闭口的“线性回归”是啥意思,其实意思就是,把坐标轴上的点连成线,然后调整一下,凑成一条差不多的直线(y=ax+b),然后用这条直线表示对这些点,这就是线性回归。
(是不是有人会顺然想到:曲线回归、折线回归、水平线回归、马甲线回归、人鱼线回归...哈哈,送你们一句话:'这么想,节奏就对了啊'...)
2.2.1.1 单参数线性回归(一元线性回归)
2.2.1.1.1 引入
小时候学解方程都是都'一元一次方程'学起来的,线性回归,自然也先从最简单的一元线性回归(单参数线性回归)讲起来.
先准备个基础知识:
给你个抛物线(开口向上的那种,a>0),如何就最小值?
...
这个很简单,大家都会:求导,斜率为0的点就是最小值。
2.2.1.1.2 梯度下降法
接上,同样的道理,如果这不是个抛物线,我们扩展到三维空间,作为曲面,如何求最小值?
...
哈哈,答案其实是一样的,还是求导,找出斜率为0的值,但具体的操作比较复杂,这里也不叫求导,叫求偏导,斜率也不是一口气可以算出来的,我们的先人总结了个好方法叫“梯度下降法”(随便找个点,然后像坐滑梯一样,逐个试值,知道试出来最小的点)
梯度下降法
懂得人,你们跳过这个环节就可以了。不懂得人,你们就记住一个公式:
x := x - af'(x)
//:= 表示复制, a是系数(江湖上称之为‘步长’), f'(x) 表示f(x)求导
知道这个公式之后,我们就可以求最小值了。其实过程很简单,就是,我们取个初始值,比如x = 5,然后一路求下去,直到f(x) 不再改变(别想太多,就是大概其,比如改变量小于0.00000...1什么的),算出来的就是最小值。当然这样的取值不能保证是最优值,所以常见的算法是会多取几个随机值,各自进行梯度算法,最后所有的值里面求最优解。
2.2.1.1.3 理论公式
以上这个是讲的最基本的原理,
真正要学习单参数线性回归看如下2个公式:
Gradient'descent'algorithm'
这2个公式是什么鬼?
a> 左边的就是刚才所讲的梯度算法中求解用的公式
-
其中α称作学习率(Learning Rate):
α过小,收敛太慢,我们做起来效率低;
α过大,可能出现找不到最小值的情况(有道是:"步子太大,容易xxx") - 初始点不同,每次找到的结果可能不一样,所以这样的结果称之为局部最低点,我们的目标是寻找全局最低点。所以通过尝试不同的初始值在交叉寻找,最终从结果中力求找到全局最低点。
b> 右边的是单参数线性回归的模型
- 第一个h(x)=... 是假设函数
- 第二个J(θ0,θ1)=... 是代价函数
- h(x)是理论值,y是实际测试值,正是因为理论值与实际值有出入,才需要我们去寻找最优解。如果h(x)和y永远相等,上图的曲面就是个平面---没有最低点(或者说:全世界都是最低点)---J(θ0,θ1)恒等于0 .
2.2.1.1.4 开始做题
现在我们重新用数学的角度来明确我们的问题需求:
cost function intuituion
从应用的角度来看这个东西就是:
给你一坨数据,让你给出他们的线性方程
从数学角度翻译过来就是:
就是已知x,y的生产数据值,求 θ0和θ1使得J(θ0,θ1)最小.
怎么解?
原始数据类似如下这样(数据来源:coursera的machine learning课程习题,上过课的都做过)
让我们分析x和y的关系,基于之前的理论,我们假设
// θ0:回归常数; θ1:回归系数
h(θ) = θ0 + θ1x
现在要求出θ0和θ1,怎么求出来?
如下几个办法:
- 把这些数据在坐标轴上画出来,然后看着画一条直线,然后量出来
θ0和θ1,然后交卷。 - 根据公式写代码,根据下面这个公式,写出求θ的算法,分别求出θ0和θ1
备注:这两个公式是根据代价函数推倒出来的,推导过程点这里
屏幕快照 2016-11-15 下午3.50.13.png - 徒手算
这个也是最实用的方法了。解线性方程的最简单方法是最小二乘法(这是啥&&为啥用它),公式如下:
(对应b就是θ1, a就是θ0)
屏幕快照 2016-11-15 下午3.52.04.png
用这个公式代入就可以了(建议大家自己多操练几遍,会加深印象和对公式的理解,当然对于徒手能力一般的童鞋可以偷个懒)
想深入了解这块的童鞋,可以看这个
浙大美女的详解笔记:单参数线性回归 Linear Regression with one variable
2.2.1.2 多参数线性回归(多元线性回归)
回顾:
里面的原理懂了,一维换到多维只是数据多了个n或者多了个“点点点”的感觉(类似:1,2,... , n),反正从小到大的数学只是大抵如此。
还记得我们一元的公式吧:
cost function intuituion
正文:
假设已经经过了一系列的推导和一系列"引导式教学"之后,我们现在直奔主题,看一下多参数线性回归公式.
-
预测函数:
-
代价函数:
-
我们最终要求的θ怎么求呢?
扩展:
这里面的很多计算,实际中需要用到矩阵的知识进行运算,所以每个公式都对应有矩阵的表达式和计算过程:
-
关于θ:
-
关于J(θ):
这里有详细的推导过程,建议大家点进去看一下. 我只会写一写关键节点或者重要公式,作为一个记录(方便以后回炉时能快速找到),真正如何一步步走到这里来的,还是需要去看公开课或者自己手动去推算一下,否则后续的路会寸步难行啊...
</br>
一个iOS开发者的业余生活:machine learning之旅
by polen