前言在工程中,有多种构建键值存储的方法,每种设计都对使用模式做出不同的假设。在统计建模中,有多种算法来构建分类器,每种算法都对数据集做出不同的假设。在处理少量数据时,尝试尽可能多的算法,并根据实验成本低选择最佳算法是合理的。然而,当我们遇到“大数据”时,我们需要提前对数据进行分析,然后据此设计建模流程。(例如预处理、建模、优化算法、评估、产品化)有很多算法,并且有几十种方法可以解决给定的建模问题。每个模型假设不同的东西,如何使用和验证哪些假设是合理的并不明显。在工业界,大多数从业者会选择他们最熟悉的建模算法,而不是选择最适合数据的算法。接下来分享一些我们经常忽略和出错的地方。感谢您的指正和评论!(注:标题是英文,感觉更接近机器学习算法的初衷)1.Takeforgrantedthedefaultlossfunction损失函数是一个机器学习算法的核心.损失函数决定了最终优化后得到的参数和模型本身。在不同的业务场景下,优化的目标应该是不同的。许多从业者使用默认损失函数(例如:均方误差)训练和选择最佳模型。在实践中,现成的损失函数很少符合商业目标。以欺诈检测为例。在尝试检测欺诈交易时,业务目标是尽量减少欺诈损失。二元分类器的现有损失函数还可以测量误报和漏报。为了与业务目标保持一致,损失函数不仅要惩罚假阴性多于假阳性,还要惩罚每个假阴性与美元金额的比率。此外,用于欺诈检测的数据集通常包含高度不平衡的标签。在这种情况下,有偏差的损失函数对极少数情况有利(例如:通过上/下采样)。2.Useplainlinearmodelsfornon-linearinteraction(purelinearmodelsusedfornonlinearinteraction)这也是一个常见的错误。在构建二分类问题时,很多人会直接想到Logistic回归。原因很简单,因为逻辑回归高效且易于实现。然而,经常被忽视的是,逻辑回归本身是一个线性模型,非线性交互之间的预测需要手动编码。然而,真实数据是否线性可分,我们不得而知。由于在高维数据下判断数据是否线性可分几乎是一个不切实际的任务,个人经验往往是先用逻辑回归做分类,但同时也用决策树,或者非SVM等线性模型来处理这个问题。对数据进行重新分类和比较。回到欺诈检测,高阶交互特征,例如:“账单地址=送货地址和交易金额<50美元”需要良好的模型性能。因此,人们应该青睐非线性模型,例如SVM内核或有利于高阶交互特征的基于树的分类。3.Forgetaboutoutliers(忽略异常值)异常值是一个非常有趣的东西,让人又爱又恨。根据上下文,它们要么值得特别关注,要么完全被忽略。以收入预测为例。如果观察到不寻常的收入激增,最好特别注意它们以找出导致激增的原因。但如果异常是由机械误差、测量误差或其他原因引起的,则最好在将数据反馈回建模算法之前过滤掉这些异常值。有些模型比其他模型对异常值更敏感。例如,AdaBoost可以将这些离群值视为“硬样本(Hard)”,并对离群值赋予更大的权重,而决策树可以简单地将每个离群值算作错误分类。如果数据集包含大量异常值,则重要的是要么使用稳健的模型算法来定位异常值,要么过滤掉异常值。注:引用别人的一段话。记得之前在StatisticsCapital看过一篇文章,对我启发很大,说我们都愿意直接舍弃异常值,却忘了异常值不是错误的值,也是真实情况的一种体现。我们之所以认为它不正常,只是因为我们的数据量不够大。文章还举了一个例子,说我们用计算机模拟一个高斯分布,也会模拟一些落在N个标准差之外的数据点,但是不能说这个是异常点,因为如果我们删掉这些points这不是高斯分布。因此,在很多情况下,异常值是不能丢掉的,还需要引起我们的注意和分析。但是我们还需要注意这个离群值是不是错误值。如果是错误值,这时候我们就应该想办法去除这些错误值,因为这些错误往往会影响到我们实际的模型效果。如果训练数据包含一些异常值,我们需要考虑模型的敏感性。例如,AdaBoost和Kmeans是对异常值敏感的机器学习模型。4.Usehighvariancemodelwhenn<