机器学习(Coursera)(三、逻辑回归)
标签(空格分隔): 机器学习 逻辑回归
逻辑回归
分类问题
例如肿瘤诊断,电子邮件分类,是否存在欺诈等问题中,应用的是分类的特性。尝试预测某一个样本应该分在哪一类里。
将因变量分为正向类1(positive)和负向类0(negative),则因变量
y∈{0,1}
y
∈
{
0
,
1
}
因此肿瘤二分类可以用
y=0 or 1
y
=
0
o
r
1
表示良性和恶性。
分类问题不能用线性回归,因为线性回归存在当x输入较大y也就很大的问题。并且如图如果有一个样本点在很右侧,那么线性回归就会收到很大的影响,导致误差很大。
这时候就需要一个类似阶梯函数的假设函数来进行分类,也就是逻辑回归。适用于标签y为离散点的情况。
假说表示
分类中只需要输出0/1,不需要预测连续的值,所以:
引入一个新的模型
hθ(x)=g(θTX)
h
θ
(
x
)
=
g
(
θ
T
X
)
,其中
X
X
表示特征向量,表示逻辑函数(logistic function)通常用sigmoid函数
g(z)=11+e−z
g
(
z
)
=
1
1
+
e
−
z
。
hθ(x)
h
θ
(
x
)
的作用是对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity),即
hθ(x)=P(y=1|x;θ)
h
θ
(
x
)
=
P
(
y
=
1
|
x
;
θ
)
。
给定样本X,计算
hθ(x)
h
θ
(
x
)
对应为上述的概率。
判定边界
决策边界(decision boundary)。
决策边界,就是我们学习后得到的分类的一条边界线或这超平面。使这个超平面可以通过我们的样本特征进行划线分类。
代价函数cost function
逻辑回归的代价函数和线性回归的代价函数不相同。如果按照线性回归的代价函数那么会导致costfunction非凸。所以要重新定义。
J(θ)=−1m∑mi=1[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))] J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ]
这样构建的特点:当实际y=1时且 hθ(x) h θ ( x ) 也为1时,误差为0,当 hθ(x) h θ ( x ) 为0时误差很大代价很大。当y=0时类似。
也就是在不同的实际分类下,选取不同的函数,但是写为同一个函数。
有了代价函数后,就可以用梯度下降法求是代价函数最小的参数了。同样也是对参数
θ
θ
求偏导。
推导过程:
得到的结果,与线性回归很相似。但是由于假设函数h不同导致推到过程完全不同,意义也不同。
多分类
分为一对多进行。在分某一类时,把其他多个类看为一类,这样就简化成了多个二分类,得到了多个假设函数 h(i)θ(x)=p(y=i|x,θ) h θ ( i ) ( x ) = p ( y = i | x , θ ) 。当使用分类时,需要对多个假设函数分别计算对应概率,然后取概率最高的那个分类。
正则化
过拟合问题
什么是过拟合(overfit)和欠拟合(underfit)?
如果我们有很多的特征,我们通过学习可以对训练样本有很好的拟合,但是可能不会推广到新的数据。
欠拟合:不能很好的适应我们的训练集。
过拟合:过分强调描述训练集的特征,而丢失了算法的本质,不能预测新数据。
在多项式中x次数越高,对训练集拟合的越好,但相应的预测能力可能就变差了。
正则化函数
预测假设函数(模型):
hθ(x)=θ0+θ1x1+θ2x2+θ3x23+θ4x24
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
2
+
θ
4
x
4
2
这个模型中,高次项的存在可能导致了过拟合,所以如果能让高次项的系数近似等于0的话,就会减少过拟合,得到好的拟合效果。
修改代价函数,对
θ3,θ4
θ
3
,
θ
4
做一些惩罚,使之对代价函数的影响减少。
J(θ)=12m[∑mi=1(hθ(x(i))−y(i))+λ∑ni=1θ2j]
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
+
λ
∑
i
=
1
n
θ
j
2
]
其中
λ
λ
被称为正则化参数(Regularization Parameter)。按惯例不对
θ0
θ
0
惩罚。这里是对n个参量进行惩罚,对应的是n个特征。
那为什么增加一项
λ
λ
可以使
θ
θ
减小?
因为如果零
λ
λ
很大的话,为了使costfunction尽可能小,那么所有的
θ
θ
都会在一定程度上减小。
但若
λ
λ
太大,则所有值都趋近于0,只能得到一条直线。
正则化线性回归
- 梯度下降:增加了正则项,但是对于
θ0
θ
0
不惩罚所以对j=0单独处理。
- 正规方程:同样可以用之前的推导公式进行推导。
正则化逻辑回归
模型:
加入正则项后代价函数:
J(θ)=1m∑mi=1[−y(i)log(hθ(x))−(1−y(i))log(1−hθ(x(i)))]+λ2m∑nj=1θ2j
J
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
l
o
g
(
h
θ
(
x
)
)
−
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
import numpy as np
def costReg(theta, X, y, learningRate):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X*theta)
second = np.multiply(1-y, np.log(1-sigmoid(X*theta.T)))
reg = (learningRate/2*len(X))*np.sum(np.power(theta[:, 1:theta.shape[1], 2]))
return np.sum(first, second)/(len(X)) + reg