来源:原始 Jupyter Notebook。内容已转换为网页阅读格式;下载原文件

我们前面学习了线性回归,可以知道,线性回归是通过对一类呈线性分布的数据进行拟合,然后训练一个线性模型对数据进行预测。在回归问题中,这些数据是连续值,但如果我们处理的数据是离散的,那么就是分类问题,线性回归将不再适用。

和线性回归一样,我们从一个最简单的例子开始探索分类问题。假设我们有下面一组数据,表示某个班级中所有学生某一次考试的成绩以及通过情况,但是我们不知道这次考试老师定的及格线是多少。

考试成绩是否通过
80通过
85通过
74未通过
63未通过
90通过
70未通过

现在假如张三的考试成绩是 82,那么能推测出张三有没有通过考试吗?又或者李四考试成绩是 76,他有没有通过考试?

很显然,输入变量只有一个,所以这可以称为一元分类问题,而输出只有两种情况,通过和未通过,所以也可以称为二分类问题。我们把通过记作 1,未通过记作 0,在坐标系中画出相应的散点图。

import numpy as np
import matplotlib.pyplot as plt

plt.xlim(50, 100)
plt.ylim(-0.5, 1.5)

X = np.array([[80,1],[85,1],[74,0],[63,0],[90,1],[70,0]])
plt.scatter(X[:,0], X[:,1])

plt.show()

运行结果

Notebook 运行结果

直观上去看,上面有一个人考了 80 分通过了,那么张三考 82 分肯定也通过了,而另外有一个人考 74 分没过,那么李四考 76 分就很悬,到底通过没有,估计要看他运气了。回到我们的问题,如何让机器来预测他们是否通过呢?这个散点明显不是一条直线,如果用线性回归肯定得不到满意的结果,实际上,我们希望找到下面这样的一个函数:

y={1,xk0,x<k y = \begin{cases} 1,\quad x \geq k \\ 0,\quad x < k \end{cases}

当分数大于某个值时,考试通过,当分数低于某个值时,考试未通过。分类问题的关键就是确定这个中间值,这个中间值被称为决策边界(decision boundary),一元分类问题的决策边界就是一个点。

实际上,上面这个函数又叫做单位阶跃函数(unit step function),它是数学、物理以及信号处理等其他学科中的一个重要函数。它最初由英国的物理学家奥利弗·亥维赛(Oliver Heaviside)提出,所以又叫 Heaviside 函数