精华内容
下载资源
问答
  • 十折交叉验证

    千次阅读 2019-06-22 16:27:21
    交叉验证主要分成以下几类:1)k-folder cross-validation:k个子集,每个子集均做一次测试集,其余的作为训练集。交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果。优点:...

    交叉验证主要分成以下几类:
    1)k-folder cross-validation:k个子集,每个子集均做一次测试集,其余的作为训练集。交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果。优点:所有的样本都被作为了训练集和测试集,每个样本都被验证一次。10-folder通常被使用。
    2)K * 2 folder cross-validation是k-folder cross-validation的一个变体,对每一个folder,都平均分成两个集合s0,s1,我们先在集合s0训练用s1测试,然后用s1训练s0测试。优点是:测试和训练集都足够大,每一个个样本都被作为训练集和测试集。一般使用k=10
    3)least-one-out cross-validation(loocv)假设dataset中有n个样本,那LOOCV也就是n-CV,意思是每个样本单独作为一次测试集,剩余n-1个样本则做为训练集。
    优点:
    1)每一回合中几乎所有的样本皆用于训练model,因此最接近母体样本的分布,估测所得的generalization error比较可靠。
    2)实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。但LOOCV的缺点则是计算成本高,为需要建立的models数量与总样本数量相同,当总样本数量相当多时,LOOCV在实作上便有困难,除非每次训练model的速度很快,或是可以用平行化计算减少计算所需的时间。

    -------十折交叉验证:10-fold cross validation-------
    英文名叫做10-fold cross-validation,用来测试算法准确性。是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。
    之所以选择将数据集分为10份,是因为通过利用大量数据集、使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点。但这并非最终诊断,争议仍然存在。而且似乎5折或者20折与10折所得出的结果也相差无几。

    展开全文
  • 采用了十折交叉验证提高了分类的准确性,分类器分类函数可以替换成Linear,quadratic,rbf函数
  • 深度学习--十折交叉验证

    万次阅读 2019-03-22 07:02:34
    用scikit-learn来评价模型质量,为了更好地挑拣出结果的差异,采用了十折交叉验证(10-fold cross validation)方法。 本程序在输入层和第一个隐含层之间加入20%Dropout 采用十折交叉验证的方法进行测试。 # ...

    用scikit-learn来评价模型质量,为了更好地挑拣出结果的差异,采用了十折交叉验证(10-fold cross validation)方法。

    本程序在输入层和第一个隐含层之间加入20%Dropout

    采用十折交叉验证的方法进行测试。

    
        # dropout in the input layer with weight constraint
        def create_model1():
            # create model
            model = Sequential()
            model.add(Dropout(0.2, input_shape=(60,)))
            model.add(Dense(60, init='normal', activation='relu', W_constraint=maxnorm(3)))
            model.add(Dense(30, init='normal', activation='relu', W_constraint=maxnorm(3)))
            model.add(Dense(1, init='normal', activation='sigmoid'))
            # Compile model
            sgd = SGD(lr=0.1, momentum=0.9, decay=0.0, nesterov=False)
            model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])
            return model
     
        numpy.random.seed(seed)
        estimators = []
        estimators.append(('standardize', StandardScaler()))
        estimators.append(('mlp', KerasClassifier(build_fn=create_model1, nb_epoch=300, batch_size=16, verbose=0)))
        pipeline = Pipeline(estimators)
        kfold = StratifiedKFold(y=encoded_Y, n_folds=10, shuffle=True, random_state=seed)
        results = cross_val_score(pipeline, X, encoded_Y, cv=kfold)
        print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))

    Pineline

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    num_pipeline = Pipeline([
    	('imputer', Imputer(strategy="median")),
    	('attribs_adder', CombinedAttributesAdder()),
    	('std_scaler', StandardScaler()),
    ])
    housing_num_tr = num_pipeline.fit_transform(housing_num)

    Pipeline构造器接受(name, transform) tuple的列表作为参数。按顺序执行列表中的transform,完成数据预处理

    StratifiedKFold

    StratifiedKFold用法类似Kfold,但是分层采样,确保训练集,测试集中各类别样本的比例与原始数据集中相同

    sklearn.model_selection.StratifiedKFold(n_splits=3, shuffle=False, random_state=None) 
    

    
    import numpy as np 
    from sklearn.model_selection import KFold,StratifiedKFold
     
    X=np.array([
        [1,2,3,4],
        [11,12,13,14],
        [21,22,23,24],
        [31,32,33,34],
        [41,42,43,44],
        [51,52,53,54],
        [61,62,63,64],
        [71,72,73,74]
    ])
     
    y=np.array([1,1,0,0,1,1,0,0])
    floder = KFold(n_splits=4,random_state=0,shuffle=False)
    sfolder = StratifiedKFold(n_splits=4,random_state=0,shuffle=False)
     
    for train, test in sfolder.split(X,y):
        print('Train: %s | test: %s' % (train, test))
        print(" ")
     
    for train, test in floder.split(X,y):
        print('Train: %s | test: %s' % (train, test))
    
    #RESULT
    Train: [1 3 4 5 6 7] | test: [0 2]
     
    Train: [0 2 4 5 6 7] | test: [1 3]
     
    Train: [0 1 2 3 5 7] | test: [4 6]
     
    Train: [0 1 2 3 4 6] | test: [5 7]
     
    Train: [2 3 4 5 6 7] | test: [0 1]
     
    Train: [0 1 4 5 6 7] | test: [2 3]
     
    Train: [0 1 2 3 6 7] | test: [4 5]
     
    Train: [0 1 2 3 4 5] | test: [6 7]
    
    

    cross_val_score:

    不同的训练集、测试集分割的方法导致其准确率不同
    交叉验证的基本思想是:将数据集进行一系列分割,生成一组不同的训练测试集,然后分别训练模型并计算测试准确率,最后对结果进行平均处理。这样来有效降低测试准确率的差异。
    

    使用交叉验证的建议

    1. K=10是一个一般的建议

    2. 如果对于分类问题,应该使用分层抽样(stratified sampling)来生成数据,保证正负例的比例在训练集和测试集中的比例相同

    
    from sklearn.cross_validation import cross_val_score
    
    knn = KNeighborsClassifier(n_neighbors=5)
    # 这里的cross_val_score将交叉验证的整个过程连接起来,不用再进行手动的分割数据
    # cv参数用于规定将原始数据分成多少份
    scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy')
    print(scores)
    print(scores.mean())#输出结果平均值
    

    参考网页:

    https://blog.csdn.net/u010159842/article/details/54138157

    cross_val_score交叉验证及其用于参数选择、模型选择、特征选择

    https://blog.csdn.net/u012735708/article/details/82258615

    展开全文
  • 十折交叉验证和混淆矩阵

    千次阅读 2017-07-16 16:58:21
    一、十折交叉验证 前面提到了数据集分为训练集和测试集,训练集用来训练模型,而测试集用来测试模型的好坏,那么单一的测试是否就能很好的衡量一个模型的性能呢? 答案自然是否定的,单一的测试集具有偶然性和...

    一、十折交叉验证

    前面提到了数据集分为训练集和测试集,训练集用来训练模型,而测试集用来测试模型的好坏,那么单一的测试是否就能很好的衡量一个模型的性能呢?

    答案自然是否定的,单一的测试集具有偶然性和随机性。因此本文介绍一种衡量模型(比如分类器)性能的方法——十折交叉验证(10-fold cross validation)

    什么是十折交叉验证?

    假设有个数据集,需要建立一个分类器,如何验证分类器的性能呢?

    将数据集随机均为为10份,依次选择某1份作为测试集,其他9份作为训练集,训练出来的模型对测试集进行分类,并统计分类结果,就这样,重复10次实验,综合所有分类结果,就可以得到比较稳定的评价结果(当然,由于是随机划分数据集,因此每次运行结果都不一致)。

    附:当然也可以选择k折交叉验证,最极端的就是留1交叉验证,每次只留一个样本做测试集,但这样的计算规模太大。

    二、混淆矩阵

    混淆矩阵:confuse matrix

    假设有n个类别,那么分类结果的统计可以通过一个n*n的矩阵来表示,即混淆矩阵。

    对角线即为分类正确的样本数。

    展开全文
  • 学习器在测试集上的误差我们通常称作“泛化误差”。要想得到“泛化误差”首先得将数据集划分为训练集和测试集...##一个简单的2折交叉验证from sklearn.model_selection import KFoldimport numpy as npX=np.array([[...

    学习器在测试集上的误差我们通常称作“泛化误差”。要想得到“泛化误差”首先得将数据集划分为训练集和测试集。那么怎么划分呢?常用的方法有两种,k折交叉验证法和自助法。介绍这两种方法的资料有很多。下面是k折交叉验证法的python实现。

    ##一个简单的2折交叉验证

    from sklearn.model_selection import KFold

    import numpy as np

    X=np.array([[1,2],[3,4],[1,3],[3,5]])

    Y=np.array([1,2,3,4])

    KF=KFold(n_splits=2) #建立4折交叉验证方法 查一下KFold函数的参数

    for train_index,test_index in KF.split(X):

    print("TRAIN:",train_index,"TEST:",test_index)

    X_train,X_test=X[train_index],X[test_index]

    Y_train,Y_test=Y[train_index],Y[test_index]

    print(X_train,X_test)

    print(Y_train,Y_test)

    #小结:KFold这个包 划分k折交叉验证的时候,是以TEST集的顺序为主的,举例来说,如果划分4折交叉验证,那么TEST选取的顺序为[0].[1],[2],[3]。

    #提升

    import numpy as np

    from sklearn.model_selection import KFold

    #Sample=np.random.rand(50,15) #建立一个50行12列的随机数组

    Sam=np.array(np.random.randn(1000)) #1000个随机数

    New_sam=KFold(n_splits=5)

    for train_index,test_index in New_sam.split(Sam): #对Sam数据建立5折交叉验证的划分

    #for test_index,train_index in New_sam.split(Sam): #默认第一个参数是训练集,第二个参数是测试集

    #print(train_index,test_index)

    Sam_train,Sam_test=Sam[train_index],Sam[test_index]

    print('训练集数量:',Sam_train.shape,'测试集数量:',Sam_test.shape) #结果表明每次划分的数量

    #Stratified k-fold 按照百分比划分数据

    from sklearn.model_selection import StratifiedKFold

    import numpy as np

    m=np.array([[1,2],[3,5],[2,4],[5,7],[3,4],[2,7]])

    n=np.array([0,0,0,1,1,1])

    skf=StratifiedKFold(n_splits=3)

    for train_index,test_index in skf.split(m,n):

    print("train",train_index,"test",test_index)

    x_train,x_test=m[train_index],m[test_index]

    #Stratified k-fold 按照百分比划分数据

    from sklearn.model_selection import StratifiedKFold

    import numpy as np

    y1=np.array(range(10))

    y2=np.array(range(20,30))

    y3=np.array(np.random.randn(10))

    m=np.append(y1,y2) #生成1000个随机数

    m1=np.append(m,y3)

    n=[i//10 for i in range(30)] #生成25个重复数据

    skf=StratifiedKFold(n_splits=5)

    for train_index,test_index in skf.split(m1,n):

    print("train",train_index,"test",test_index)

    x_train,x_test=m1[train_index],m1[test_index]

    Python中貌似没有自助法(Bootstrap)现成的包,可能是因为自助法原理不难,所以自主实现难度不大。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • weka进行十折交叉验证

    千次阅读 2016-11-22 09:05:47
    十折交叉验证英文名叫做10-fold cross-validation,用来测试算法准确性。是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。...
  • 文档从UCI机器学习数据集中选择Iris、Spambase、Car Evaluation三个数据集,用于进行基于决策树分类算法的十折交叉验证验证。通过编程实现决策树分类算法,并通过十次十折交叉验证测试算法分类精度。报告对数据集、...
  • 数据挖掘各分类算法原理阐述,朴素贝叶斯、SVM、KNN等算法的代码实现,并用十折交叉验证进行评价和分析。
  • 十折交叉验证程序

    2018-12-06 19:57:23
    用贝叶斯公式进行具体计算验证在已有条件下是否去打球。 (Calculate average decision accurate for Table 1 using Ten-fold-cross validation.)
  • 训练机器学习模型的关键一步是要评估模型的泛化能力。如果我们训练好模型后,还是用...这就是这一节要解决的问题,你会学习到两种交叉验证计数,holdout交叉验证和k折交叉验证, 来评估模型的泛化能力。holdout m...
  • LARS算法---十折交叉验证

    千次阅读 2017-09-27 22:21:30
    参考:《python机器学习预测分析核心算法》4-2 & llx1026同学的修改代码十折交叉验证整体采用上节的lars算法框架,加入了十折验证,十个β系数,每个β系数进行350次迭代。
  • 因此,理论上为了保证最后测试结果的有效性,应该先将数据分为训练集和测试集,然后对训练集采用十折交叉验证。 链接:https://www.zhihu.com/question/274417233/answer/376476821 一般情况下,我会选择先把整个...
  • # #K Nearest Neighbor Classifier for Pima dataset#importheapqimportrandomclassClassifier:def __init__(self, bucketPrefix, testBucketNumber, dataFormat, k):"""a classifier will be built from files wit....
  • 这一篇主要目的在于学习利用python进行数据的分割,给出了两段代码(case1、2),主要是围绕这两段...举个很简单的例子,比如在进行十折交叉验证(Ten-folder cross validation)、留一法验证(Leave-one-out cross valid...
  • 手动实现交叉验证,代码简洁易懂,可以学到不错的知识
  • 三、利用十折交叉验证计算错误分类率 3.1代码部分 load fisheriris indices = crossvalind('Kfold',species,10); cp = classperf(species); for i = 1:10 test = (indices == i); train = ~test; %分别取第1、2、.....
  • 1.问题引入基于一些已知样本,根据其变量(是否出现胸痛、是否有良好的...2.交叉验证法的作用要回答上面的问题,首先需要决定使用哪种机器学习方法。可供选择的机器学习算法有很多种,如logistic回归(logistic reg...
  • 1 交叉验证简介1.1 交叉验证是什么交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再...
  • R语言逻辑回归、ROC曲线和十折交叉验证自己整理编写的逻辑回归模板,作为学习笔记记录分享。数据集用的是14个自变量Xi,一个因变量Y的australian数据集。1. 测试集和训练集3、7分组[html] view plain copyaustralian...
  • 机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集?...交叉验证(一般取十折交叉验证:10-fold cross validation) k个子集,每个子集均做一次测试集,其...
  • 1、十折交叉验证 2、混淆矩阵 3、K近邻 4、python实现   一、十折交叉验证 前面提到了数据集分为训练集和测试集,训练集用来训练模型,而测试集用来测试模型的好坏,那么单一的测试是否就能很好的衡量一个...
  • R语言逻辑回归、ROC曲线和十折交叉验证2021-01-21自己整理编写的逻辑回归模板,作为学习笔记记录分享。数据集用的是14个自变量Xi,一个因变量Y的australian数据集。1. 测试集和训练集3、7分组[html] view plaincopy...
  • 当使用十折交叉验证后,九成的数据用作训练集,一成的数据用作验证集,在训练的过程中,是不是当验证集的准确率收敛后就可以停止训练呢?(我现在的做法就是这样的) 2. 当模型应用十折交叉验证跑完后,会得到10个...
  • 自定义十折交叉验证

    千次阅读 2018-02-15 00:35:21
    # 2> 十折决策树算法 from sklearn.tree import DecisionTreeClassifier #导入决策树模型 from __future__ import division from sklearn.metrics import confusion_matrix p = 0.1 #设置训练集的比例 N = 1/p ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 159
精华内容 63
关键字:

十折交叉验证