机器学习吴恩达视频
第一课
一、监督学习与非监督学习
-监督学习(Supervised learning):input X -> output Y
- 回归(Regression):输出是连续的,有无数种可能结果
- 分类(Classification):输出是离散的,固定结果中的一个
-无监督学习(Unsupervised learning):input X 没有output Y
- 聚类(Clustering):根据特点来划分不同组
- 异常检测(Anomaly detection)
- 降维(Dimensionality reduction):将一个大数据集压缩成一个小数据集,同时丢失尽可能少的信息
二、线性回归(Linear regression)模型
-例子:预测房价
-模型函数:f(x) = wx + b ;w、b称为参数(parameters)
-代价函数(cost Function):
J
(
w
,
b
)
=
1
2
m
∑
i
=
1
m
(
y
^
(
i
)
−
y
(
i
)
)
2
J(w,b)= \frac{1}{2m} \sum_{i=1}^{m} \left ( \hat{y} ^{(i)} -y^{(i)} \right ) ^{2}
J(w,b)=2m1i=1∑m(y^(i)−y(i))2
-目标:找到合适的参数w、b,使得代价函数最小
三、梯度下降(Gradient descent)
-功能:求解一个函数的最小值,不仅仅可应用于线性回归模型
-实现:
{
w
=
w
−
α
∂
∂
w
J
(
w
,
b
)
b
=
b
−
α
∂
∂
b
J
(
w
,
b
)
\begin{cases}w = w - \alpha \frac{\partial }{\partial w} J(w,b) \\b = b - \alpha \frac{\partial }{\partial b} J(w,b) \end{cases}
{w=w−α∂w∂J(w,b)b=b−α∂b∂J(w,b)
-学习率:α ,范围在0-1之间
学习率太小时,速度会很慢;学习率太大时,可能会发生过冲,无法求得最小值。
-梯度下降求解线性回归(Gradient Descent for Linear Regression):
{
w
=
w
−
α
m
∑
i
=
1
m
(
f
w
,
b
(
x
(
i
)
)
−
y
(
i
)
)
x
(
i
)
b
=
b
−
α
m
∑
i
=
1
m
(
f
w
,
b
(
x
(
i
)
)
−
y
(
i
)
)
\begin{cases}w = w - \frac{\alpha }{m} \sum_{i=1 }^{m}(f_{w,b}(x^{(i)} ) -y^{(i)} ) x^{(i)} \\b = b - \frac{\alpha }{m} \sum_{i=1 }^{m}(f_{w,b}(x^{(i)} ) -y^{(i)} ) \end{cases}
{w=w−mα∑i=1m(fw,b(x(i))−y(i))x(i)b=b−mα∑i=1m(fw,b(x(i))−y(i))
四、多元线性回归(Multiple linear regression)
-模型函数:
f
w
⃗
,
b
(
x
⃗
)
=
w
⃗
⋅
x
⃗
+
b
=
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
.
.
.
+
w
n
x
n
+
b
f_{\vec{w},b }(\vec{x}) =\vec{w}\cdot \vec{x} + b = w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+...+w_{n}x_{n}+ b
fw,b(x)=w⋅x+b=w1x1+w2x2+w3x3+...+wnxn+b
-向量化(Vectorization):
import numpy as np
w = np.array([2,3,4])
x = np.array([10,20,30])
b = 4
#使用向量点积快速计算
f = np.dot(w,x)+b
-梯度下降求解多元线性回归(Gradient Descent for Multiple Linear Regression):
{
w
j
=
w
j
−
α
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
,
j
∈
[
1
,
n
]
b
=
b
−
α
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
\begin{cases}w_{j} = w_{j} - \frac{\alpha }{m} \sum_{i=1 }^{m}(f_{\vec{w} ,b}(\vec{x}^{(i)} ) -y^{(i)} ) x_{j}^{(i)},j\in [1,n] \\b = b - \frac{\alpha }{m} \sum_{i=1 }^{m}(f_{\vec{w},b}(\vec{x}^{(i)} ) -y^{(i)} ) \end{cases}
{wj=wj−mα∑i=1m(fw,b(x(i))−y(i))xj(i),j∈[1,n]b=b−mα∑i=1m(fw,b(x(i))−y(i))
-正规方程(Normal equation):
- 只能用于线性回归
- 无须迭代即可求解w、b
- 不能泛化到其他学习算法
- 当特征数量大时(>10000),计算缓慢
- 如果使用机器学习库调用线性回归时,后端可能会用该方法计算w、b
- 大多数情况下,梯度下降更好
五、特征缩放(Feature Scaling)
-缩放方法:
直接缩放:直接除以最大值
均值归一化(Mean normalization):x = (x - μ)/ (xmax - xmin),μ为均值
Z归一化(Z-score normalization):x = (x - μ)/ δ ,δ为标准差
-如何设置学习率:
对于不同的学习率,做少数次迭代运行梯度下降,并将成本函数J绘制为迭代次数的函数,在尝试多个值后,选择更加快速降低成本函数值的学习率。
方法:先设置学习率为0.001,每次增加三倍。
0.001 -> 0.003 -> 0.01 -> 0.03 -> 0.1 -> 0.3 -> 1 ->…
-特征方程(Feature engineering):
创建新特征,通常转换或者组合原始特征来使学习算法更容易做出准确的预测。
-多项式回归(Polynomial regression):
模型函数中,通过修改x的次幂,从而得到更好的数据模型。
六、逻辑回归(Logistic Regression)
-逻辑函数(logistic function):
g
(
z
)
=
1
1
+
e
−
z
,
0
<
g
(
z
)
<
1
g(z) = \frac{1}{1+e^{-z} } , 0<g(z)<1
g(z)=1+e−z1,0<g(z)<1
-逻辑回归模型函数:
f
w
⃗
,
b
(
x
⃗
)
=
1
1
+
e
−
(
w
⃗
⋅
x
⃗
+
b
)
f_{\vec{w} ,b}(\vec{x} ) = \frac{1}{1+e^{-(\vec{w} \cdot \vec{x} + b)} }
fw,b(x)=1+e−(w⋅x+b)1
-决策边界(Decision Boundary):
z
=
w
⃗
⋅
x
⃗
+
b
=
0
z = \vec{w} \cdot \vec{x} + b = 0
z=w⋅x+b=0
-逻辑回归中的代价函数(Cost Function for Logistic Regression):
J
(
w
⃗
,
b
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
l
o
g
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
]
J(\vec{w} ,b)=-\frac{1}{m} \sum_{i=1}^{m} [y^{(i)}log(f_{\vec{w} ,b} (\vec{x} ^{(i)} )) +(1-y^{(i)})log(1-f_{\vec{w} ,b} (\vec{x} ^{(i)} ))]
J(w,b)=−m1i=1∑m[y(i)log(fw,b(x(i)))+(1−y(i))log(1−fw,b(x(i)))]
-实现梯度下降(Gradient Descent Implementation):
{
w
j
=
w
j
−
α
[
1
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
]
,
j
∈
[
1
,
n
]
b
=
b
−
α
[
1
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
]
\begin{cases}w_{j} = w_{j} - \alpha[\frac{1 }{m} \sum_{i=1 }^{m}(f_{\vec{w} ,b}(\vec{x}^{(i)} ) -y^{(i)} ) x_{j}^{(i)}],j\in [1,n] \\b = b - \alpha [\frac{1}{m} \sum_{i=1 }^{m}(f_{\vec{w},b}(\vec{x}^{(i)} ) -y^{(i)} )] \end{cases}
{wj=wj−α[m1∑i=1m(fw,b(x(i))−y(i))xj(i)],j∈[1,n]b=b−α[m1∑i=1m(fw,b(x(i))−y(i))]
七、过拟合(The Problem of Overfitting)
-如何理解:
过拟合:火候太大了,高方差(high variance)
欠拟合:火候不够,高偏差(high bias)
-解决过拟合(Addressing Overfitting):
1.增大数据集
2.进行特征选择
3.使用正则化减小参数大小:可以保留所有特征,只防止特征产生过大的影响
-正则化:
J
(
w
⃗
,
b
)
=
1
2
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
2
+
λ
2
m
∑
i
=
1
m
w
j
2
J(\vec{w} ,b)= \frac{1}{2m} \sum_{i=1}^{m} \left ( f_{\vec{w} ,b} (\vec{x} ^{(i)} ) -y^{(i)} \right ) ^{2} +\frac{\lambda }{2m} \sum_{i=1}^{m}w_{j}^{2}
J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2+2mλi=1∑mwj2
λ值既不能太大,也不能太小。
-用于线性回归的正则方法(Regularized Linear Regression):
-用于逻辑回归的正则方法(Regularized Logistic Regression):
{
w
j
=
w
j
−
α
m
∑
i
=
1
m
[
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
]
−
a
λ
m
w
j
,
j
∈
[
1
,
n
]
b
=
b
−
α
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
\begin{cases}w_{j} = w_{j} - \frac{\alpha }{m} \sum_{i=1 }^{m}[(f_{\vec{w} ,b}(\vec{x}^{(i)} ) -y^{(i)} ) x_{j}^{(i)}]- \frac{a\lambda }{m}w_{j} ,j\in [1,n] \\b = b - \frac{\alpha }{m} \sum_{i=1 }^{m}(f_{\vec{w},b}(\vec{x}^{(i)} ) -y^{(i)} ) \end{cases}
{wj=wj−mα∑i=1m[(fw,b(x(i))−y(i))xj(i)]−maλwj,j∈[1,n]b=b−mα∑i=1m(fw,b(x(i))−y(i))