阅读更多

0顶
0踩

互联网
【编者按】在机器学习领域,每个给定的建模问题都存在几十种解法,每个模型又有难以简单判定是否合理的不同假设。在这种情况下,大多数从业人员倾向于挑选他们熟悉的建模算法,本文作者则认为,模型算法的假设并不一定适用于手头的数据;在追求模型最佳性能时,重要的是选择适合数据集(尤其是“大数据”)的模型算法。

以下为正文:

统计建模和工程开发很相似。

在工程开发中,人们有多种方法搭建一套键-值存储系统,每种设计针对使用模式有一套不同的假设。在统计建模中,也有很多算法来构造一个分类器,每种算法对数据也有各自的假设集合。

当处理少量数据时,因为实验成本很低,我们尽可能多的尝试各种算法,从而选出效果最优的算法。但提到“大数据”,提前分析数据,然后设计相应“管道”模型(预处理,建模,优化算法,评价,产品化)是事半功倍的。

正如在我以前的文章里提到,每个给定的建模问题都存在几十种解法。每个模型会提出不同的假设条件,我们也很难直观辨别哪些假设是合理的。在业界,大多数从业人员倾向于挑选他们熟悉的建模算法,而不是最适合数据集的那个。在这篇文章中,我将分享一些常见的认识误区(要避免的)。在今后的文章中再介绍一些最佳实践方法(应该做的)。
1.想当然地使用默认损失函数

很多从业者喜欢用默认的损失函数(比如平方误差)来训练和选择最优模型。事实上,默认的损失函数很少能满足我们的业务需求。拿诈 骗检测来说。当我们检测诈 骗交易时,我们的业务需求是尽量减少诈 骗带来的损失。然而现有二元分类器默认的损失函数对误报和漏报的危害一视同仁。对于我们的业务需求,损失函数不仅对漏报的惩罚要超过误报,对漏报的惩罚程度也要和诈 骗金额成比例。而且,诈 骗检测的训练数据集往往正负样本极度不均衡。在这种情况下,损失函数就要偏向于照顾稀少类(如通过升/降采样等)。

2.用普通线性模型处理非线性问题

当需要构建一个二元分类器时,很多人马上就想到用逻辑回归,因为它很简单。但是,他们忘记了逻辑回归是线性模型,非线性因素的交叉特征需要靠手工编码处理。回到刚才诈 骗检测的例子,要获得好的模型效果,就需要引入“帐单地址=送货地址 && 交易金额<$ 50”之类的高阶交叉特征。因此,在处理包含交叉特征的问题上我们应该尽可能选择非线性模型,比如有核函数的SVM,或者基于树的分类器。

3.忽视异常值

异常值很有意思。根据上下文情况,它们要么需要被特别处理,要么应该被完全忽略。就拿收入预测来说。如果观察到收入有异常尖峰,我们可能要加倍注意他们,并分析是什么原因造成这些峰值。但如果异常值是由于机械误差、测量误差或者其它任何非普遍化因素导致的,那我们最好在准备训练数据之前过滤掉这些异常值。

有些模型算法对异常值非常灵敏。比如,AdaBoost 会对它们“倍加关注”,赋予一个相当大的权重值。相反,决策树就简单地把它们当做错误分类来处理。如果数据集包含相当数量的异常值,那么,使用一种具有异常值鲁棒性的建模算法或直接过滤掉异常值是非常重要的。

4.样本数远小于特征数时使用高方差模型

SVM是最流行的建模算法之一,它的强大功能之一就在于用不同核函数去拟合模型。SVM内核被认为是可以自发组合现有特征,从而形成更高维度特征空间的方法。由于获得这项强大功能的代价几乎忽略不计,大多数人在训练SVM模型时默认使用核函数。然而,当训练样本数远远少于特征维度时(n<<p)—— 常见于医学数据——高维特征空间数据过拟合风险会随之增加。事实上,在上述情况下我们应该完全避免使用高方差模型。

5.不做标准化的L1/L2正则化

使用L1或L2正则化是线性回归或逻辑回归惩罚权重系数值过大的常用方法。然而,许多人在使用这些正则化方法时都没有意识到标准化的重要性。

再回到诈 骗检测,设想一个把交易金额作为特征的线性回归模型。如果不做正则化,当交易金额以美元为单位时,其拟合系数将会是以美分为单位时的100倍。同时,因为L1/L2正则化对系数值大的项惩罚更重,美元作为单位时交易金额这个维度将会受到更多的惩罚。因此,正则化并不是一视同仁,它往往在更小尺度上惩罚特征。为了缓解这一问题,需要在预处理过程中标准化所有特征,使它们处在平等的位置。

6.不考虑线性相关就使用线性模型

假设构建一个含有X1和X2两个变量的线性模型,真实的模型是Y = X1 + X2。理想情况下,如果数据仅含有少量噪点,线性回归模型能够还原真实模型。然而,如果X1和X2存在线性相关,对于大多数优化算法而言,无论Y = 2 * X1 , Y = 3 * X1-X2 还是 Y = 100 * X1-99 * X2效果都一样好。尽管这个问题没有造成我们预测的偏差,看上去它似乎并无大碍。但是,它使问题变得病态了,因为系数权重无法得到解释。

7.把线性模型或者逻辑回归模型系数的绝对值解释为特征重要性

因为很多现成的线性回归方法返回每个系数的p值,很多人就认为系数的绝对值越大,对应的特征就发挥更大作用。事实并非如此,因为(一)缩放变量就会改变系数绝对值;(二)如果特征是线性相关的,其系数可以从一维特征转移到另一维特征。此外,数据集包含的特征维度越多,特征之间就越有可能线性相关,用系数解释特征重要性就越不靠谱。

以上就是机器学习实践操作中的7个常见错误。这个列表并不完整,它只是激发读者去思考,模型算法的假设并不一定适用于手头的数据。在追求模型最佳性能时,重要的是选择适合数据的模型算法,而不是你最熟悉的那个。

原文链接:Machine Learning Done Wrong ;联系作者:Cheng-Tao Chu's  LinkedIn(编译/zhyhooo 责编/周建丁)
来自: CSDN
0
0
评论 共 1 条 请登录后发表评论
1 楼 gzambrotta 2015-03-09 10:56
关键还是要了解数据本身,不可能存在通用于所有数据的建模方法。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 【Java基础知识 1】Java入门级概述

    CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

  • java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

  • Java实现网站请求流量分析统计

    如上图所描绘的,在不断刷新test.html请求页面时,上图total.html页面会实时的更新(1秒响应更新一次),折线图...比如上图19:14时间段有20多个请求量。代码如下: package com.wei.total; import java.io.IOExce...

  • java技术可行性分析_Java可行性分析

    Java信息管理系统可行性研究报告一可行性研究前提1.1可行性研究背景及意义利用计算机进行学生信息管理,不仅能够保证准确、无误、快速输出,而且还可以利用计算机对有关信息进行查询,检索迅速、查找方便、可靠性高...

  • Java的dump文件分析及JProfiler使用

    Java的dump文件分析及JProfiler使用

  • JAVA实现商品信息管理系统

    每种商品都包含商品名称、价格、库存量和生产厂家、品牌等信息。 主要完成对商品的销售、统计和简单管理。 这个题目相对简单,可以用一张表实现信息的保存和处理,因此不再给出数据库设计参考。 功能要求 (1)...

  • 基于Java旅游网站管理系统、Java旅游线路和景点网站系统设计与实现 毕业设计开题报告

    基于Java旅游网站管理系统、Java旅游线路和景点网站系统设计与实现 毕业设计开题报告

  • Java内存泄漏分析和解决

    在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个...

  • JAVA购物网站商城系统毕业设计 开题报告

    基于java的网上商城的主要...方便消费者在不方便到店购物的时候,也能够通过获得店铺的网站地址,进入到java网上商城的网站进行在线的购物,完成对商品的浏览、将商品添加到“购物车”以及下单和结算等整个的购物流程。

  • 【JAVA】java性能分析之线程DUMP分析

    本文将大概介绍一下,性能问题的解决思路,以及一次应用系统操作缓慢的分析实操。 一、定位问题方向 首先,查看服务器CPU使用率,磁盘IO以及内存使用情况 1.占用内存几乎等于JVM参数中分配的内存大小,而且长时间...

  • Java中csv文件读写分析

    四、Java中的csv类库 1. javacsv 2. opencsv 写入器 读取器 解析器 构建器 映射策略 注解 写入方式 ① 简单的写入 ② 基于位置映射的写入 ③ 基于CsvBindByPosition注解映射的写入 ④ 基于列名映射的写入 ⑤ 基于...

  • Java堆栈信息分析

    以下数据使用Jconsole转储文件中得来,不同的工具,不同的虚拟机得到的具体信息可能有差别栈转储信息转储方式通过Jconsole工具(或者其他分析工具) "Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x142b...

  • Java常见设计模式总结

    二、Java的23种设计模式: 接下来我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析 1、创建型-工厂方法模式: 工厂方法模式分为三种: (1)简单工厂模式: 建立...

  • Java内存占用过高问题分析

    介绍Java运行时内存占用过高的检测方法

  • Java线程Dump分析

    每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般...

  • Java进程崩溃分析

    在项目开发过程中,发现java进程突然崩溃。 以下为几种可能的原因: Java应用程序的问题:发生OOM导致进程Crash; JVM出错:JVM或JDK自身的Bug导致进程Crash; 被操作系统OOM-Killer; 原因1:JVM发生OOM  最常见的...

  • 怎样分析java线程堆栈日志

    注: 该文章的原文是由 Tae Jin Gu 编写,原文地址为 How to Analyze Java Thread Dumps 当有障碍,或者是一个基于 JAVA 的 WEB 应用运行的比预期慢的时候,我们需要使用 thread dumps。如果对于你来说,thread ...

  • Java内存分析工具——jmap

    jmap能够打印给定Java进程、核心文件或远程DEBUG服务器的共享对象内存映射或堆内存的详细信息 内存监控 分析对象内存 示例: 怎么用? jmap 相关命令: 可通过 jmap --help 查看 jmap [option] :连接运行的进程 ...

  • Java Lambda表达式 实现原理分析

    本文分析基于JDK 9 一、目标 本文主要解决两个问题: 1、函数式接口 到底是什么? 2、Lambda表达式是怎么实现的? 先介绍一个jdk的bin目录下的一个字节码查看工具及反编译工具:javap 二、函数式接口 ...

  • Java进程的dump文件生成与分析

    JVM分析常用命令与工具

Global site tag (gtag.js) - Google Analytics