Scikit-Learn User Guide(三)(文档翻译)

User Guide 第三部分 Model selection and evaluation

1 Cross-validation: evaluating estimator performance

在同一数据集上学习预测函数的参数然后进行测试是一个方法上的错误:这种模型会得到一个很好的分数,让分类器重复看到他刚刚学习过得样本,但是对于它没看过的数据却不能预测出任何有用的东西。这种情况叫做过拟合(overfitting)。为了避免这种情况发生,在(监督)机器学习实验中我们常常会将测试数据切分成为X_test,y_test。注意“实验”这个词并不是表示这仅仅是学术上的作用,因为即使在商业上机器学习的设置都是从实验性的尝试开始的。

在sklearn中你可以通过train_test_spilt(sklearn.cross_validation.train_test_spilt )帮助函数快速的将数据集切分成训练数据和测试数据。让我们记载iris数据集去训练一个线性的支持向量机模型:

>>> import numpy as np
>>> from sklearn import cross_validation
>>> from sklearn import datasets
>>> from sklearn import svm

>>> iris = datasets.load_iris()
>>> iris.data.shape, iris.target.shape
((150, 4), (150,))

我们现在可以很快的拿出40%的数据用来测试我们的分类器

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

>>> X_train.shape, y_train.shape((90, 4), (90,))
>>> X_test.shape, y_test.shape((60, 4), (60,))

>>> clf = svm.SVC(kernel=‘linear‘, C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test)
0.96...

当我们评估预测期的不同的设置(参数)时,例如说SVM分类器的C参数就需要手动设置,在测试数据集上仍然有过拟合的风险因为参数可以调整至预测期表现最佳情况。这时候,测试数据集已经“泄露”到模型中了 ,评价指标也不再报告泛华性能。为了解决这个问题,数据集的另一部分可以被拿出来作为所谓的“验证数据集”:在训练数据集上进行训练,经过这样的评估实验结果看起来很成功以后,最后的评估可以在测试数据集上进行。

然而,将可用的数据切分成3个部分,我们彻底的降低了可以用来训练模型的样本数量,而得出的结果也随机的决定于我们选择的数据集组合(train,validation)。

解决这个问题的程序叫做交叉验证(cross-validation)[CV]。CV也需要拿出测试数据集去进行最后的评估,但是验证数据集就不再需要了。有一种基本的方式叫做k-fold CV,训练数据集被切分成K个小数据集,对K个folds剩下的步骤如下:

用K-1个folds作为训练数据训练模型;

模型的结果会被剩余部分的数据验证(这里会用test set计算模型的性能比如准确性)

那么k-fold交叉验证的性能报告就是在训练中计算出来的平均值。这个方法计算起来很麻烦,但是不会浪费太多的数据(这是测试任意数据集的关键),当样本数量很小时这是在倒转推论的一个主要的优势。

 

3.1.1计算交叉验证度量

最简单的使用交叉验证的方式是在数据集合预测器上调用cross_val_score函数

下面这个历史示范了如何评估线性kernelSVM在切分iris数据集上的准确性,训练模型然后连续计算5次评分(每次都在不同的切片上)

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

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

>>> scores

array([ 0.96...,  1.  ...,  0.96...,  0.96...,  1.        ])

分数的平均值和95%的置信区间(confidence interval)给出如下:

>>> print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))Accuracy: 0.98 (+/- 0.03)

默认情况下每个CV迭代过程中计算分数是通过预测期的score函数,我们可以通过使用scoring参数修改默认值:

>>> from sklearn import metrics>>> scores = cross_validation.cross_val_score(clf, iris.data, iris.target,...     cv=5, scoring=‘f1_weighted‘)>>> scores                                             
array([ 0.96...,  1.  ...,  0.96...,  0.96...,  1.        ])

<待编辑>

时间: 2025-01-02 23:27:36

Scikit-Learn User Guide(三)(文档翻译)的相关文章

Python之扩展包安装(scikit learn)

scikit learn 是Python下开源的机器学习包.(安装环境:win7.0 32bit和Python2.7) Python安装第三方扩展包较为方便的方法:easy_install + packages name 在官网 https://pypi.python.org/pypi/setuptools/#windows-simplified 下载名字为 的文件. 在命令行窗口运行 ,安装后,可在python2.7文件夹下生成Scripts文件夹.把路径D:\Python27\Scripts

scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类

scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import numpy as np from sklearn.pipeline import Pipeline from sklearn.linear_model import SGDClassifier from sklearn.grid_search import GridSearchCV from sk

Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的垂直搜索引擎,专门为用户提供团购.优惠券的检索:同时存在一个通用的搜索引擎,比如百度,通用搜索引擎希望能够识别出一个Query是否具有O2O检索意图,如果有则调用O2O垂直搜索引擎,获取结果作为通用搜索引擎的结果补充. 我们的目的是学习出一个分类器(classifier),分类器可以理解为一个函数,

[Learn AF3]第三章 App Framework 3组件之Panel:afui的核心

Panel,afui的核心组件 组件名称:Panel     使用说明:按照官方的说法,panel组件是af3的“核心(heart of the ui)”,panel用于构造应用中独立的内容展示区域,是真正用于装载信息和用户交互的控件的地方,panle控件还需要声明在class="pages"的div元素之中.     方法:同样panel并非一个javascript的类,也没有专属方法. 属性:panel可用的声明式属性,说到这个,不得不说intel app framework的文档

Linear Regression with Scikit Learn

Before you read ?This is a demo or practice about how to use Simple-Linear-Regression in scikit-learn with python. Following is the package version that I use below: The Python version: 3.6.2 The Numpy version: 1.8.0rc1 The Scikit-Learn version: 0.19

【359】scikit learn 官方帮助文档

官方网站链接 KNN Home Installation Documentation Scikit-learn 0.20.2 (stable) Tutorials User guide API Glossary FAQ Contributing Roadmap Development version All available versions PDF documentation Examples Documentation of scikit-learn 0.20.2¶ Quick Start

API Guide(三)之Views

Class-based Views Django's class-based views are a welcome departure from the old-style views. - Reinout van Rees REST框架提供了一个APIView类,which subclasses Django's View class. APIView类与普通View类有以下不同: 传递给the handler methods 的Requests 将是REST框架的Request实例,而不是

Scikit Learn安装教程

Windows下安装scikit-learn 准备工作 Python (>= 2.6 or >= 3.3), Numpy (>= 1.6.1) Scipy (>= 0.9), Matplotlib(可选). NumPy NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)). Scipy SciPy是一款方便.易于使用

Scikit Learn

安装pip 代码如下:# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate# tar -xzvf pip-1.5.4.tar.gz# cd pip-1.5.4# python setup.py install 输入pip如果能看到信息证明安装成功. 安装scikit-learn

Audio Session Programming Guide(官方文档翻译一)

audiosession负责调节你的app和ios系统里的音频行为.一旦加载了audiosession你可以获得一个audiosession的单例.你可以配置这个audiosession来控制你的app的音频行为.例如: 当你的app播放声音的时候,你是希望其他正在播放声音的app静音还是混合两个app的声音? 你的app如何回应突发的打断,例如这时候闹铃突然响了? 你的app又该如何回应耳机口的拔插呢? AuioSession的配置会影响你的app在运行中所有的音频活动,除了利用System