交叉验证

DL--交叉验证

孤街浪徒 提交于 2020-01-24 01:48:00
Wikipedia: https://en.wikipedia.org/wiki/Cross-validation_(statistics) 交叉验证 (有时称为 旋转估计 [1]  [2]  [3] 或 样本外测试 )是各种类似的 模型验证 技术中的任何一种,用于评估 统计 分析的结果将如何推广到一个独立的数据集。它主要用于设置,其目的是预测,和一个想要估计如何 准确地 一个 预测模型 在实践中执行。在预测问题中,通常会给模型一个 已知数据的数据集 ( 训练数据集 )和一个 未知数据 的数据集(或 首先 测试的数据),然后针对该数据测试模型(称为 验证数据集 或 测试集 )。 [4]  [5] 交叉验证的目的是测试模型预测未用于估计其数据的新数据的能力,以发现诸如 过度拟合 或 选择偏差之类的问题 [6] ,并对如何进行建模提供深刻见解。该模型将推广到一个独立的数据集(例如,未知数据集,例如来自实际问题的数据集)。 一轮交叉验证涉及 分割 一个 样品 的 数据 到 互补 的子集,在一个子集执行所述分析(称为 训练集 ),以及验证在另一子集中的分析(称为 验证集合 或 测试集 )。为了减少 可变性 ,在大多数方法中,使用不同的分区执行多轮交叉验证,并将验证结果组合(例如取平均值)在各轮中,以估计模型的预测性能。 总之,交叉验证结合(平均

交叉验证概述

旧时模样 提交于 2020-01-22 20:42:43
交叉验证 交叉验证的理论是由 Seymour Geisser 所开始的。 它对于防范 testing hypotheses suggested by the data 是非常重要的, 特别是当后续的 样本 是危险、成本过高或不可能( uncomfortable science )去搜集。 交叉验证(Cross-validation):有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。 中文名 交叉验证 外文名 Cross validation 实 质 建模应用中 特 点 PCR 、PLS 回归建模中 目录 1 概念 2 基本思想 3 目的 4 常见的交叉验证形式 ▪ Holdout 验证 ▪ K-fold cross-validation ▪ 留一验证 交叉验证概念   这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。 交叉验证基本思想   交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set)

交叉验证

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-19 22:39:17
# knn的算法思想就是看离他最近的几个元组都是属于哪个类,把最多的作为他的类别 from sklearn import datasets from sklearn . model_selection import train_test_split from sklearn . neighbors import KNeighborsClassifier from sklearn . model_selection import cross_val_score import matplotlib . pyplot as plt iris = datasets . load_iris ( ) iris_X = iris . data iris_y = iris . target # train_d, test_d, train_tar, test_tar = train_test_split(iris_X, iris_y, test_size=0.2, random_state=5) # # 随机划分测试集和训练集 # # knn = KNeighborsClassifier(n_neighbors=5) # # 寻找离他最近的5个元组并确定每个类别占的比例 # knn.fit(train_d, train_tar) # # # 用训练好的函数预测 # # print('R^2:'

监督学习算法1: K-近邻(KNN)

自古美人都是妖i 提交于 2020-01-18 05:28:58
先解释几个概念 机器学习主要分为:监督学习和无监督学习。 · 监督学习: 从已知类别的数据集中学习出一个函数,这个函数可以对新的数据集进行预测或分类,数据集包括特征值和目标值,即有标准答案;常见算法类型可以分为:分类和回归。 分类问题常见算法:K-近邻(KNN)、朴素贝叶斯、决策树、随机森林、逻辑回归、神经网络 回归常用于预测,比如房价,常见算法:线性回归、岭回归 · 无监督学习: 与监督学习的主要区别是,数据集中没有人为标注的目标值,即没有标准答案;常见算法有:聚类,生成对抗网络。 K-近邻算法 这是机器学习中最简单的一个算法,先看定义 定义:如果一个样本与特征空间中的K个样本 距离 最近,这K个样本中的大多数属于A类别,那么该样本也属于A类别。 通俗说就是通过你最近的K个邻居来求出你的类别; 比如现在要求你所在的区域,A在朝阳区,B在海淀区,C在海淀区,D在房山区,你与ABC的距离分别是:20,28,23,35;K值取3,那么这三个离你最近的邻居是A、B、C,这三个中有两个属于海淀区,按照K-近邻算法,你所在的区域就是海淀区;如果K取1,就是朝阳区; 由此也说明了K近邻算法的结果很大程度上受K取值的影响,通常K值取不大于20的整数。 K-近邻中的距离如何计算? 这里的距离一般使用欧式距离,公式如下: 比如有两个样本:A (a1,a2,a3) ,B (b1,b2,b3)

机器学习:KNN

不羁的心 提交于 2020-01-18 04:38:33
KNN:K-nearst neighbors 简介: k-近邻算法采用测量不同特征值之间的距离来进行分类,简而言之为: 人以类聚,物以群分 KNN既可以应用于分类中,也可用于回归中;在分类的预测是,一般采用 多数表决法 ;在做回归预测时,一般采用 平均值法 KNN三要素: 在KNN的算法中,主要考虑以下三个要素: K值的选择 :表示样本可由距离其最近的K个邻居来代替;可由 交叉验证 来选择最适合K值 当K值较小的时候,表示使用较小领域的样本进行预测,因此会导致模型更加复杂,导致过拟合; 当K值较大的时候,表示使用较大领域的样本进行预测,训练误差会增大,模型会简化,容易导致欠拟合 距离的度量: 一般使用欧式距离; 欧式距离:若 \(a(a_1,a_2,a_3)\) , \(b(b_1,b_2,b_3)\) ,则两者的欧式距离为: \[ \sqrt{(a1-b1)^2+(a2-b2)^2+(a2-b2)^2} \] 决策规则: 在 分类模型 中,主要使用多数表决或者加权多数表决法;在 回归模型 中,主要使用平均值法或者加权平均值法 多数表决/均值法:每个邻近样本权重相同; 加权多数表决/加权平均值法:每个邻近样本权重不同;一般情况下,采用权重和距离成反比的方式进行计算 KNN算法实现: 蛮力实现(brute) : 计算预测样本到所有训练集样本的距离

【学习笔记】模型的选择与调优

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-18 04:37:50
交叉验证 目的:为了让被评估的模型更加准确可信。 交叉验证:将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。 超参数搜索-网格搜索 通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。 超参数搜索-网格搜索API sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None):对估计器的指定参数值进行详尽搜索 参数: estimator:估计器对象 param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]} cv:指定几折交叉验证 方法: fit:输入训练数据 score:准确率 属性: best_score_:在交叉验证中测试的最好结果 best_estimator_:最好的参数模型 cv_results_:每次交叉验证后的测试集准确率结果和训练集准确率结果 将 【学习笔记】分类算法-k近邻算法 中的“预测用户签到位置”改成网格搜索 from sklearn.model

使用sklearn进行交叉验证

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-10 01:19:13
深度学习中确实用不到CV。 所以学习CV的目的还是要知道CV能做什么,适用于哪些场景(主要用于数据集小,容易过拟合) 。 CV目的:model selection 可以参考这篇回答:https://stats.stackexchange.com/questions/52274/how-to-choose-a-predictive-model-after-k-fold-cross-validation Fig 1 工作流图 CV常用方法: 高级API (1) cross_val_score 使用交叉验证最简单的方法是在估计器和数据集上调用 cross_val_score 辅助函数。 这个函数基本上是最精简的接口了! sklearn.model_selection. cross_val_score ( estimator , X , y=None , groups=None , scoring=None , cv=None , n_jobs=None , verbose=0 , fit_params=None , pre_dispatch='2*n_jobs' , error_score=nan ) 重点关注以下三个参数: groups:组CV。 scoring:evaluation method。 关于scoring参数列表,参考该文章:https://blog.csdn.net

2.随机森林Random Forest

前提是你 提交于 2020-01-01 02:39:43
今天学了菜菜第二章,随机森林。顺便回顾了昨天学的决策树。 具体学到了什么 总结到下面用代码和注释的形式给出,相当于给自己理清楚思路。 划分训练集和测试集的代码: from sklearn.model_selection import train_test_split Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3) # 划分为训练集和测试集的代码 建随机森林的代码(三行): rfc=RandomForestClassifier(random_state=0) rfc=rfc.fit(Xtrain,Ytrain) score_r=rfc.score(Xtest,Ytest) # 建随机森林来分析的代码 建决策树的代码(三行): clf=DecisionTreeClassifier(random_state=0) clf=clf.fit(Xtrain,Ytrain) score_c=clf.score(Xtest,Ytest) # 建决策树来分析的代码 交叉验证法(也叫k折交叉验证法)的用法: rfc_l = [] for i in range(10): rfc = RandomForestClassifier(n_estimators=25) rfc_s =

交叉验证

好久不见. 提交于 2019-12-29 22:44:11
train_test_split 在分类问题中,我们通常通过对训练集进行train_test_split,划分成train 和test 两部分,其中train用来训练模型,test用来评估模型,模型通过fit方法从train数据集中学习,然后调用score方法在test集上进行评估,打分;从分数上我们可以知道 模型当前的训练水平如何。 然而,这种方式存:只进行了一次划分,数据结果具有偶然性,如果在某次划分中,训练集里全是容易学习的数据,测试集里全是复杂的数据,这样就会导致最终的结果不尽如意;反之,亦是如此。 因为没有测试集,所以先把训练集抽出来一些做测试集,一些做训练集,这是一次性的行为,接着,对我们的训练接进行cv折的交叉验证,得到分数, 选择分数最高的参数,然后最后在在测试集上看分数 from sklearn import datasets #自带数据集 from sklearn.model_selection import train_test_split,cross_val_score #划分数据 交叉验证 from sklearn.neighbors import KNeighborsClassifier #一个简单的模型,只有K一个参数,类似K-means import matplotlib.pyplot as plt iris = datasets.load_iris

分类评价模型-准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure)

不想你离开。 提交于 2019-12-28 03:08:15
分类评价模型 混淆矩阵 模型评价标准: TP: 将正类预测为正类数 40 FN: 将正类预测为负类数 20 FP: 将负类预测为正类数 10 TN: 将负类预测为负类数 30 准确率(accuracy) = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN) = 70% 精确率(precision) = TP/(TP+FP) =40)/(40+10)= 80% (40)/(40+10)=40/50 召回率(recall) = TP/(TP+FN) = 40/(40+20)=2/3 召回率与准确率成反比 准确率(正确率)=所有预测正确的样本/总的样本 (TP+TN)/总 精确率= 将正类预测为正类 / 所有预测为正类 TP/(TP+FP) 召回率 = 将正类预测为正类 / 所有正真的正类 TP/(TP+FN) F值 = 精确率 * 召回率 * 2 / ( 精确率 + 召回率) (F 值即为精确率和召回率的调和平均值) #################################################### 举例: 所以推荐给你的猴子到底靠不靠谱呢,看看最终结果。 F=(2\times0.67\times0.4)\div(0.67+0.4)=0.5 结果就表明,推荐给你的猴子里,有50%是你想要的公猴子 F值(F-Measure)、AUC、ROC的理解