精华内容
下载资源
问答
  • 1. 简介在Andrew Ng的机器学习教程里,会将给定的数据集分为三部分:训练数据集(training set)、交叉验证数据集(cross validation set)、测试数据集(test set)。三者分别占总数据集的60%、20%、20%。 那么...

    #1. 简介
    在Andrew Ng的机器学习教程里,会将给定的数据集分为三部分:训练数据集(training set)、交叉验证数据集(cross validation set)、测试数据集(test set)。三者分别占总数据集的60%、20%、20%。
    那么这些数据集分别是什么作用呢?

    #2. 三种数据集的作用
    假设我们训练一个数据集,有下面10中模型可以选择:
    这里写图片描述
    (图片来自Coursera Machine Learning Andrew Ng 第6周:Model Selection and Train/Validation/Test Sets)

    我们想知道两件事:

    • 1)这10中模型中哪种最好(决定多项式的阶数d);
    • 2)最好的模型的 θ \theta θ参数是什么。
      为此,我们需要,
    1. 使用训练数据集分别训练这10个模型;
    2. 用训练好的这10个模型,分别处理交叉验证数据集,统计它们的误差,取误差最小的模型为最终模型(这步就叫做Model Selection)。
    3. 用测试数据集测试其准确性。

    这里有个问题要回答:为什么不直接使用测试数据集(Test Set)来执行上面的第2.步?
    答:如果数据集只分成训练数据集(Training Set)和测试数据集(Test Set),且训练数据集用于训练 θ \theta θ,测试数据集用于选择模型,那么就缺少能够“公平”评判最终模型优劣的数据集,因为最终的模型就是根据训练数据集和测试数据集训练得到的,肯定在这两个数据集上表现良好,但不一定在其他数据上也如此。

    展开全文
  • 验证数据集判断模型效果

    在上一篇博客中,给出了使用神经网络解决MNIST问题的完整程序。在这个程序的开始设置了初始学习率、学习率衰减率、隐藏层节点数量、迭代轮数等7种不同的参数。

    在大部分情况下,配置神经网络的这些参数都是需要通过实验来调整的。使用测试数据来选取参数可能会导致神经网络模型过度拟合测试数据,从而失去对未知数据的预判能力。需要保证测试数据在训练过程中是不可见的

    于是,为了评测神经网络模型在不同参数下的效果,一般会从训练数据中抽取一部分作为验证数据。使用验证数据就可以评判不同参数取值下的模型的表现。

    为了说明验证数据在一定程度上可以作为模型效果的评判标准,我们将对比在不同迭代轮数的情况下,模型在验证数据和测试数据上的正确率。

                if i % 1000 == 0:
                    validate_acc = sess.run(accuracy, feed_dict=validate_feed)
                    test_acc = sess.run(accuracy, feed_dict=test_feed)
                    print("After %d training steps, validation accuracy"
                          "using average model is %g, test accuracy"
                          "using average model is %g " % (i, validate_acc, test_acc))

    虽然两条曲线不完全重合,但是这两条曲线的趋势基本一样,而且他们的相关系数大于0.9999。

    一般来说,选取的验证数据分布越接近测试数据分布,模型在验证数据上的表现越可以体现模型在测试数据上的表现。

    展开全文
  • 2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklearn训练分类模型。3.在编码过程中有一的误区需要注意:这个sklearn官方给出的文档>>> import numpy as np >>> ...

    源起:

    1.我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求。

    2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklearn训练分类模型。

    3.在编码过程中有一的误区需要注意:

    这个sklearn官方给出的文档

    >>> 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理解成原数据集分割成子数据集之后的子数据集索引。而实际上,它就是原始数据集本身的样本索引。

    源码:

    # -*- coding:utf-8 -*-
    # 得到交叉验证数据集,保存成CSV文件
    # 输入是一个包含正常恶意标签的完整数据集,在读数据的时候分开保存到datasetBenign,datasetMalicious
    # 分别对两个数据集进行KFold,最后合并保存
    
    from sklearn.model_selection import KFold
    import csv
    
    def writeInFile(benignKFTrain, benignKFTest, maliciousKFTrain, maliciousKFTest, i, datasetBenign, datasetMalicious):
        newTrainFilePath = "E:\\hadoopExperimentResult\\5KFold\\AllDataSetIIR10\\dataset\\ImbalancedAllTraffic-train-%s.csv" % i
        newTestFilePath = "E:\\hadoopExperimentResult\\5KFold\\AllDataSetIIR10\\dataset\\IImbalancedAllTraffic-test-%s.csv" % i
        newTrainFile = open(newTrainFilePath, "wb")# wb 为防止空行
        newTestFile = open(newTestFilePath, "wb")
        writerTrain = csv.writer(newTrainFile)
        writerTest = csv.writer(newTestFile)
        for index in benignKFTrain:
            writerTrain.writerow(datasetBenign[index])
        for index in benignKFTest:
            writerTest.writerow(datasetBenign[index])
        for index in maliciousKFTrain:
            writerTrain.writerow(datasetMalicious[index])
        for index in maliciousKFTest:
            writerTest.writerow(datasetMalicious[index])
        newTrainFile.close()
        newTestFile.close()
    
    
    def getKFoldDataSet(datasetPath):
        # CSV读取文件
        # 开始从文件中读取全部的数据集
        datasetFile = file(datasetPath, 'rb')
        datasetBenign = []
        datasetMalicious = []
        readerDataset = csv.reader(datasetFile)
        for line in readerDataset:
            if len(line) > 1:
                curLine = []
                curLine.append(float(line[0]))
                curLine.append(float(line[1]))
                curLine.append(float(line[2]))
                curLine.append(float(line[3]))
                curLine.append(float(line[4]))
                curLine.append(float(line[5]))
                curLine.append(float(line[6]))
                curLine.append(line[7])
                if line[7] == "benign":
                    datasetBenign.append(curLine)
                else:
                    datasetMalicious.append(curLine)
    
        # 交叉验证分割数据集
        K = 5
        kf = KFold(n_splits=K)
        benignKFTrain = []; benignKFTest = []
        for train,test in kf.split(datasetBenign):
            benignKFTrain.append(train)
            benignKFTest.append(test)
        maliciousKFTrain=[]; maliciousKFTest=[]
        for train,test in kf.split(datasetMalicious):
            maliciousKFTrain.append(train)
            maliciousKFTest.append(test)
        for i in range(K):
            print "========================  "+ str(i)+ "  ========================"
            print benignKFTrain[i], benignKFTest[i]
            print maliciousKFTrain[i],maliciousKFTest[i]
            writeInFile(benignKFTrain[i], benignKFTest[i], maliciousKFTrain[i], maliciousKFTest[i], i, datasetBenign,
                        datasetMalicious)
    
        datasetFile.close()
    
    
    if __name__ == "__main__":
        
        getKFoldDataSet(r"E:\hadoopExperimentResult\5KFold\AllDataSetIIR10\dataset\ImbalancedAllTraffic-10.csv")
    

    END

    展开全文
  • 在一个数据集中随机选出80%的记录作为训练数据集,训练得到相应的数学模型之后,将剩余的20%的记录作为验证,测试模型的准确性。原有数据集形式: 1::1193::5::978300760 1::661::3::978302109 1::914::3::...

    在一个数据集中随机选出80%的记录作为训练数据集,训练得到相应的数学模型之后,将剩余的20%的记录作为验证,测试模型的准确性。

    原有数据集形式:

    1::1193::5::978300760
    1::661::3::978302109
    1::914::3::978301968
    1::3408::4::978300275
    1::2355::5::978824291
    1::1197::3::978302268
    1::1287::5::978302039
    1::2804::5::978300719
    1::594::4::978302268
    1::919::4::978301368


    其中[0]-[3]分别代表不同的特征
    处理后得到的数据集

    3418 869 4 967398834
    1545 1073 3 974744490
    2851 2572 5 972506781
    2068 1198 3 974658346
    1031 3633 4 974999133
    5555 1073 3 959550355
    587 3566 1 975946900
    1125 3301 2 988697984
    4091 1772 1 965425356
    2096 3114 5 974653564
    5888 1220 5 957480240
    710 93 2 975570015


    python代码如下:

    import random
    
    
    def replaced(filename):
        new_content=[];
        readfile=open(filename)
        lines=readfile.readlines()
        for line in lines:
    
            new_line=line.strip().replace("::","\t")
            '''
            contents=line.split("::")
            new_line=contents[0].strip()+"\t"+contents[1].strip()+"\t"+contents[2].strip()+"\t"+contents[3].strip()
            '''
            new_content.append(new_line)
            #print contents
        #print new_content
        readfile.close()
        writefile=open(filename.strip(".csv")+"_replaced.csv",'wb')
        for i in range(len(new_content)):
            writefile.write(new_content[i]+'\n')
        writefile.close()
    
    def choose (filename):
        content_test=[]
        content_result=[]
        readfile=open(filename)
        lines=readfile.readlines()    
        sum_length=len(lines)
        count=sum_length
        print("The numbers of items in "+filename+" is "+str(sum_length))
    
        while count > 0:
    
            if len(content_test)<0.8*sum_length:
                i=random.randint(0,count-1)
                content_test.append(lines[i])
                del lines[i]
    
            count=count-1
        for j in range(len(lines)):
            content_result.append(lines[j])         
        readfile.close()
    
        writefile=open("content_test.csv",'wb')
        for i in range(len(content_test)):
            writefile.write(content_test[i])
    
        writefile.close()
    
        writefile=open("content_result.csv",'wb')
        for i in range(len(content_result)):
            writefile.write(content_result[i])
    
        writefile.close()    
    
    
    filename="ratings.csv"
    choose(filename)
    
    filename_01="content_test.csv"
    filename_02="content_result.csv"
    
    replaced(filename_01) 
    replaced(filename_02)    
    
    展开全文
  • KFold通过提供index来给你确定不同组的训练集以及测试的index,来构造交叉验证数据集。参数(n, n_folds=3, shuffle=False, random_state=None) n为总数 n_folds为分为多少个交叉验证集 shuffle为是否随机 random_...
  • 机器学习工具之交叉验证数据集自动划分 1. 使用方式: from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split (train_data,train_lable,test_size=0.3,...
  • (一)K折交叉验证 from sklearn.model_selection import KFold ## K折交叉验证 X = np.arange(36).reshape(18,2) kfold = KFold(n_splits = 9) ## kfold为KFolf类的一个对象 for a, b in kfold.split(X):...
  • whats the difference between train, validation and test set, in neural networks? Answer: The training and validation sets are used during training. ...for each training d
  • KFold交叉采样:将训练/测试数据集划分n_splits个互斥子集,每次只用其中一个子集当做测试集,剩下的(n_splits-1)作为训练集,进行n_splits次实验并得到n_splits个结果。 注:对于不能均等分的数据集,前n_samples...
  • 怎么用Q-Q图验证数据集的分布

    千次阅读 2018-11-08 19:21:15
    样本数据集在构建机器学习模型的过程中具有重要的作用,样本数据集包括训练集、验证集、测试集,其中训练集和验证集的作用是对学习模型进行参数择优,测试集是测试该模型的泛化能力。    正负样本数据集符合独立...
  • 将训练分为k份,取其中一份成为验证集,剩下成为训练,称为k折数据划分,使用得到的k个训练验证集,训练k个模型,k个模型做简单的模型融合,可提升模型稳定性、准确率。 数据介绍 数据共有四列,列名...
  • 训练验证集、测试以及交验验证的理解

    万次阅读 多人点赞 2018-08-11 08:16:36
    在人工智能机器学习中,很容易将“验证集”与“测试集”,“交叉验证”混淆。 一、三者的区别 训练集(train set) —— 用于模型拟合的数据样本。... 在神经网络中, 我们用验证数据集去寻找最优的网络深度(nu...
  • 将自己的数据集划分为py-faster-rcnn所需的集(训练集、验证集、训练验证集、测试集),读取xml文件生成对应的txt文件。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 386,775
精华内容 154,710
关键字:

验证数据集