Udacity机器学习入门——交叉验证(cross-validation)

测试数据可以让你评估你的分类器或回归在独立数据集上的性能,还能帮助你避免过度拟合


在sklearn中训练/测试分离

sklearn链接:http://scikit-learn.org/stable/modules/cross_validation.html

加载数据集以适应线性SVM:

from sklearn import datasets
from sklearn.svm import SVC

iris = datasets.load_iris()
features = iris.data
labels = iris.target
快速地采样一个训练集,同时支持40%的数据来测试(评估)我们的分类器:
#将数据集拆分为训练和测试集
from sklearn.model_selection import train_test_split
features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(iris.data,iris.target,test_size = 0.4,random_state=0)

clf = SVC(kernel="linear", C=1.)
clf.fit(features_train, labels_train)

print clf.score(features_test, labels_test)



何处使用训练数据,何处使用测试数据

流程:首先将全部数据分为训练数据集和测试数据集,接下来使用PCA一种特征转换选出一些主成分,将其放入支持向量机一种分类方法svc

1. pca.fit(training_features)在训练特征中找到主成分

2. pca.transform(training_features)使用发现的fit将数据实际转化为新的主成分表示

3. svc.train(training_features) 训练支持向量机分类器

4. pca.transform(test_features)

    因为没有再次调用pca.fit,因此将使用在训练数据中发现的主成分表示我的测试特征,如果此时使用测试特征重新拟合PCA,是不正确的

5. svc.predict(test_features)

    支持向量机对测试数据集进行预测



练习:K折交叉验证

两个集合最大化——尽可能多的训练集数据点以获得最佳学习效果,尽可能多的测试集数据项来获得最佳验证,此时为了寻找折中点涉及到交叉验证

基本要点:将训练数据评分到相同大小的k个容器内,例如200个训练数据点,10个容器,则每个容器20个训练数据点,在k折交叉验证中,你将运行k此单独的学习试验,在每次实验中,你将从这k个子集中挑选一个作为验证集,剩下k-1个容器放在一起作为训练集,然后训练你的机器学习算法,再再验证集上验证性能,交叉验证中的要点是这个操作会运行k次,然后将k次试验的测试结果取平均值


>>> import numpy as np
>>> from sklearn.model_selection import KFold

>>> X = ["a", "b", "c", "d"]
>>> kf = KFold(n_splits=2)
>>> for train, test in kf.split(X):
...     print("%s %s" % (train, test))
[2 3] [0 1]
[0 1] [2 3]

train=训练集中使用的所有数据点的索引值的集合,test=测试集使用的所有索引值


sklearn中的K折CV

#!/usr/bin/python


import sys
from time import time
from sklearn.cross_validation import KFold
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_selection import SelectPercentile,f_classif
from sklearn.naive_bayes import Gaussian
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值