吴恩达机器学习笔记

网易云课堂地址:https://study.163.com/course/courseMain.htm?courseId=1004570029

字幕组干的还算不错!


Chapter 1:绪论

支持向量机->支持无限维度的特征

 

无监督学习之鸡尾酒算法?

“鸡尾酒会问题”(cocktailparty problem)是在计算机语音识别领域的一个问题,当前语音识别技术已经可以以较高精度识别一个人所讲的话,但是当说话的人数为两人或者多人时,语音识别率就会极大的降低,这一难题被称为鸡尾酒会问题。

该问题描述的是给定混合信号,如何分离出鸡尾酒会中同时说话的每个人的独立信号。当有N个信号源时,通常假设观察信号也有N个(例如N个麦克风或者录音机)。该假设意味着混合矩阵是个方阵,即J = D,其中D是输入数据的维数,J是系统模型的维数。

 

 

使用Octave学会算法原型,再使用其他编程语言

Octave是一种编程语言,旨在解决线性和非线性的数值计算问题。Octave为GNU项目下的开源软件,早期版本为命令行交互方式,4.0.0版本发布基于QT编写的GUI交互界面。Octave语法与Matlab语法非常接近,可以很容易的将matlab程序移植到Octave。同时与C++,QT等接口较Matlab更加方便。

 


Chapter 2:单变量线性回归

Q:cost function的类型?

1.均方误差(线性模型中最常使用)

J(θ0,θ1)=1/2m∑i=1m(y^(i)−y(i))2=1/2m∑i=1m(hθ(x(i))−y(i))2

 

2.交叉熵 (逻辑回归中最常用,在神经网络中也会用到)

reference https://www.cnblogs.com/Belter/p/6653773.html

补充:各种loss function的比较https://www.jianshu.com/p/ac26866e81bc

 

对于两个参数的cost function,使用高线图(or等高图像)来展示曲面

:= 表示赋值(eg: a := 1)

梯度下降,需要同步更新多个参数

学习速率α太小,梯度下降可能非常慢

学习速率α太大,可能会无法收敛,甚至会发散

如果你的参数已经处于局部最优点,参数将不再自动改变(导数为零)

梯度下降本质上是一个贪心算法,容易陷入局部最优。

 

Q:如何避免掉进局部最优点?(与神经网络结合,有待研究!)

一些解决方案?

Batch Gradient Descent(批梯度下降):全览整个训练集,一次迭代训练所有样本

mini-batch?

https://blog.csdn.net/eric_e/article/details/80371022

 

 

 


 

Chapter 5:多变量线性回归

多元梯度下降法

技巧一:特征缩放,把特征x压缩在[-1,1]之间,从而加速梯度下降,特征之间不要差别太大,

Ng推荐范围:[-3,3]

技巧二:均值归一化(x1=(x1-u1)/s1) u1:average s1:(max-min)

如何判断是否已经达到收敛标准:

1.看cost function的函数图像(横轴:迭代次数)(推荐)

2.设置合适的阈值,当cost function小于该阈值,则认为已经收敛(不推荐)

cost function递增的原因之一:学习速率α过大

多试几个α值,可以3为倍数(大一些的话,可以是10)

 

 

正规方程法(不需要特征缩放)

根据矩阵运算,直接得到所有的Θ

缺点:若n较大(n>1w),计算较慢

若遇到矩阵不可逆,可以删除多余的特征,或者考虑正则化方法

 

 


 

Chapter 7:logistic regression(实际上是分类模型)

不推荐将线性模型用于分类问题

decision boundary(决策边界)可以是很复杂的高阶多项式,如圆形的边界

logistic regression用于寻找决策边界

把cost function设置为凸函数,从而可以避免达到局部最优解

使用统计学中的极大似然法得到cost function?

logistic regression和线性回归不同之处在于假设的函数,前者是sigmoid函数,参数更新是相同的

高级优化算法:Conugate gradient/BFGS/L-BFGS

1.不需要手动选择学习速率α

2.速度比梯度下降算法更快

多类别分类问题:训练出多个分类器,将x输入到每个分类器中,选择最可信的那个结果(概率最大)

 


 

Chapter 8:正则化

解决过拟合的两种办法

1.减少特征的数量

2.正则化(保留所有特征)

核心思想:将参数都尽量弄小一点,使得模型尽可能简单一点,从而尽量避免过拟合

向cost function中加入正则化项(惩罚项),使得每一个参数都尽可能小

任何方法都可能导致过拟合或者欠拟合,需要合适地使用

 


 

Chapter 9:神经网络学习

前向传播,向量化的实现方法

多元分类问题

 


 

Chapter 10:神经网络参数的反向传播算法

 

梯度检测:Check that [ gradApprox nearly= DVec ],手动检测反向传播的导数是否正确

在使用梯度检测确认导数没有问题之后,应当关闭梯度检测再训练,因为其速度很慢

参数初始化:

1.全置为0不可取

2.初始化为随机数[-e,e] e:init_epsilon

 


 

Chapter 11:应用机器学习的建议

随机将数据分为训练集和数据集(三七开)

模型选择问题

更好的分法:训练集6 交叉验证集2 测试集2

交叉验证集用于选择最合适的模型,而测试集则用于测评模型的性能(计算误差)

 

高偏差(bias):  欠拟合,d过小

J(train)很大,J(cv)和J(test)差不多

solution: 1.Try getting additional features

2.Try adding polynomial features ( x1^2,x2^2,x1x2,etc)

3.Try decreasing λ

 

高方差(variance):过拟合,d过大

J(train)很小,J(cv)远大于J(test)

注:J(cv)是一个V字形曲线,我们需要尽可能接近其最低点,从而获得最好的模型

solution: 1.Get more training examples

2.Try smaller set of features

3.Try increasing λ

 

正则参数λ对模型的影响:λ过大,欠拟合;过小,过拟合

如何选择正确的λ? :尝试一系列的λ,以2为倍数

画图( J() - λ )有助于选择模型和判断模型性能

绘制学习曲线:error - m(size of training set):判断模型是否出现了高偏差和高方差

 

如果大型神经网络出现了过拟合现象,通常使用正则化的方式来修改

可以使用交叉测试集来选择隐含层的数量,一般只有一层

 


 

Chapter 12:机器学习系统设计

误差分析:通过仔细研究总是分类错误的一些数据(在交叉数据集上),看看是否可以找到更好的特征,从而改进模型 

先实现一个简单粗暴、效果不一定好的学习算法,再决定下一步做什么

斜偏类:一个类的数据量比另外一个类多很多

查准率和召回率,也可以评估算法性能

拥有高的查准率和召回率的学习算法是一个好算法

查准率和召回率之间的抉择:根据实际需求来确定是追求查准率还是召回率(eg:预测癌症)

如何根据查准率和召回率来选取算法: 1.F1(score) = 2PR/(P+R) (调和平均数)

 

Good Model + sufficient data = Great!

Good Question:人类专家看了x之后,可以预测出y吗?

 

 

 

 

 

 

 

 

你可能感兴趣的:(学习笔记)