欠拟合与过拟合
假设一种情况,根据x预测y
(a):使用
y=θ0+θ1x1
去匹配数据,并不能很好地拟合。
(b):使用
y=θ0+θ1x1+θ2x2
去匹配数据,比较完美地拟合。
(c):使用
y=∑5j=0θjxj
去匹配数据,过于拟合数据,丧失了预测性。
所以(a)代表了欠拟合(underfitting),(c)代表了过拟合(overfitting),这也说明了在监督学习中特征的选择会对学习算法的性能产生很大的影响。
参数化与非参数化
参数学习算法
Parametric Learning algorithm
始终由固定的参数拟合数据。
如:线性回归(Linear regression)
(to evaluate
h(x)
)
Fit θ to minimize
∑i(y(i)−θTx(i))2
Output
θTx
非参数学习算法
Non-parametric Learning algorithm
参数的数量不是恒定的,有时为了更好地实现假设,会随着训练集合数量的变化而线性变化。
如:局部加权回归(Locally weight regression)
(to evaluate
h(x)
)
Fit θ to minimize
∑iw(i)(y(i)−θTx(i))2
Output
θTx
局部加权回归(Locally weight regression)
公式:
∑iw(i)(y(i)−θTx(i))2
If
|x(i)−x|
很小,
w(i)≈1
If
|x(i)−x|
很大,
w(i)≈0
w(i)
为权重(非负值),
其中参数τ为带宽参数(bandwidth),它控制了权值随距离下降的速率。如果τ很少,那么会形成一个很陡的钟形,下降速率就很快;如果τ很大,那么会形成一个很平缓的钟形,下降速率就很慢。
局部加权回归所选用的 w(i) 与高斯函数没有任何关系,而且局部加权回归在大规模数据中的性能并不优秀,但是也有优化的方法。
线性模型的概率解释(Probabilistic interpretation)
为什么要在回归问题中使用最小二乘法?
首先引入误差(error term)概念,假设:
y(i)=θTx(i)+ε(i)
ε(i)
表示误差项,包含随机因素或未考虑因素。
我们可以假设误差满足概率分布,而且满足对应误差项彼此独立(IID, independently and identically distributed)。所以我们直接设
ε(i)
满足高斯分布(正态分布)。
这里需要注意的是,
p(y(i)|x(i);θ)
表示为在给定参数θ的情况下,x,y的概率分布函数,所以θ并不是随机变量。(The notation “
p(y(i)|x(i);θ)
” indicates that this is the distribution of
y(i)
given
x(i)
and parameterized by θ.)
再引入似然性函数(likelihood function)概念:
L(θ)=L(θ;X,y⃗ )=p(y⃗ |X;θ)
由于误差项满足IID,可以展开写为:
我们需要选择参数θ使得数据出现的可能性尽可能大,即最大化L(θ),这就是极大似然估计(maximum likelihood)。
为了数学计算上的便利,对L(θ)取对数。
由此可见,表达式中包含了最初的最小二乘法代价函数(cost function),我们也可以注意到
σ2
的值不会影响我们的最终结果(因为所求的是θ,只要代价函数最小,就可以确定θ的值)。
Logistic回归(Logistic regression)
首先学习二元分类问题(binary classification),y只有0,1两个取值。对于分类问题使用线性回归是一个十分糟糕的选择,因为直线会由于数据因素而无法将样本正确地分类。
因为
y∈{0,1}
,我们也希望
hθ(x)∈{0,1}
,所以就选择了:
其中g(z)被称作logistic函数或S型函数(logistic function/sigmoid function),图像为:
对g(z)求导可得:
对假设和输出进行概率意义上的解释:
P(y=1|x;θ)=hθ(x) ,
P(y=0|x;θ)=1−hθ(x)
—> p(y|x;θ)=(hθ(x))y(1−hθ(x))1−y
这里使用极大似然估计匹配参数。
我们也可以梯度下降算法来求函数的极值,只不过要将算法中的“-“改为“+“,“下降“改为“上升“,求函数的最大值。
同样先假设一个训练样本,对函数l(θ)求偏导可得:
梯度上升算法的更新原则:
这和上一讲中的最小二乘法更新规则的表达式一样,但是其中 hθ(x) 却不同。最小二乘法中的 hθ(x) 是线性函数,而此表达式中的 hθ(x) 是logistic函数。
感知学习算法(Perceptron learning algorithm)
logistic函数是曲线变化的,我们想要更加明确地将输出分为0,1两类,就要用到阶梯函数/临界函数(threshold function)来代替logistic函数。
可以算得上是一个“简单粗暴“的算法…