[吴恩达机器学习]4·逻辑回归之二分类

吴恩达机器学习系列课程:https://www.bilibili.com/video/BV164411b7dx

二分类问题与逻辑回归的引入

给定数据集: 其中 是一个 维向量 ,且 ,也即是对于输入 ,我们将其分类为 两类。试用一模型拟合该分类结果。


鉴于 取值的离散性,线性回归在这里不好使了,我们引入逻辑回归的概念。

回忆线性回归的假设函数:,我们在其外套上 函数,构造逻辑回归的假设函数为:

函数: 是一个介于 之间的单增 形函数。

也就是说,对于一个参数为 的逻辑回归模型,输入 ,得到 的预测。我们可以把这个值视为 这组数据对应的 等于 的概率,如果它 ,则分类为 ,否则分类为 .

又根据 函数的性质,. 所以只要 ,就分类为 ,否则分类为 ;于是乎, 这条线(超平面)被称作决策边界,它将整个空间划分成两块,各自属于一个分类。

代价函数

现在,我们的任务就是从数据集中求解逻辑回归的参数 . 仍然采用代价函数的思想——找到使代价最小的参数即可。

广义上来讲,代价函数是这样的一个函数: 也就是说用每个数据的估计值 和真实值 计算一个代价 ,比如线性回归中这个代价就是二者差值的平方。


具体到逻辑回归里,这个代价定义为:

上式的来源:

前文已经提到,,于是 ,故: 考虑极大似然法,在数据集 下,似然函数为: 取对数得到: 注意到,极大似然法的目标是找到 的极大值,而逻辑回归的目标是找到 的极小值,所以自然的,我们直接使用 来定义 这个 对极大值/极小值没有影响,仅是取一下平均罢了。

换句话说,逻辑回归的本质是拟合 取值的概率,并以极大似然法解之。

梯度下降解逻辑回归

我们对逻辑回归定义的代价函数是非常好的:它是一个凸函数。这有助于我们进行梯度下降求解。

为了求偏导,我们先计算: 于是乎, 没错,这个偏导的形式和线性回归的偏导形式完全相同!不同的只是 的定义——逻辑回归的假设函数在线性回归的假设函数外套了一层 函数,也正是这一层 函数,让我们不能像线性回归那样直接给出解析解,而必须使用梯度下降等方法。

现在我们对其使用梯度下降即可。

实现

首先看一下数据的散点图:

python 实现逻辑回归如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import numpy as np
import matplotlib.pyplot as plt
import math

alpha = 0.01
iteration = 10000
Z = []

def Normalization(data):
return (data - data.mean(axis = 0)) / data.std(axis = 0, ddof = 1)

def h(T, x):
return 1 / (1 + np.e ** (-np.matmul(T.T, x)[0][0]))

def J(T, X, Y):
res = 0
for i in range(m):
res -= Y[i] * math.log(h(T, X[i:i+1, :].T)) + \
(1 - Y[i]) * math.log(1 - h(T, X[i:i+1, :].T))
res /= m
return res

def partJ(T, X, Y):
res = np.zeros((n, 1))
for i in range(m):
res += (h(T, X[i:i+1, :].T) - Y[i]) * X[i:i+1, :].T
res /= m
return res

def GradientDescent(X, Y):
T = np.zeros((n, 1))
for t in range(iteration):
T = T - alpha * partJ(T, X, Y)
Z.append(J(T, X, Y))
return T

data = np.genfromtxt("ex2data1.txt", delimiter = ',')
(m, n) = data.shape
data[:, :-1] = Normalization(data[:, :-1])
X = np.column_stack((np.ones((m, 1)), data[:, :-1]))
Y = data[:, -1]
T = GradientDescent(X, Y)
print(T)
print(J(T, X, Y))

p1 = plt.subplot(111)
p1.plot(range(1, iteration+1), Z)
p1.set_xlabel("Iteration")
p1.set_ylabel("Cost")
plt.show()
PYTHON

在学习率为 下迭代了 次,结果为:,此时 . 决策边界的图像为:

随迭代次数收敛情况如下:


[吴恩达机器学习]4·逻辑回归之二分类
https://xyfjason.github.io/blog-main/2020/12/22/吴恩达机器学习-4·逻辑回归之二分类/
作者
xyfJASON
发布于
2020年12月22日
许可协议