分类与回归
在监督机器学习问题中主要有两种,分别为分类(classification)和回归(regression)。
分类
分类问题的目标是预测类别标签,这标签来自预定于的可选列表。
分类问题可分为二分类(在两个类别之间进行区分的一种特殊情况),和多分类(在两个以上的类别之间进行区分)。对于二分类问题,我们可以举例为,判断一封电子邮件是否是垃圾邮件,其结果只有两种,是和不是。对于多分类问题,我们现有一个可选列表,其中有“老虎,兔子,猫,狗”四种动物,通过某种算法对输入的数据进行预测判断,判断其是哪种动物,由于这里动物的选项有四种,所以该问题又是一个四分类问题,又或者如下图所示的垃圾分类问题
分类问题主要是通过输入的数据,并且每个输入的数据都带有一个固定的标签,所有数据的标签构成一个可选列表,当有新的未知标签的数据输入时,算法根据之前的分类特征来对当前的数据进行判断,判断其是属于哪一类。
分类任务以分类的正确成都作为分类器的主要性能,其最简单的性能是准确率,计算公式如下:
准
确
率
=
正
确
预
测
的
数
据
预
测
的
所
有
数
据
准确率 = \frac{正确预测的数据}{预测的所有数据}
准确率=预测的所有数据正确预测的数据
对于有偏好的数据,其使用精度来表示输出结果为正确解的程度,以垃圾邮件为例,精度是在预测为垃圾的邮件中,确实为垃圾邮件的比例,如果有80条邮件被预测为垃圾邮件,而真正预测对的垃圾邮件只有55条的话,精度为:
精
度
=
55
88
=
0.6875
精度=\frac{55}{88}=0.6875
精度=8855=0.6875
回归
回归任务的目的是预测一个连续的值,其将输入变量映射到连续输出变量的映射函数上。
一个简单的例子就是,根据教育水平、年龄和居住地来预测一个人的年收入。
回归问题其通过给定的输入,得到一个目标值的计算公式,该公式被称为回归方程,通过算法对回归方程中的回归系数进行计算,有了这些回归系数,再给定输入,便可以得到预测值,我们可以直接想想一根直线,其可以一直达到无穷远处,所以我们只要知道了它的斜率和截距,我们便可以知道这条直线上的所有的点。
回归的评价主要采用均方根误差(RMSE),其数学公式如下:
R
M
S
E
=
∑
i
(
预
测
值
i
−
实
际
值
i
)
2
N
RMSE = \sqrt{\frac{\sum_{i}({预测值_{i}-实际值_{i}})^{2}}{N}}
RMSE=N∑i(预测值i−实际值i)2
区分分类任务和回归任务
区分分类任务和回归任务有一个简单的方法,就是问一个问题:输出是否具有某种连续性。如果在可能的结果之间具有连续性,那么他就是一个回归问题,反之,则为分类问题。
关于分类问题和回归问题的更多内容可参考https://yq.aliyun.com/articles/282218
泛化、过拟合、欠拟合
在对这三个概念进行解释时,有必要先对训练集和测试集进行说明。在构建模型时,我们不能够将所有的数据都拿来构建,因为我们需要在将模型应用于新的测量数据之前,判断其是否有效,而这些数据从哪里来呢?只有从收集好的数据中取出一部分来评估模型的性能,其称为测试集;而其余的数据,则被用于构建机器学习模型,称为训练集,一般都是按1:3分,scikit-learn
中的train_test_split
可实现这一功能。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data1, data2, random_state = 0) # random_state指定随机数生成器的种子
上面讲了在分类和回归中均有一定的评价标准,在分类问题中称为精度,在回归问题中称为** R 2 R^{2} R2分数**,由于有训练集和测试集之分,其又可分为训练集准确度( R 2 R^{2} R2分数),测试集准确度( R 2 R^{2} R2分数),这时用来评估模型的主要方法。
泛化
一个模型能够对没见过的数据做出准确的预测,则我们可以说它能够从训练集泛化到测试集(或其他)。
过拟合
构建一个对现有信息量来说过于复杂的模型,则称为过拟合。举个例子,有一个数据集拥有十个特征,你把这十个特征全都用来构建一个模型,因此得到的模型在训练集上表现的很好,但是将我们添加新的数据集时,他却不能够准确的判断,那么就存在过拟合。换句话说,就是在你和模型时过分关注训练集的细节,而得到了一个复杂的模型,其不能够泛化到新的数据上。
过拟合得到的模型复杂,其在训练集上的精度(分数)较高,而在测试集上的精度(分数)较低,因此其泛化性能较差。当训练集分数和测试集分数差距过大时,则是过拟合的明显标志。
欠拟合
所谓欠拟合就是构建的模型过于简单,没有抓取数据的全部内容以及数据中的变化。还是上面有十个特征的例子,在这里你可能只使用了一个特征来构建模型,因此我们得到的模型在训练集上表现的就很差,但是,由于模型简单,因此其可以泛化到新的数据上。
欠拟合得到的模型简单,其在训练集上的精度(分数)较低,在测试集上的精度(分数)较低,因此其泛化性能也较差。当训练集分数和测试集分数相近时,则是欠拟合的明显标志
对于过拟合和欠拟和我们可以用下图来进行说明,下图中训练题看作训练集,过学习看作过拟合,以此类推
当然,在过拟合和欠拟合之间存在一个最佳位置,可以得到最好的泛化性能,而这便是我们想要的模型,如下图所示