跟我一起学scikit-learn10:模型准确性

测试数据集的成本,即 J t e s t ( θ ) {J}_{test}(\theta) Jtest(θ)是评估模型准确性的最直观的指标, J t e s t ( θ ) {J}_{test}(\theta) Jtest(θ)值越小说明模型预测出来的值与真实值差异越小,对新数据的预测准确性就越好。需要特别注意,用来测试模型准确性的测试数据集,必须是模型“没见过”的数据。

这就是为什么,要把数据集分成训练数据集和测试数据集。一般原则是按照8:2或7:3来划分,然后用训练数据集来训练模型,训练出模型参数后再使用测试数据集来测试模型的准确性,根据模型的准确性来评价模型的性能。

可以思考一个问题:为什么要确保模型没有见过测试数据集?

那么,我们要如何计算测试数据集的误差呢?简单地说,就是用测试数据集和训练出来的模型参数代入相应的成本函数里,计算测试数据集的成本。

针对前面介绍的线性回归算法,可以使用下面的公式计算测试数据集的误差,其中m是测试数据集的个数:
J t e s t ( θ ) = 1 2 m ∑ i = 0 m ( h θ ( x ( i ) ) − y ( i ) ) 2 {J}_{test}(\theta)=\frac{1}{2m}\sum^{m}_{i=0}({h}_{\theta}({x}^{(i)})-{y}^{(i)})^2 Jtest(θ)=2m1i=0m(hθ(x(i))y(i))2

1.模型性能的不同表达式

在scikit-learn里,不使用成本函数来表达模型的性能。而使用分数来表达,这个分数总是在[0,1]之间,数值越大说明模型的准确性越好。当模型训练完成后,调用模型的score(X_test,y_test)即可算法模型的分数值,其中X_test和y_test是测试数据集样本。
模型分数(准确性)与成本成反比。即分数越大,准确性越高,误差越小,成本越低;反之,分数越小,准确性越低,误差越大,成本越高。

2.交叉验证数据集

另外一个更科学的方法是把数据集分成3份,分别是训练数据集、交叉验证数据集和测试数据集,推荐比例是6:2:2。

为什么需要交叉验证数据集呢?以多项式模型选择为例。假设我们用一阶多项式、二阶多项式、三阶多项式……十阶多项式来拟合数据,多项式的阶数记为d。我们把数据集分成训练数据集和测试数据集。先用训练数据集训练处机器学习算法的参数 θ ( 1 ) {\theta}^{(1)} θ(1) θ ( 2 ) {\theta}^{(2)} θ(2) θ ( 3 ) {\theta}^{(3)} θ(3),……, θ ( 10 ) {\theta}^{(10)} θ(10),这些参数分别代表从一阶到十阶多项式的模型参数。这10个模型里,哪个模型更好呢?这个时候我们会用测试数据集算出针对测试数据集的成本 J t e s t ( θ ) {J}_{test}(\theta) Jtest(θ),看哪个模型的测试数据集成本最低,我们就选择这个多项式来拟合数据,但实际上,这是有问题的。测试数据集的最主要功能是测试模型的准确性,需要确保模型没见过这些数据。现在我们用测试数据集来选择多项式的阶数d,相当于把测试数据集提前让模型见过了。这样选择出来的多项式阶数d本身就是对训练数据集最友好的一个,这样模型的准确性测试就失去了意义。

为了解决这个问题,我们把数据分成3份,随机选择60%的数据作为训练数据集,其成本记为 J ( θ ) J(\theta) J(θ),随机选择20%的数据作为交叉验证数据集(Cross Validation),其成本记为 J c v ( θ ) {J}_{cv}(\theta) Jcv(θ),剩下的20%作为测试数据集,其成本记为 J t e s t ( θ ) {J}_{test}(\theta) Jtest(θ)

在模型选择时,我们使用训练数据集来训练算法参数,用交叉验证数据集来验证参数。选择交叉验证数据集的成本 J c v ( θ ) {J}_{cv}(\theta) Jcv(θ)最小的多项式来作为数据拟合模型,最后再用测试数据集来测试选择出来的模型针对测试数据集的准确性。

因为在模型选择过程中,我们使用了交叉验证数据集,所以筛选模型多项式阶数d的过程中,实际上并没有使用测试数据集。这样保证了使用测试数据集来计算成本衡量模型的准确性,我们选择出来的模型是没有见过测试数据,即测试数据集没有参与模型选择的过程。

当然,在实践过程中,很多人直接把数据集分成训练数据集和测试数据集,而没有分出交叉验证数据集。这是因为很多时候并不需要横向去对比不同的模型。在工程上,大多数时候我们最主要的工作不是选择模型,而是获取更多数据、分析数据、挖掘数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
scikit-learnsklearn)是一个流行的Python机器习库,提供了许多常用的机器习算法和工具。下面是几种常见的机器模型: 1. 线性回归(Linear Regression):线性回归是一种用于建立两个变量之间线性关系的模型。它适用于预测连续变量,例如股票价格或气温。 2. 逻辑回归(Logistic Regression):逻辑回归是一种用于建立两个变量之间的非线性关系的模型。它适用于预测二元分类问题,例如判断一封电子邮件是否为垃圾邮件。 3. 决策树(Decision Tree):决策树是一种基于树形结构的分类器,它通过对数据进行分割来生成一个树形结构,从而将数据分类到不同的类别中。 4. 随机森林(Random Forest):随机森林是一种集成习方法,它将多个决策树结合在一起来提高预测的准确性和稳定性。 5. 支持向量机(Support Vector Machines):支持向量机是一种监督习算法,它通过将数据映射到高维空间中来寻找一个最优的超平面,从而将不同类别的数据进行分类。 6. K近邻(K-Nearest Neighbors):K近邻是一种基于距离度量的分类器,它通过将新的样本与已知的样本进行比较来预测它的类别。 7. 聚类(Clustering):聚类是一种无监督习算法,它通过将数据分组到不同的簇中来发现数据中的模式和结构。常见的聚类算法包括 K-Means 和层次聚类等。 以上仅是几种常见的机器模型,实际上sklearn还提供了许多其他的算法和工具,可以根据具体的问题选择合适的模型来解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值