1.验证的简介
目前为止,我们已经在训练数据集中评估了模型的精确性。当然,这是非常有必要的第一步,但是这不能帮助我们了解在没有见过的数据上使用时效果如何。在机器学习中,我们想要使用训练数据集,它包含输出标签也都是历史数据。而建立一个分类器,它会返回一个新的预测标签,没有被标记的数据。如果我们在一个被训练的数据集上评估分类器的效果,我们就会进入一个过拟合状态,也就是这个分类器只能在训练数据集上运行的很好,但在未来的数据中却不然。
测试分类器的概化理论generalizability,或者它自己在不是训练数据集中预测的精确度,我们使用交叉验证技术。交叉验证涉及将历史数据一分为二:
一个训练数据集------我们用来训练分类器
一个测试数据集-------我们使用多种测量方式来评估分类器效果
交叉验证是在训练任何种类的机器模型中都是需要被使用的重要一步。在这个任务中,我们将会专注于使用交叉验证来评估二元分类模型。我们将会继续研究研究生入学考试的数据集集,它包含644名申请人资料,如下几列:
gre----申请人在GRE的分数,对于即将读研究生的学生一种普遍的考试
分数范围200-800
gpa---大学平均分
介于0.0-4.0之间的连续数
admit---二元分类值
二元值,0或1,1代表申请者录取,0代表申请者被拒绝
在接下来的代码中,我们导入所需的库,读取admissions数据框架,重命名admitl列为actual_label,并去掉admit列
练习
import pandas as pd
from sklearn.linear_model import LogisticRegression
admissions = pd.read_csv("admissions.csv")
admissions["actual_label"] = admissions["admit"]
admissions = admissions.drop("admit", axis=1)
print(admissions.head())
2.保持验证
有许多不同方式的交叉验证技术我们可以用于评估分类器的效果。最简单的技术被叫做:保持验证。它涉及以下几个方面:
。随机的将我们的数据集分为训练数据集和测试数据集。
。使用训练数据集来拟合模型
。在测试数据集中做出预测。
在admissions数据框架中我们随机选择80%的数据作为训练数据集,剩下的20%作为测试数据集。这种比例并非一成不变的,你将会看到,人们会取而代之使用75%-25%分法。
在接下的几节课中我们将会探索更多有关交叉验证技术的保持验证,在这节课中,这是最简单的验证。将数据随机分为训练集和测试集。我们将会:
。使用numpy.random.permutation函数返回一个随机顺序中包含索引的列表
。返回一个列表顺序的新的数据框架
。选择前80%的行作为训练集
。选择后20%的行作为测试集
练习:
使用NumPy里的rand.permutation函数来随机化admissions数据框架的索引。
在 admissions数据框架中使用loc【】方法以随机顺序来返回一个新的数据框架,把这个数据框架赋值给shuffled_admissions
从shuffled_admissions中 选出0-514行(包含第514行)赋值给train.
选出剩下的行,并赋值给test
最后,显示shuffled_admissions的前5行。
import numpy as np
np.random.seed(8)
admissions = pd.read_csv("admissions.csv")
admissions["actual_label"] = admissions["admit"]
admissions = admissions.drop("admit", axis=1)
shuffled_index = np.random.permutation(admissions.index)
shuffled_admissions = admissions.loc[shuffled_index]
train = shuffled_admissions.iloc[0:515]
test = shuffled_admissions.iloc[515:len(shuffled_admissions)]
print(shuffled_admissions.head())