模型评估与验证

数据建模

数据类型

  • 数值类型:离散,连续

  • 分类数据:电影打分等

  • 时间序列数据:多年来平均每个运动员打出的全垒打次数,与数值类型相比,时间序列数据能说明时间顺序

  • 文本


许多算法都要求数据输入是数值型的。对于类别类数据,这通常意味着把类别转换成数字数据并保留同样的信息。

一种标准的做法是 one-hot encoding 独热编码在 scikit-learn 里面有内建方法。

本质上来说,一个有三个可能值的分类特征被转换成了对应这三个值的二分类特征。新特征当中对应这个数据的值标为1,其他特征标为0。

例如,一个篮球运动员的数据集。一个特征叫做“熟练手”,它的值可以是“左“或“右”。例如:

  • Joe
    • 熟练手: 右
  • Jim
    • 熟练手: 左

被转化为:

  • Joe
    • 熟练手/右: 1
    • 熟练手/左: 0
  • Jim
    • 熟练手/右: 0
    • 熟练手/左: 1

对于有序数据,赋值成整数是比较合理的选择,例如:

  • Joe
    • 技能: 低
  • Jim
    • 技能: 中
  • Jane
    • 技能: 高

变为:

  • Joe
    • 技能: 0
  • Jim
    • 技能: 1
  • Jane
    • 技能: 2

这并不是所有特征转换的方法。这篇文章 描述了七种可能的类别类数据转换方法。

总的来说这些简单的方法足够了。如果需要用其它转换方法,也是由数据的特性决定的。

这个帖子也能帮助你更好的理解接下来的练习要你做什么也能帮助你更好的理解接下来的练习要你做什么?)


数据集与问题


评估与验证

cross_validation(交叉验证):有时亦称循环估计,是一种统计学上将数据样本切割成较小自己的实用方式.于是可以先在一个子集上做分析,而其他子集则用来做后续对此分析的确认及验证.一开始的子集被称为训练集.而其他子集则被称为验证集或测试集.交叉验证是一种评估统计分析,机器学习算法对独立于训练数据的数据集的泛化能力.

交叉验证一般要尽量满足:

  • 训练集的比例要足够多,一般大于一半

  • 训练集和测试集要均匀抽样

sklearn的cross_validation库

sklearn的cross_validation库

参数解释:

clf:表示不同的分类器classfy,可以是任何分类器,比如向量机分类器

raw_data:原始数据

raw_target:原始类别标号

cv:代表就是不同的cross validation方法.如果cv是一个int数字的话,如cv = k,那么就是k-folder交叉验证(k个子集,每个子集均做一次测试集,其余的作为训练集。交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果。优点:所有的样本都被作为了训练集和测试集,每个样本都被验证一次。10-folder通常被使用。)

代码:


from sklearn import cross_validation

from sklearn import svm

clf = svm.SVC(kernel = 'linear',C=1)

scores = cross_validation.cross_val_score(clf,iris.data,iris.target,cv =5)

cross_validation.train_test_split训练分裂


X_train,X_test,y_train,y_test = cross.validation.train_test_split(iris.data,iris.target,test_size = 0.4,random_state=0)

评估指标


选择合适的指标

在构建机器学习模型时,我们首先要选择性能指标,然后测试模型的表现如何。相关的指标有多个,具体取决于我们要尝试解决的问题。

此外,在测试模型时,也务必要将数据集分解为训练数据和测试数据。如果不区分训练数据集和测试数据集,则在评估模型时会遇到问题,因为它已经看到了所有数据。我们需要的是独立的数据集,以确认模型可以很好地泛化,而不只是泛化到训练样本。


分类和回归

分类涉及到根据未见过的样本进行预测,并确定新实例属于哪个类别。例如,可以根据蓝色或红色或者方形或圆形来组织对象,以便在看到新对象时根据其特征来组织对象。

在回归中,我们想根据连续数据来进行预测。例如,我们有包含不同人员的身高、年龄和性别的列表,并想预测他们的体重。或者,像在本课程的最终项目中一样,我们可能有一些房屋数据,并想预测某所住宅的价值。


分类指标与回归

在分类中,我们想了解模型隔多久正确或不正确地识别新样本一次。而在回归中,我们可能更关注模型的预测值与真正值之间差多少。


分类指标

对于分类,我们处理的是根据离散数据进行预测的模型。这就是说,此类模型确定新实例是否属于给定的一组类别。在这里,我们测量预测是否准确地将所讨论的实例进行分类。


准确率

最基本和最常见的分类指标就是准确率。在这里,准确率被描述为在特定类的所有项中正确分类或标记的项的数量。

举例而言,如果教室里有 15 个男孩和 16 个女孩,人脸识别软件能否正确识别所有男孩和所有女孩?如果此软件能识别 10 个男孩和 8 个女孩,则它的识别准确率就是 60%:

准确率 = 正确识别的实例的数量/所有实例数量


混淆矩阵

在人工智能中,混淆矩阵(英语:confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵.矩阵的每一列代表一个类的实例预测,而每一行表示一个实例的类的实例.基于实际的名称可以更容易判断机器是否将两个不同的类混淆了.在机器学习领域,混淆矩阵通常被称为了列联表或误差矩阵

关于混淆矩阵:见附件(实际中横轴和数轴可能和附件中不一样)


精确率和召回率

精确率(precision),召回率(recall)由混淆矩阵计算得来

在信息检索中,精确率通常用于评价结果的质量,而召回率用来评估结果的完整性

实际上,精确率(presicion)是二元分类问题的一个常用指标

参数说明:

TP(True Presicion):预测为正的样本中,确实为正的个数

FP(False Presicin):错误地预测为正个样本个数

FN(False Negatives):没有被正确预测的确实为正的样本

精确率:

在所有预测为正的样本中,确实为正的比例

召回率:

本身为正的样本中,被预测为正的比例

例如,假设数据集有 50 个样本,其中20个为正。分类器将 50 个样本中的 10 个标记为“正”(TP+FP=10),在这10个被标记为“正”的样本中,只有 4 个确实是“正“(TP=4),所以这里的精确度为 4/10 = 0.4,召回率为 4/20 = 0.2.


F1分数

既然我们已讨论了精确率和召回率,接下来可能要考虑的另一个指标是 F1 分数。F1 分数会同时考虑精确率和召回率,以便计算新的分数。

可将 F1 分数理解为精确率和召回率的加权平均值,其中 F1 分数的最佳值为 1、最差值为 0:

F1 = 2 * (精确率 * 召回率) / (精确率 + 召回率)

有关F1分数如何在sklearn中使用它的更多信息,请查看此处


回归指标

正如前面对问题的回归类型所做的介绍,我们处理的是根据连续数据进行预测的模型。在这里,我们更关注预测的接近程度。

例如,对于身高和体重预测,我们不是很关心模型能否将某人的体重 100% 准确地预测到小于零点几磅,但可能很关心模型如何能始终进行接近的预测(可能与个人的真实体重相差 3-4 磅)。


平均绝对误差

您可能已回想起,在统计学中可以使用绝对误差来测量误差,以找出预测值与真实值之间的差距。平均绝对误差的计算方法是,将各个样本的绝对误差汇总,然后根据数据点数量求出平均误差。通过将模型的所有绝对值加起来,可以避免因预测值比真实值过高或过低而抵销误差,并能获得用于评估模型的整体误差指标。

有关平均绝对误差和如何在 sklearn 中使用它的更多信息,请查看此链接此处


均方误差

均方误差是另一个经常用于测量模型性能的指标。与绝对误差相比,残差(预测值与真实值的差值)被求平方。

对残差求平方的一些好处是,自动将所有误差转换为正数、注重较大的误差而不是较小的误差以及在微积分中是可微的(可让我们找到最小值和最大值)。

有关均方误差和如何在 sklearn 中使用它的更多信息,请查看此链接此处


回归分数函数

除了误差指标之外,scikit-learn还包括了两个分数指标,范围通常从0到1,值0为坏,而值1为最好的表现。

虽然在课程最后的项目中,我们不会用到这两个指标,但是需要知道他们很重要。他们还有一个优点,就是看起来和分类指标类似,都是数字越接近1.0分数就越好。

其中之一是R2分数,用来计算真值预测的可决系数。在 scikit-learn 里,这也是回归学习器默认的分数方法。

另一个是可释方差分数

虽然眼下我们不会详细探讨这些指标,一个要记住的重点是,回归的默认指标是“分数越高越好”;即,越高的分数表明越好的表现。而当我们用到前面讲的误差指标时,我们要改变这个设定。


管理误差与复杂度

误差的原因:因模型无法表示基本数据的复杂度而造成的偏差(bias),或者因模型对训练它所用的有限数据过度敏感而造成的方差(variance)

偏差造成的误差-准确率和欠拟合:

如果模型具有足够的数据,但因不够复杂而无法捕捉基本关系,则会出现偏差。这样一来,模型一直会系统地错误表示数据,从而导致准确率降低。这种现象叫做欠拟合(underfitting)

简单来说,如果模型不适当,就会出现偏差。举个例子:如果对象是按颜色和形状分类的,但模型只能按颜色来区分对象和将对象分类(模型过度简化),因而一直会错误地分类对象。

或者,我们可能有本质上是多项式的连续数据,但模型只能表示线性关系。在此情况下,我们向模型提供多少数据并不重要,因为模型根本无法表示其中的基本关系,我们需要更复杂的模型。

方差造成的误差-精度和过拟合:

在训练模型时,通常使用来自较大训练集的有限数量样本。如果利用随机选择的数据子集反复训练模型,可以预料它的预测结果会因提供给它的具体样本而异。在这里,方差(variance)用来测量预测结果对于任何给定的测试样本会出现多大的变化。

出现方差是正常的,但方差过高表明模型无法将其预测结果泛化到更多的数据。对训练集高度敏感也称为过拟合(overfitting),而且通常出现在模型过于复杂或我们没有足够的数据支持它时。

通常,可以利用更多数据进行训练,以降低模型预测结果的方差并提高精度。如果没有更多的数据可以用于训练,还可以通过限制模型的复杂度来降低方差。

Understanding the Bias-Variance Tradeoff:通过定义,图形和数学公式定义偏差和方差,非常通俗易懂


你可能感兴趣的:(模型评估与验证)