交叉验证

模型评估方法

自作多情 提交于 2019-12-27 10:48:59
1. 前言 模型的评估方法主要是针对有监督学习的。 2. 数据集划分方法 我们在拿到数据的时候,数据的表现形式会呈现多种多样性,我们首先需要做的是把数据格式化,把数据处理成计算机可以认识的结构。处理数据的过程叫做特征工程,特征工程是一个在机器学习的过程中,非常重要的一个过程,特征工程做的好坏,会直接影响到最后的模型准确度的一个上限。特征工程我后面会详细介绍,今天介绍的是在特征工程处理完后的,数据集的划分和性能的度量方式。 2.1 留出法 留出法就是把数据集切分成训练集和测试集,留出法最重要的一点是要保证训练集和测试集的数据分布要相同,避免因为数据划分不均匀而引入的额外的偏差。 从样本采样的角度来看待数据集的划分过程,则保留类别比例的采样方式叫做“分层采样” 。为了让留出法能够有比较好的效果一般会重复多次进行平均。 2.2 交叉验证 交叉验证一般是在训练集的基础上进行的。因为测试集是最后用来评价模型的好坏的,不能让模型提前看到测试集。 交叉验证有一个超参数K。K代表的意思是从训练集D中,分层采样的方式得到K个互斥的 \(D_i\) (K折交叉验证)。然后通过K-1个子数据集的并集进行训练,用剩下的一个子数据集进行验证。就可以得到K个模型,最后返回K个模型的平均值。 过程如下图所示: 交叉验证中有一个特殊的方法交“留一法”,它的意思是如果训练集中有m个数据,那我就进行“m折交叉验证”

【机器学习 模型调参】GridSearchCV模型调参利器

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-26 14:44:46
导入模块sklearn.model_selection from sklearn . model_selection import GridSearchCV GridSearchCV 称为网格搜索交叉验证调参,它通过遍历传入的参数的所有排列组合,通过交叉验证的方式,返回所有参数组合下的评价指标得分,GridSearchCV 函数的参数详细解释如下: class sklearn . model_selection . GridSearchCV(estimator,param_grid,scoring = None,n_jobs = None,iid = 'deprecated' ,refit = True,cv = None,verbose = 0 ,pre_dispatch = '2 * n_jobs' ,error_score = nan,return_train_score = False ) GridSearchCV官方说明 参数: estimator:scikit - learn 库里的算法模型; param_grid:需要搜索调参的参数字典; scoring:评价指标,可以是 auc , rmse,logloss等; n_jobs:并行计算线程个数,可以设置为 - 1 ,这样可以充分使用机器的所有处理器,并行数量越多,有利于缩短调参时间; iid:如果设置为True

【机器学习】(二)模型评估与选择

↘锁芯ラ 提交于 2019-12-26 09:30:05
误差与过拟合 误差 假设m个样本中有a个样本分类错误 错误率(error rate):分类错误的样本数占样本总数的比例,E=a/m 精度(accuracy):分类正确的样本数占样本总数的比例,1-a/m 精度=1-错误率 误差(error):学习器的实际预测输出与样本的真实输出之间的差异 学习器在训练集上的误差称为 训练误差 (training error)/ 经验误差 (empirical error) 学习器在新样本上的误差称为 泛化误差 (generalization error) 机器学习的目标是得到泛化误差小的学习器,但是实际能做的是努力使经验误差最小化 过拟合与欠拟合 当学习器把训练样本学得太好的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为 过拟合 (overfitting)。与过拟合相对的是 欠拟合 (underfitting),这是指对训练样本的一般性质尚未学好。 过拟合是机器学习中的 关键障碍 评估方法 通常,通过实验测试来对学习器的泛化误差进行评估。为此,需使用一个 测试集 (testing set)来测试学习器对新样本的判别能力,然后以测试集上的 测试误差 (testing error)作为泛化误差的近似。 通常我们假设测试样本也是从样本真实分布中独立同分布采样而得

交叉验证

主宰稳场 提交于 2019-12-25 22:58:47
一、sklearn.cross_validation.cross_val_score sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None,cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’) estimator:估计方法对象(分类器) X:数据特征(Features) y:数据标签(Labels) soring:调用方法(包括accuracy和mean_squared_error等等) cv:几折交叉验证 n_jobs:同时工作的cpu个数(-1代表全部) 二、sklearn.model_selection.KFold sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None) n_splits:表示划分几等份 shuffle:在每次划分时,是否进行洗牌 random_state:随机种子数 属性: ① get_n_splits(X=None, y=None, groups=None):获取参数n_splits的值 ② split(X, y=None, groups=None)

【ML-QA-0】模型评估

ⅰ亾dé卋堺 提交于 2019-12-23 04:20:01
没有测量,就没有科学 ——门捷列夫 原本之前的知识点总结里面没有太多关于模型评估的内容,QA这部分开始也没打算单独整理出来模型评估的部分。不过考虑到一个模型的评估指标是一个机器学习任务核心的部分,需要清楚各类机器学习任务的评估指标,那就汇总整理一下。 评估指标 评估方法 评估指标 机器学习的问题主要有分类、回归、聚类等等 当我们选择评估指标的时候,要考虑具体的任务目标,要考虑具体的数据样本。有的时候我们关注准确率,有时候关注精准率,有时候更关注召回,不同的指标结果评定不同的任务产出。 1、分类 1.1 准确率 Accuracy 准确率指的是分类正确的样本占总样本个数的比例: A c c u r a c y = N c o r r e c t N Accuracy=\frac{N_{correct}}{N} A c c u r a c y = N N c o r r e c t ​ ​ 其中 N c o r r e c t N_{correct} N c o r r e c t ​ 是分类正确的样本数, N是样本总数。 准确率是我们最常见最基本的评估指标,但是我们常见的机器学习任务中遇到的数据太多数情况下都是 正负样本不均衡 ,这个时候 A c c u r a c y Accuracy A c c u r a c y 就没有什么参考价值了。 比如一个数据样本中,正样本比例为99%

R语言第八讲 评估模型之交叉验证法分析案例

我是研究僧i 提交于 2019-12-19 01:21:51
题目 评估Auto数据集上拟合多个线性模型所产生的测试错误率。Auto数据集是存在与ISLR程序包中的一个摩托车相关数据的数据集,读者可自行下载ISLR程序包,并将Auto数据集加载。 相关资料 交叉验证 是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。 那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。 回到交叉验证,根据切分的方法不同,交叉验证分为下面三种: 第一种是简单交叉验证, 所谓的简单,是和其他交叉验证方法相对而言的。首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30

通过Python做葡萄酒成分与质量的关系分析并可视化--GBDT/随机森林特征选取

心不动则不痛 提交于 2019-12-15 19:01:32
葡萄酒成分与质量关系分析 -- 通过GBDT以及Random Forests进行特征选取 在UCI下载葡萄酒数据集,链接: https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/ 红酒有1599个样本,白葡萄酒有4898个样本,本文使用红酒的数据集,文件名为winequality-red.csv 数据预处理 先把需要使用的包给导入 import pandas as pd import numpy as np from sklearn . ensemble import GradientBoostingClassifier , RandomForestClassifier from sklearn . model_selection import train_test_split , cross_val_score from sklearn . preprocessing import StandardScaler import matplotlib . pyplot as plt 根据数据集和GBDT以及随机森林算法的特性,本文不做离群值探测,直接使用原始数据。把所有特征归为X,质量归为y,把数据八二分为训练集和测试集,再做一个标准化处理。 data = pd . read_csv (

莫烦Python神经网络技巧

杀马特。学长 韩版系。学妹 提交于 2019-12-15 05:15:28
一、验证神经网络 训练集70%,验证集30% 误差曲线,虽然后面误差逐步降低,但是类似于考试一样,考到90分容易,95分就很难呀。 准确度曲线,在分类问题直接看准确度曲线,在回归问题中,可以引用R2分数测量回归问题的精度,F1分数用来测量不均衡数据的精度。 正规化:很多时候模型会过拟合,过拟合类似于自负,就是把老师教的全会,出新的就不会了,解决过拟合可以通过L1\L2正规化,dropout方法。 过拟合时候一般公式y = Wx中W的值往往特别大或者特别小,那么原始的误差函数为cost = (预测值-真实值)平方, 为了不让W的值变化太大 ,L1在误差函数后面加上了abs(W),L2中误差函数后面是W的平方,。(这样误差函数加上这个平方不是会误差值更大吗???不是很明白) 想象随机产生类似于y = a +bx的点,但类似于噪声一样,那么y = WX中,x的次数越多,整条曲线的拟合效果越好,但是这样就会过拟合了,所以,我们也要考虑w的值。 上图中蓝圈上的误差值是一样的,黄色的同理,蓝圈的最里面的圆心误差值最小,那么 蓝黄的角点就是误差值最小(啥??) 要提到另外一点是, 使用 L1 的方法, 我们很可能得到的结果是只有 theta1 的特征被保留, 所以很多人也用 l1 正规化来挑选对结果贡献最大的重要特征. 但是 l1 的结并不是稳定的. 比如用批数据训练,

python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模和交叉验证

流过昼夜 提交于 2019-12-09 23:59:31
原文链接: http://tecdat.cn/?p=9326 在这篇文章中,我将使用python中的决策树(用于分类)。重点将放在基础知识和对最终决策树的理解上。 导入 因此,首先我们进行一些导入。 from __future__ import print_function import os import subprocess import pandas as pd import numpy as np from sklearn.tree import DecisionTreeClassifier, export_graphviz 数据 接下来,我们需要考虑一些数据。我将使用著名的iris数据集,该数据集可对各种不同的iris类型进行各种测量。pandas和sckit-learn都可以轻松导入这些数据,我将使用pandas编写一个从csv文件导入的函数。这样做的目的是演示如何将scikit-learn与pandas一起使用。因此,我们定义了一个获取iris数据的函数: def get_iris_data(): """Get the iris data, from local csv or pandas repo.""" if os.path.exists("iris.csv"): print("-- iris.csv found locally") df = pd.read

12.9总结

匆匆过客 提交于 2019-12-09 23:35:42
本周的工作主要是总结了下上次开会的内容,不太明白清楚的查找了相关内容。复习了pandas库,新接触了matplotlib数据可视化,画图功能。 还有继续看机器学习西瓜书的神经网络部分,比如: BP算法(基于梯度下降的算法,BP神经网络过拟合) RBF网络:第一步,确定神经元中心,随机采样,聚类方法 二用BP算法来确定参数连接权重和输出 ART网络: SOM网络: 级联相关网络: Elman网络: Boltzmann机: 无监督式训练 ································································································· 解决方法: 早停, 正则化:数据分为训练集(计算梯度、更新连接权和阈值)和验证集(估计误差) 若训练集误差降低但验证集误差升高停止,返回具有 最小验证集误差 的连接权和阈值 正则化:在误差目标函数中增加一个用于描述网络复杂度的部分:,用 交叉验证法 估计 交叉验证法: 就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。数据不是很充足的时候。 多时:我们一般随机的把数据分成三份