机器学习--k折交叉验证和非负矩阵分解

水门 水门     2022-09-23     614

关键词:

1、交叉验证

交叉验证(Cross validation),交叉验证用于防止模型过于复杂而引起的过拟合.有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。

于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。

交叉验证是一种评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力(generalize)。
交叉验证一般要尽量满足:

1)训练集的比例要足够多,一般大于一半
2)训练集和测试集要均匀抽样

 

将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。
在matlab中,可以利用:
indices=crossvalind('Kfold',x,k);
来实现随机分包的操作,其中x为一个N维列向量(N为数据集A的元素个数,与x具体内容无关,只需要能够表示数据集的规模),k为要分成的包的总个数,输出的结果indices是一个N维列向量,每个元素对应的值为该单元所属的包的编号(即该列向量中元素是1~k的整随机数),利用这个向量即可通过循环控制来对数据集进行划分。例:
[M,N]=size(data);//数据集为一个M*N的矩阵,其中每一行代表一个样本
    indices=crossvalind('Kfold',data(1:M,N),10);//进行随机分包
    for k=1:10//交叉验证k=10,10个包轮流作为测试集
        test = (indices == k); //获得test集元素在数据集中对应的单元编号
        train = ~test;//train集元素的编号为非test元素的编号
        train_data=data(train,:);//从数据集中划分出train样本的数据
 train_target=target(:,train);//获得样本集的测试目标,在本例中是实际分类情况
        test_data=data(test,:);//test样本集
 test_target=target(:,test);
[HammingLoss(1,k),RankingLoss(1,k),OneError(1,k),Coverage(1,k),Average_Precision(1,k),Outputs,Pre_Labels.MLKNN]=MLKNN_algorithm(train_data,train_target,test_data,test_target);//要验证的算法
 end
//上述结果为输出算法MLKNN的几个验证指标及最后一轮验证的输出和结果矩阵,每个指标都是一个k元素的行向量

 

交叉验证的目的:假设分类器或模型有一个或多个未知的参数,并且设这个训练器(模型)与已有样本数据集(训练数据集)匹配。训练的过程是指优化模型的参数,以使得分类器或模型能够尽可能的与训练数据集匹配。我们在同一数据集总体中,取一个独立的测试数据集。

当用于模型训练的数据量越大时,训练出来的模型通常效果会越好。所以训练集和测试集的划分意味着我们无法充分利用我们手头已有的数据,所以得到的模型效果也会受到一定的影响。

K折交叉验证能充分利用现有的数据。

K倍交叉验证(K>=2)。将样本数据集随机划分为K个子集(一般是均分),将一个子集数据作为测试集,其余的K-1组子集作为训练集;

将K个子集轮流作为测试集,重复上述过程,这样得到了K个分类器或模型,并利用测试集得到了K个分类器或模型的分类准确率。

用K个分类准确率的平均值作为分类器或模型的性能指标。10-倍交叉证实是比较常用的。
优点:每一个样本数据都即被用作训练数据,也被用作测试数据。避免的过度学习和欠学习状态的发生,得到的结果比较具有说服力。

2、

非负矩阵分解(NMF,Non-negative matrix factorization)
NMF的基本思想
  NMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,使得满足 ,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。
NMF问题描述
传统的NMF问题可以描述如下

 

 

论文作者实际的解释是:

  • 非负性会引发稀疏
  • 非负性会使计算过程进入部分分解

 

机器学习100天(二十九):029k折交叉验证

机器学习100天,今天讲的是:K折交叉验证!《机器学习100天》完整目录:目录机器学习中,我们常会遇到一个问题,就是超参数的选择,超参数就是机器学习算法中的调优参数,比如上一节K近邻算法中的K值。K折交叉验证就是... 查看详情

机器学习100天(二十九):029k折交叉验证

机器学习100天,今天讲的是:K折交叉验证!《机器学习100天》完整目录:目录机器学习中,我们常会遇到一个问题,就是超参数的选择,超参数就是机器学习算法中的调优参数,比如上一节K近邻算法中的K值。K折交叉验证就是... 查看详情

了解机器学习过程和 K 折交叉验证

】了解机器学习过程和K折交叉验证【英文标题】:UnderstandingmachinelearningprocessandKfoldcrossvalidation【发布时间】:2019-12-0218:24:04【问题描述】:我是机器学习的初学者,我一直在尝试更详细地了解这个过程。对于任何机器学习场景... 查看详情

机器学习笔记:非负矩阵分解问题nmf(代码片段)

1NMF介绍        NMF(Non-negativematrixfactorization),即对于任意给定的一个非负矩阵V,其能够寻找到一个非负矩阵W和一个非负矩阵H,满足条件V=W*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。       ... 查看详情

验证集上的验证过程 - 不是 k 折交叉验证

...【发布时间】:2019-10-0918:14:31【问题描述】:我是python和机器学习的新手,我很难理解验证步骤,我也想就当我不想使用k-folds交叉验证时该怎么做提出建议,而只是使用验证集。我一直在阅读,似乎无法正确掌握k折交叉验证:... 查看详情

机器学习实验方法与原理

k折验证中k值对偏差和方差的影响?总共n个数据,假设为2,每次训练集大小为n/2,每次训练的数据量会偏小,取平均值后,由于每次训练的数据量比较小,最终学习输出的模型会不能很好的代表样本的分布(欠拟合),换句话... 查看详情

机器学习3(代码片段)

任务4  1、KNN的决策边界以及K的影响  决策边界分成两大类,分别是线性决策边界和非线性决策边界。拥有线性决策边界的模型我们称为线性模型,反之非线性模型. 随着K值的增加,决策边界确实会变得更加平... 查看详情

机器学习中具有 10 倍交叉验证的代码

】机器学习中具有10倍交叉验证的代码【英文标题】:Codewith10foldcrossvalidationinmachinelearning【发布时间】:2016-06-0605:27:20【问题描述】:我刚刚开始使用机器学习。我尝试使用C5.0模型进行10折交叉验证。我要求代码返回kappa值。fold... 查看详情

机器学习模型评估选择与验证(代码片段)

模型评估、选择与验证1.为什么要有训练集与测试集?2.欠拟合与过拟合3.偏差与方差4.验证集与交叉验证4.1k折交叉验证4.2集成学习4.3自助法5.衡量回归的性能指标5.1MSE5.2RMSE5.3MAE5.4R-Squared6.准确度的陷阱与混淆矩阵6.1准确度的... 查看详情

机器学习:常见交叉验证(cross-validation)(代码片段)

交叉验证交叉验证(cross-validation)交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏... 查看详情

spark2.0机器学习系列之2:基于pipeline交叉验证parammap的模型选择和超参数调优

Spark中的CrossValidationSpark中采用是k折交叉验证(k-foldcrossvalidation)。举个例子,例如10折交叉验证(10-foldcrossvalidation),将数据集分成10份,轮流将其中9份做训练1份做验证,10次的结果的均值作为对算法精度的估计。10折交叉检验最... 查看详情

模型选择的方法:aic,k-折交叉验证

...型精度,但是以提高模型复杂度为代价的,同时带来一个机器学习中非常普遍的问题——过拟合。所以,模型选择问题在模型复杂度与模型对数据集描述能力(即似然函数)之间寻求最佳平衡。人们提出许多信息准则,通过加入... 查看详情

在 MLPClassification Python 中实现 K 折交叉验证

...Python【发布时间】:2017-11-2418:38:33【问题描述】:我正在学习如何使用scikit-learn开发反向传播神经网络。我仍然对如何在我的神经网络中实现k折交叉验证感到困惑。我希望你们能帮助我。我的代码如下:importnumpyasnpf 查看详情

机器学习100天(三十):030k近邻分类算法-k值的选择(代码片段)

机器学习100天,今天讲的是:K近邻分类算法-K值的选择。《机器学习100天》完整目录:目录上一节我们讲了K折交叉验证的理论,下面我们将K折交叉验证算法应用到K近邻分类算法中,用来选择最合适的超参数K值。数据集iris_data.c... 查看详情

机器学习100天(三十):030k近邻分类算法-k值的选择(代码片段)

机器学习100天,今天讲的是:K近邻分类算法-K值的选择。《机器学习100天》完整目录:目录上一节我们讲了K折交叉验证的理论,下面我们将K折交叉验证算法应用到K近邻分类算法中,用来选择最合适的超参数K值。数据集iris_data.c... 查看详情

机器学习工作流程与模型调优

上一讲中主要描述了机器学习特征工程的基本流程,其内容在这里:机器学习(一)特征工程的基本流程本次主要说明如下:  1)数据处理:此部分已经在上一节中详细讨论  2)特征工程:此部分已经在上一节中详细讨论... 查看详情

K折交叉验证实现python

】K折交叉验证实现python【英文标题】:K-foldcrossvalidationimplementationpython【发布时间】:2016-12-1512:12:01【问题描述】:我正在尝试在python中实现k折交叉验证算法。我知道SKLearn提供了一个实现,但仍然......这是我现在的代码。fromskl... 查看详情

10折交叉验证的混淆矩阵

】10折交叉验证的混淆矩阵【英文标题】:Confusionmatrixof10foldcrossvalidation【发布时间】:2014-04-1917:23:35【问题描述】:我正在尝试执行10折交叉验证,以在matlab中使用神经网络分析我的字符识别项目的结果。我知道如何计算每个折... 查看详情