机器学习常见的六大错误

来源:36大数据 作者:LinkinPark

现一个key-value的数据库,那么有很多种模式都可以实现,但是他们最终所达到的效果却是千差万别的。同样,在机器学习领域,如果我想实现一个分类器,也有很多种算法,但是每种算法都对数据做了不同的前提假设。

曾经当我们处理少量数据的时候,我们往往可以先设计若干种算法,然后每种都测试一下,选择一种最优的方法,但是当面对大数据时,我们就需要转变一下思路,首先对数据进行分析,然后选择一种模型对数据进行处理。

在过去,我们经常会发现,很多人都沉迷于某一种模型,无论遇到任何问题他们都会选择同样的模型来解决问题,而原因仅仅是他们擅长这个模型,而不是数据适合这个模型。在这篇文章中,主要会来陈述下在机器学习时常见的几种错误。

1. 使用模型默认的损失函数

损失函数是一个机器学习算法的核心,损失函数决定了最终优化后得到的参数以及模型本身。在不同的业务场景下,优化的目标应该是不同的。例如我在珍爱网做付费用户预测时,由于付费用户本身数量级就不大,所以我宁可误判十个,也不能错过一个。所以这个时候我们就需要去修改分类器模型的损失函数。

2. 无根据地选择线性模型

这个同样是我很常遇到的同事会犯的错误。遇到一个分类问题,二话不说就上逻辑回归,其实原因很简单,就是因为逻辑回归效率高,实现容易。但是大家往往都忽略了一点,逻辑回归本身就是一个线性模型,但是真实数据是否线性可分却是我们未知的情况。其实我个人认为,由于高维数据下判断数据是否线性可分几乎是一个不现实的任务,所以我个人的经验往往是先使用逻辑回归做一次分类,但是同时也会采用决策树,或者SVM等非线性模型来对该数据进行重新的分类比对。(我不知道是否有更好的方法)

话说在大数据情况下,很多人都来和我讲现在都提倡海量数据+线性模型,但是我个人认为这句话是有误的,线性模型的成立并非建立在海量数据的基础上,而是建立在海量特征的基础上,说的更恰当些,应该是建立在更好的特征工程的基础之上。

3. 忽视异常值的意义

异常值是个很有趣的事情,让你又爱又恨。我记得之前在统计之都上看过一篇文章对我启发很大,说曾经我们都愿意把异常值直接给丢掉,但是我们却忘记了异常值并非错误值,而同样是真实情况的表现,我们之所以认为异常,只是因为我们的数据量不足够大而已。文中还举了一个例子,说我们用计算机来模拟高斯分布,也一样会模拟出一些数据点落在N个标准差之外,而我们并不能说这是异常点,因为如果我们把这些点删除掉,这就不是一个高斯分布了。所以异常值很多情况下非但不能丢掉,还需要引起我们的足够重视和分析,例如网站的收入突然增长。
但是我们又要注意这个异常值是否是错误值,如果是错误值,这个时候我们就应该想办法把这些错误值去掉,因为这些错误往往会影响我们实际的模型效果。如果当训练数据中包含一些异常值的时候,我们就需要考虑模型的敏感性了,例如AdaBoost, Kmeans这种就属于对异常值很敏感的机器学习模型。

4. 不考虑n和p的关系

n: 训练数据的数量。p: 特征的数量。SVM核函数的一个关键概念就是维度提升,如果当n << p的时候,还依然采用SVM来选定模型,那么就必然会导致p进一步增加,于是导致特征的参数中自由变量增加,必然会对分类的效果产生很大的影响。

5. L1 / L2 正则化之前并没有对特征进行标准化

这个道理很简单,如果你的每个特征是处在不同的区间时,你是没办法去做L1/L2的正则化的,举个例子,x1 代表年龄,x2 代表收入,如果我采用一个广义的线性模型,比如 Y = f(ax1 + bx2),然后x1大小范围是10-50,x2大小范围是5000 – 100000,a和b根本就没办法在一个量级上,这时正则化一定是有问题的。

6. 变量之间的共线性问题

当特征变量之间产生共线性时,产生最大的问题就是让线性模型的参数是无法解释的,正常来说线性模型的参数权重基本就代表了该特征变量的重要性,但是如果共线性,那么这个意义就失效了。但是我也并不知道这个有什么特别好的解决方法,因为当特征增加时,特征之间的共线性(或者说相关性吧,这样更泛一些)几乎是不可避免的。

时间: 2024-11-05 11:52:23

机器学习常见的六大错误的相关文章

数据分析师:数据分析工作常见七种错误及其规避技巧(转自经管之家)

数据分析师:数据分析工作常见七种错误及其规避技巧商业领域的数据科学家和侦探类似:去探索未知的事物.不过,当他们在这个旅程中冒险的时候,他们很容易落入陷阱.所以要明白,这些错误是如何造成的,以及如何避免.“ ... 数据分析师:数据分析工作常见七种错误及其规避技巧 商业领域的数据科学家和侦探类似:去探索未知的事物.不过,当他们在这个旅程中冒险的时候,他们很容易落入陷阱.所以要明白,这些错误是如何造成的,以及如何避免. “错误是发现的入口.”——James Joyce (著名的爱尔兰小说家). 这在

最常见的HTTP错误

1. HTTP 500错误(内部服务器错误)对对HTTP 500错误的定义已经充分证明了这是一个最常见的HTTP错误. 一般来说,HTTP 500 错误就是web服务器发生内部错误时返回的信息. 例如,web服务器过载时将无法正确处理访问请求.根据Google的搜索数据统计,HTTP 500 错误发生机率是404错误的两倍: 2. HTTP 404错误(文件未找到)大多数人都知道这个错误. 当用户试图访问Web服务器(通常是一个网页)上某个实际不存在的资源时,就会发生404错误. 404错误可能

机器学习常见算法分类汇总

机器学习常见算法分类汇总 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多或少会用到机器学习的算法.这里 IT 经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考. 机器学习的算法很多.很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的.这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性. 学习方式 根据数据类型的不同,对一个问题的建模有不同的方式.在机器学习或者人工智能领域,人们首先会考虑算法的学习

C语言中常见的内存错误与解决方法

常见的错误 关于内存的一些知识已在内存分配中提及,现记录与分享常见的内存错误与对策. 类型 1:内存未分配成功,却使用了它. 方   法:在使用之前检查指针是否为NULL. 1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查. 2)当使用malloc或new来申请内存时,应该用if(p != NULL)进行防错检查. 类型 2:引用了尚未初始化的指针 原   因:内存的缺省初始值究竟是什么并没有统一的标准,在使用之前都进行初始化. 1)没有初始化的观念. 2

ssh整合常见的后台错误

ssh整合以及常见的后台错误 摘自网络 jsp和Servlet之间传值出现乱码的解决方案 采用设置字符集的方式 request.setCharacterEncoding("utf-8"); 在web.xml文件里定义编码,同时在CoreFilter类里定义编码为utf-8 <filter> <filter-name>encodingFilter</filter-name> <filter-class>fengke.filter.CoreF

python常见的编程错误

常见的编程错误2.1 试图访问一个未赋值的变量,会产生运行时错误. 常见的编程错误2.2 ==,!=, >=和<=这几个运算符的两个符号之间出现空格,会造成语法错误. 常见的编程错误2.3 !=,<>,  >=和<=这几个运算符中,假如两个字符的顺序弄反了(分别写成=!,><, =>,=<),会造成语法错误. 常见的编程错误2.4 切不可将相等运算符"=="同赋值运算符"="弄混了.其实按正统逻辑,在读的时

常见http代码错误原因及处理

常见的HTTP错误可以分为以下四大类.每一大类又细分为很多类小错误.当您打不开网站或者打开网站报错时首先检查您输入的网站是否有误,检查网络是否有问题或者虚拟主机的DNS是否可以解析.确定没有问题时再看下面http常见错误分析: 1.400错误 问题原因:您所要打开的网页不存在或你填写的身份验证信息不正确. 解决方法:重新尝试依然错误后提交工单. 2.401错误 最常见的出错提示:401 UNAUTHORIZED 问题原因:您试图访问受限页面但未经授权时,网站返回HTTP 401错误.错误登录尝试

常见动态内存错误---内存泄漏

常见动态内存错误 编译器不能自动发现动态内存错误,动态内存错误通常只能在程序运行时才能被捕捉到,而且错误原因不容易查找,错误本身也不容易捕捉,改错难度较大. 1.动态内存分配失败却继续操作 内存不足等有可能导致动态内存分配失败,所以使用new请求分配动态内存后一定要检查返回地址是否为NULL. 如用if(p==NULL) 或 if(p!=NULL)进行检查,未检查前不要操作动态内存空间. 2.动态内存空间未初始化就进行读操作 C++标准并未规定动态内存空间的默认值,程序无法预知该默认值的具体指.

机器学习常见算法优缺点总结

机器学习常见算法优缺点总结 K近邻:算法采用测量不同特征值之间的距离的方法进行分类. 优点: 1.简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归: 2.可用于数值型数据和离散型数据: 3.训练时间复杂度为O(n):无数据输入假定: 4.对异常值不敏感 缺点: 1.计算复杂性高:空间复杂性高: 2.样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少): 3.一般数值很大的时候不用这个,计算量太大.但是单个样本又不能太少 否则容易发生误分. 4.最大的缺点是无法给