吴恩达机器学习--学习笔记

1. Introduction

1.1 Welcome

如今机器学习被大规模应用于:

  • 数据挖掘(网站点击,医学记录,生物学,工程)
  • 一些无法通过编程实现的功能(自动驾驶,手写识别,NLP,CV)
  • self-customizing programs(各种网站的推荐系统)
  • 辅助理解人脑

这是一个快速发展的领域,我看好

1.2 What is machine learning

常用的机器学习包括监督学习算法和无监督学习算法。
此外还有增强学习和推荐系统。

1.3 Supervised Learning

监督学习的样本是带有标签的(即我们知道预测所对应的真实值是多少)。

1.4 Unsupervised Learning

无监督学习的样本是没有标签的(即我们不知道真实值)。

2. Linear Regression with one variable

2.1 Model Representation

h = theta`x

2.2 Cost Function

线性回归的J采用了平方误差公式(squared error function)

2.3 Cost Function - Introduce I

代价函数J衡量了训练样本的预测值与真实值之间的整体误差。当拟合的越差的时候,J越大,也就是代价越高。那么通过找到令J最小的theta,也就找到了对训练样本集最好的拟合。

2.4 Cost Function - Introduce II

2.5 Gradient Descent

梯度下降法是一种用来找到J最小值的常用方法。其实它的思路非常简单,我们不断迭代,每次迭代令J向减小最快的方向(即梯度方向)移动,直到找到一个最小值(这个值可能是局部最小值)。

在梯度下降法的初始位置不同时,最后可能获得不同的最小值。

在实现梯度下降法时,应该同时更新每个theta的分量(否则就不是向着梯度的方向移动)。

2.6 Gradient Descent Intuition

在实现梯度下降法时,选取学习速率alpha是个技术活。alpha太小,则求解太慢。alpha太大,则可能造成发散(当由于alpha过大造成我们超过最小点时,新的位置的梯度如果更大,则会再次越过最小点,并往复下去,造成发散)。

尝试不同的alpha值,并画出相应的学习曲线选择合适的alpha的一种方法。一般采用3倍的方式选择alpha,比如0.3, 0.1, 0.03, 0.01

一个固定的alpha也可以让梯度下降法收敛于最小值,原因是随着位置趋近于最小值,梯度也趋近于0。

2.7 Gradient Descent for Linear Regression

线性回归的J是一个bowl shaped图形(弓形),更正式的名字是convex function(凸函数)。这种形状只有一个全局最优解,没有局部最优解。所以通过梯度下降法我们总是可以收敛到全局最优解。

到此位置我们所使用的Gradient Descent其实有一个更准确的名字–Batch Gradient Descent(批量梯度下降)。批量的意思是,每次迭代,我们都考虑所有样本的影响。

2.8 What`s next

接下来会复习下线性代数,因为线性代数非常适合处理机器学习中的大量参数问题。

3. Linear Algebra Review

3.1 Matrices and Vectors

3.2 Addition and Scalar Multiplication

3.3 Matrix Vector Multiplication

3.4 Matrix Matrix Multiplication

3.5 Matrix Multiplication Properties

A * B not eq B * A
A * B * C = A * (B * C)
A * I = I * A = A

3.6 Inverse and Transpose

只有方阵才可能有逆矩阵(换句话来说,有逆矩阵的矩阵一定是一个方阵)。

没有逆矩阵的矩阵叫做奇异矩阵或者退化矩阵

4. Linear regression with multiple variables

4.1 Multiple features

4.2 Gradient Descent for Multiple Variables

4.3 Gradient descent in practice I: Feature Scaling

在应用梯度下降法时,我们需要先观察下各个特征的取值范围。如果各个特征的取值范围差距很大,会造成梯度下降法收敛很慢。这时候就需要对特征作缩放。

特征缩放的目的是将各个特征的取值范围映射到[-1,1]。不过也不是非得在这个区间合理。按照吴恩大的经验,[3,3]和[-1/3,1/3]这样的区间都是合理的。

特征缩放常采用如下方式映射:
x = x / x_max
这样就映射到了[-1,1]

其实更常规的方式是均值归一化(mean normalization)
x = (x - mu) / theta
这样就映射到[-0.5, 0.5]

4.4 Gradient descent in practice II: Learning Rate

选择一个合适的的学习速率是个技术活,一般按照X3的规律来选,例如:0.001,0.003,0.01,0.03,0.1 …

太小的alpha会导致收敛太慢
太大的alpha则有可能导致完全不收敛

那么如何来确认当前算法通过迭代有收敛呢?即如何来debug呢?

那就是画学习曲线。通过观察学习曲线我们可以确定算法在迭代后是否有收敛。同时也可以用来选择一个合适的学习速率。

当然也不是没有自动确认是否收敛的方法。那就是通过check每次J的变化量。如果变化量已经小于一个很小的值(比如1e-3),则认定当前算法已经收敛。但这个最小值的选择就有点困难了。

4.5 Features and Polynomial Regression

当处理多特征的回归时,我们面临一个问题----特征选择,即采用哪些特征,我们甚至可以由原特征创造新的特征来进行回归。
多项式回归就是源于这种思想。通过将各种特征组合,我们可以创造新的特征,并更好的拟合数据。

4.6 Normal Equation 标准方程法

在求解线性回归的参数时,除了梯度下降法,标准方程法是另外一种选择。而且相对于梯度下降法,标准方程法还有一些优点,比如

  • 不需要设置alpha
  • 不需要作均值归一化

但是它也有局限。当特征数n比较大时(比如大约1e4),标准方程法的计算会变得很慢(标准方程法的计算量是O(n^3)),而此时就不得不采用梯度下降法。

按照吴恩达的经验,1e4就是这个选择的分解点。

标准方程法的公式如下:
theta = ( X’X)inverse * X’ * y
其中X称作design matrix(即样本设计出来的矩阵)

4.7 Normal equation and non-invertibility

如果X‘X不可逆怎么办呢?

首先这种情况极少发生。
其次假设这种方法发生了,它通常可能是由于存在重复的特征(如倍数关系的特征),对于这种情况删除冗余特征就可以了。另外导致不可逆的原因也可能是因为m < n,即相对于样本数特征数太多了,这时可以删除一些特征或进行正则化处理。

在使用octave时,即使X‘X不可逆,pinv()的计算结果也是正确的。所以不可逆的为难题无需特别关注。

5. Octave Tutorial

5.1 Basic Operations

不等于的符号有点特殊 ~=
XOR 异或
disp 命令可以输出一些复杂的输出,比如
disp(sprintf(‘2 decimals: %0.2f’, a))

控制长短的命令:
format long
format short

矩阵和向量赋值:
;代表在矩阵中换行

1:6 % 1 2 3 4 5 6
1: 0.1 : 6 % 1 1.1 1.2 … 5.9 6

ones(2,3)
1 1 1
1 1 1

2*ones(2,3)
rand(3,3)
randn(1,3) % 高斯分布

hist()
eye(3)
1 0 0
0 1 0
0 0 1

5.2 Moving Data Around

size(A) % 例如1 2,说明A是一个1X2的矩阵
length(A) % 返回A最大维的长度
load .dat
load(’
.dat’)
who % 显示当前工作空间所有变量
whos % 更详细的现实
clear * % 清除特定变量
clear % 清除所有变量
save *.mat v % 将变量v存储为一个mat文件(二进制的)
save hello.txt v - ascii % 存储为一个txt文件
A(3,2)
A(2,:)
A([1,3],: )
A( : ) % 所有元素输出为一个列向量
A = [ A B]
A = [ A ; B]

5.3 Computing on Data

A*B % 矩阵乘法
A.*B % 对应元素乘法
A+1 % 每个元素+1
A‘ % 转置

a= [ 1 15 2 0.5]
max(a) % 15
[val,ind] = max(a)
a<3 % 1 0 1 1
find(a<3) % 1 3 4
magic()

sum() % 求和
prod() % 去累乘

floor() %0.5 --> 0
ceil() % 0.5–> 1

max(A) % 每列最大值
max(A,[],1) % 每列最大值
max(A,[],2) % 每行最大值

max(max(A))
max(A(: ))

sum(A,1) % 每一列的总和
sum(A,2) % 每一行的总和

pinv(A) % 求伪逆

5.4 Plotting Data

plot()
xlabel()
ylabel()
legend()
title()
subplot()
axis()
print -dpng ‘myplot.png’
imagesc(A) % 图像化矩阵
colorbar
colormap gray

5.5 Control Statements

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值