交叉验证

非平衡数据处理方式与评估

自作多情 提交于 2020-01-31 22:42:17
解决这一问题的基本思路是让正负样本在训练过程中拥有相同的话语权,比如利用采样与加权等方法。为了方便起见,我们把数据集中样本较多的那一类称为“大众类”,样本较少的那一类称为“小众类”。 解决方式分为: 一、相关方法总结 1、采样 采样方法是通过对训练集进行处理使其从不平衡的数据集变成平衡的数据集,在大部分情况下会对最终的结果带来提升。 采样分为上采样(Oversampling,过采样)和下采样(Undersampling, 欠采样),上采样是把小种类复制多份,下采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。 随机采样最大的优点是简单,但缺点也很明显。上采样后的数据集中会反复出现一些样本,训练出来的模型会有一定的过拟合;而下采样的缺点显而易见,那就是最终的训练集丢失了数据,模型只学到了总体模式的一部分。 上采样会把小众样本复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效。 ——这一方式会加重过拟合! 因为下采样会丢失信息,如何减少信息的损失呢? 第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器

机器学习算法中的blending和stacking到底有什么区别

大憨熊 提交于 2020-01-31 11:15:49
机器学习算法中的blending和stacking到底有什么区别 关于blending和stacking的区别很多人不是很清楚,一些文章也没有讲清楚甚至有一些错误。blending较stacking的主要区别在于,blending选取特定比例的数据作为验证集(比如5%,20%等等),其余作为训练集,而stacking使用交叉验证,分别将不同的部分数据作为验证集和训练集,这意味着: blending每次只训练一个模型,而stacking训练模型数和交叉验证折数相关; blending训练时训练集和验证集是确定不变的,stacking则是通过交叉验证使得所有数据都做过验证集。 来源: CSDN 作者: L___yh 链接: https://blog.csdn.net/qq_31370935/article/details/104118796

PythonML-Day02: k-近邻、朴素贝叶斯、决策树、随机森林、交叉验证、网格搜索

核能气质少年 提交于 2020-01-30 20:41:55
ML-Day02: k-近邻、朴素贝叶斯、决策树、随机森林、交叉验证、网格搜索 1.数据分类 离散型数据:可以列举出 连续型数据:在区间内可任意划分,不可一一列举 2.机器学习算法分类 监督学习(预测):有特征值和目标值,有标准答案 分类[离散]:k近邻、贝叶斯、决策树与随机森林、逻辑回归、神经网络 回归[连续]:线性回归、岭回归 非监督学习: 只有特征值,没有保准答案 聚类:k-means 3.机器学习开发流程 - 原始数据: 公司本身有数据/ 合作数据/ 购买数据/ - 明确公司要做什么: 建立模型,是分类还是回归? - 数据基本的处理: pd 去处理数据(缺失值,合并表等等) - 特征工程:特征抽取/ 归一化/ 标准化/ 特征选择/ 主成分分析 - 找对应的算法去生产模型: 模型 = 算法 + 数据 - 模型的评估: 判定效果 - 评估优秀,上线使用,进行数据预测 - 评估失败,特征工程是否有问题、调参数、换算法等 4.划分数据集 - 训练集 75% - 用于训练,构建模型 - 测试集 25% - 用于检测模型,评估模型是否有效 - sklearn.model_selection.train_test_split - li = load_iris() # 注意返回值的顺序 # 训练特征值x_train # 测试特征值x_test # 训练目标值y_train # 测试目标值y

Keras基础自学三(交叉验证)

拟墨画扇 提交于 2020-01-30 03:52:20
from keras.models import Sequential from keras.layers import Dense import numpy as np from sklearn.model_selection import StratifiedKFold seed = 7# 设定随机数种子 np.random.seed(seed) dataset = np.loadtxt('D:\example\Keras\pima-indians-diabetes.csv', delimiter=',')# 导入数据 # 分割输入x和输出Y x = dataset[:, 0 : 8]#取二维数组中第1(m)维到7维(第n-1维)的所有数据,相当于取第1(m)列到第七(n-1)列的所有数据 yTrain = dataset[:, 8]#取二维数组中第9维的所有数据,相当于取第9列的所有数据 kfold = StratifiedKFold(n_splits=10, random_state=seed, shuffle=True) cvscores = [] for train, validation in kfold.split(x, yTrain): model = Sequential() # 创建模型 model.add(Dense(12, input_dim=8,

从零学习pytorch 第1.5课 训练集、验证集和测试集的作用

二次信任 提交于 2020-01-28 08:56:45
经验误差与过拟合 关键词: 错误率(error rate),精度(accuracy) 。 错误率好理解,就是m个样本中,a个样本分类错误,则错误率E = a/m 。 精度 就是 1-E。 其实很简单,但是为什么我还要提一提呢,因为机器学习里还有很多相关名词,例如:准确率,召回率,精确度等等,所以希望大家能清楚认识。 关键词: 经验误差(empirical error) 。 在训练集上,预测输出与样本的真实输出之间的差异(差异!)称为经验误差或训练误差。 关键词: 泛化误差(generalization) 。 在新样本上的误差称为泛化误差。 关键词: 过拟合(overfitting) 。 刚接触机器学习时候,就碰到过拟合这个很抽象的词, 当时是说的曲线拟合 。曲线拟合其实就是一个过程。该过程是通过实际曲线上的一些样本点(成为训练样本),经过一个模型训练,得到一条预测曲线。(敲黑板:拟合就是一个过程)。那么过拟合就是,拟合过头了,预测曲线非常好的适合训练样本,然而对实际曲线的其他样本不太适合。 推广一下到分类器(模型)上就是,训练好的分类器对训练样本很好的分类,但是对测试样本的分类结果很糟糕。 有过拟合当然有欠拟合啦,欠拟合可以认为是该分类器学习能力太差,连在训练样本上都没有很好的分类,更不要说在测试样本上了。 评估方法 关键词: 留出法(hold-out) 。

机器学习- Sklearn (交叉验证和Pipeline)

别说谁变了你拦得住时间么 提交于 2020-01-26 21:06:04
前面一节咱们已经介绍了决策树的原理已经在sklearn中的应用。那么这里还有两个数据处理和sklearn应用中的小知识点咱们还没有讲,但是在实践中却会经常要用到的,那就是交叉验证cross_validation和Pipeline。cross_validation是保证了咱们的模型不受数据分布的影响,因为有些数据可能因为数据的分布很不平均,导致咱们训练的模型虽然在咱们的数据集里面的表现很好,但是在实际中却可能是不一样的情况,cross validation的作用是model checking,而不是model building,无论用哪种方式validation,只是验证根据这些数据训练训练出来的模型能不能用而已,可不可以用这些数据来训练模型而已。而pipeline主要是为了能将模型的训练更加格式化而已,也能规范代码的格式,以后所有的的模型从定义到验证的过程都格式化了。接下来咱们细细的来看看他们具体是个什么玩意儿。 Cross_validation 在解释交叉验证之前,我先上一个图,如下所示 看上面的图,咱们会将咱们的整个dataset分割五次,分别依次将其中的20%的部分作为validation dataset,80%的部分作为training dataset。咱们可以看出咱们会分别训练五个模型,然后分别将各自的validation dataset拿去验证,计算他们的score

参数调优

半世苍凉 提交于 2020-01-26 01:15:58
参考链接: 原理介绍:https://www.jianshu.com/p/55b9f2ea283b 随机森林参数调优:https://www.cnblogs.com/pinard/p/6160412.html https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html 调参其他方法:TPOT库 关于调参random state,叫做随机种子,可以保证每次数据集划分的结果是一样的 网格搜索:穷举所有参数,但是使用单一训练集,有偶然性 交叉验证:为排除训练集的影响,用交叉验证来减少偶然性 交叉验证和网格搜索结合,用来调整参数,叫做grid search with cross validation。sklearn设计了gridsearchcv类,实现了fit、predict、score等 from sklearn.model_selection import GridSearchCV #把要调整的参数以及其候选值 列出来; param_grid = {"gamma":[0.001,0.01,0.1,1,10,100], "C":[0.001,0.01,0.1,1,10,100]} print("Parameters:{}".format(param_grid))

sklearn 模型选择和评估

纵然是瞬间 提交于 2020-01-24 16:27:04
一、模型验证方法如下: 通过交叉验证得分:model_sleection.cross_val_score(estimator,X) 对每个输入数据点产生交叉验证估计:model_selection.cross_val_predict(estimator,X) 计算并绘制模型的学习率曲线:model_selection.learning_curve(estimator,X,y) 计算并绘制模型的验证曲线:model_selection.validation(estimator,...) 通过排序评估交叉验证的得分在重要性:model_selection.permutation_test_score(...) ①通过交叉验证得分:model_sleection.cross_val_score(estimator,X) import numpy as np from sklearn.model_selection import cross_val_score from sklearn import datasets,svm digits=datasets.load_digits() X=digits.data y=digits.target svc=svm.SVC(kernel='linear') C_s=np.logspace(-10,0,10) print("参数列表长度",len

cross_val_score 交叉验证与 K折交叉验证,嗯都是抄来的,自己作个参考

谁说胖子不能爱 提交于 2020-01-24 06:52:35
因为sklearn cross_val_score 交叉验证,这个函数没有洗牌功能,添加K 折交叉验证,可以用来选择模型,也可以用来选择特征 sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’) 这里的cv 可以用下面的kf 关于scoring 参数问题 如果两者都要求高,那就需要保证较高的F1 score 回归类(Regression)问题中 比较常用的是 'neg_mean_squared_error‘ 也就是 均方差回归损失 该统计参数是预测数据和原始数据对应点误差的平方和的均值 公式长这样,了解下就ok了 K折交叉验证: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的值

libsvm交叉验证与网格搜索(参数选择)

核能气质少年 提交于 2020-01-24 05:30:14
首先说交叉验证。 交叉验证(Cross validation)是一种评估统计分析、 机器学习 算法 对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题。 交叉验证一般要尽量满足: 1)训练集的比例要足够多,一般大于一半 2)训练集和 测试 集要均匀抽样 交叉验证主要分成以下几类: 1)Double cross-validation Double cross-validation也称2-fold cross-validation(2-CV),作法是将数据集分成两个相等大小的子集,进行两回合的分类器训练。在第一回合中,一个子集作为训练集,另一个作为测试集;在第二回合中,则将训练集与测试集对换后,再次训练分类器,而其中我们比较关心的是两次测试集的识别率。不过在实际中2-CV并不常用,主要原因是训练集样本数太少,通常不足以代表母体样本的分布,导致测试阶段识别率容易出现明显落差。此外,2-CV中子集的变异度大,往往无法达到「实验过程必须可以被复制」的要求。 2)k-folder cross-validation(k折交叉验证) K-fold cross-validation (k-CV)则是Double cross-validation的延伸,做法是将数据集分成k个子集,每个子集均做一次测试集,其余的作为训练集。k-CV交叉验证重复k次