您当前的位置:首页 > IT编程 > 数据集
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch |

解决机器学习中小数据集问题

51自学网 2020-12-10 08:04:40
  数据集

如何解决机器学习中小数据集问题?

 

一般的机器学习算法和工具都集中在“大数据”和具有大量数据集的场景中,一般机器学习从业者在大数据集使用这些算法和工具有往往有很好的直觉,如权衡模型的稳定性,灵活性,欠拟合与过拟合。但是工作中我们有时候会面临一个需要用机器学习解决的问题,但是数据集比较有限,一般的算法处理起来比较棘手。

小数据集带来的问题

  • 模型容易过拟合。模型不仅仅容易在训练集(training data)上出现过拟合的问题,而且也可能在验证集上出现过拟合问题,最终造成模型的稳定性降低
  • 异常值难以避免。异常值可能出现在特征里,也可能出现在响应变量中,对这些异常值进行处理的成本很高;与此同时异常值也可能导致训练样本和测试样本数据分布(data distribution)不一致,降低模型稳定性。
  • 难以进行模型优化。最终造成模型稳定性降低。
  • 数据不平衡。

如何解决小数据集问题

  • 数据角度:
    • 降低数据不平衡影响。可以选择过度抽样占比较少类别的数据,使得较少类别和较多类别的数据在训练集中更加平衡
    • 异常值处理。对于小数据集,噪声和异常值影响往往很大。在建模之前仔细清理数据有助于我们获取合理的模型,常见的检测异常值模型方法有OneClassSVM,Clustering methods或者Gaussian Anomaly detection。如果条件不允许,也可以尝试专们针对异常值而设计的模型,例如分位数回归(quantile regression)
    • 主动选择数据集特征。尝试使用领域专业知识进行特征选择或一处,过多特征容易造成过度拟合以及模型不稳定问题。
    • 汇集更多相关数据,权衡定制模型(personalized model)还是一般使用模型(general use model)。思考一下我们需要解决的问题,我们是否为特定"地区"建模?如果一个"地区"的模型相关的数据较少,不妨尝试使用所有“地区”的模型,并根据问题重要性来加权感兴趣的“地区”。基于此,模型也可以从其他"地区" 学习到对于感兴趣”地区“有用的信息。
  • 模型角度:
    • 引入传统统计工具。统计学的一个目标是在无法使用全部数据的情形下,用少量的数据得出结论。常见的统计学工具有:统计检验(statistical test),参数模型(parametric model),自助法(bootstrap)
    • 选用简单模型。模型的选择可以看成一个数据对模型投票的过程。在某种程度上,我们使用的每个样本都可以对所有不适合的模型进行投票,或者对适合的模型进行投票。当我们拥有大量数据时,我们可以有效地探索大量模型,最终通过数据投票找到一个合适的模型。而我们没有大量数据时,我们需要排除复杂的模型,例如那些处理非线性(non-linearity)或交互特征(interaction terms)。这也意味着模型不会有太多自由度,即太多的权重(weights)或参数(parameters) 等。即使我们在模型中增加这些降低模型自由度的特征,小样本本身也无法检测出这些假设/特征是否真正起了作用。相反,如果我们通过限制这些复杂假设,减少模型搜索空间,模型反而更加稳定。
    • 考虑使用模型平均。模型平均具有与正则化类似的效果,即它减少了方差并增强了模型泛化能力。这是一种通用技术,可以用于任何类型的模型,非常不同的模型一系列模型。缺点是可能得到了大量模型,这些大量的模型很难评估或者难以部署到实现系统(production systems)。c常见的模型平均形式有:Bagging和Bayesian模型平均
    • 正规化处理(regularization)。正则化可以限制模型拟合并降低有效自由度,与此同时并不会减少模型中的实际参数数量。 L1正则化产生的模型具有较少非零参数,类似于在模型中进行了特征选择。L2正则化产生的模型更加保守(接近零)并且实际上类似于假定了参数的零中心先验(zero-centered priors)
    • 降低数据不平衡。我们可以选择在建模过程中增加比例较少但是很重要类别数据的权重(weights),scikit learn 大部分模型都支持添加weights
    • 建模过程中避免过度使用验证集(validation data)。如果我们通过在验证集上的表现来选择不同的模型,这些在验证集上的结果,由于验证集过小,并不是对于模型的一个好的估计,测试结果也不一定稳健和显著。
    • 贝叶斯模型。可以考虑使用领域专业知识来构建合理的先验,从而构建贝叶斯模型。
    • 考虑非参模型。如KNN或者决策树模型。非参数模型性能取决于数据的分布。并且对于异常值也很稳健。缺点是受可用的数据集的影响很大。
    • 考虑预测置信区间或者分类概率分布。对于小数据集来说,这点尤为重要,因为特征空间中的某些区域变得比其他区域更少。使用置信区间(for regressor)或者分来概率(for classifier)分布而非点估计使模型使用者避免跳到许多错误的结论。

如何评估小数据集下模型的好坏?

  • 多样本测量。当我们在进行训练数据集,验证数据集以及测试数据集划分时,我们往往会设置一个random seeds 用于随机抽取样本。可以通过迭代随机种子(random seeds), 在不同的训练集反复上重新训练模型,在不同的验证集上重新选择超参数(hyper-parameter),在不同的测试集上(testing data)测试模型表现。 好的模型往往会在随机种子的迭代下,展现出稳定的超参数组合 以及在测试集上模型的分数差别比较小。

参考文献

【1】medium.com/rants-on-mac

【2】towardsdatascience.com/

 


使用一个小数据集
疟疾数据集
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1