机器学习算法须要注意的一些问题

原文:http://blog.csdn.net/xmu_jupiter/article/details/47108523html

对于机器学习的实际运用,光停留在知道了解的层面还不够,咱们须要对实际中容易遇到的一些问题进行深刻的挖掘理解。我打算将一些琐碎的知识点作一个整理。算法

1 数据不平衡问题

这个问题是常常遇到的。就拿有监督的学习的二分类问题来讲吧,咱们须要正例和负例样本的标注。若是咱们拿到的训练数据正例不多负例不少,那么直接拿来作分类确定是不行的。一般须要作如下方案处理:markdown

1.1 数据集角度

经过调整数据集中正负样本的比例来解决数据不平衡,方法有:网络

1.1.1 增长正样本数量

正样本原本就少,怎么增长呢?方法是直接复制已有的正样本丢进训练集。这样能够稍微缓解正样本缺失的困境,可是容易带来一个问题,就是过拟合的潜在危险。由于这样粗暴的引入正样本并无增长数据集的样本多样性。如何设计复制哪些正样本有一些技巧,好比选择有特定意义的表明性的那些。数据结构

1.1.2 减小负样本的数量

首先这是一个通用的合理的方法,可是负样本的减小必然致使数据多样性的损失。有一种方法能够缓解这个问题,那就是相似于随机森林方法,每次正样本数量不变,随机选择等量的不一样的负样本进行模型训练,反复几回,训练多个模型,最后全部的模型投票决定最终的分类结果。框架

1.2 损失函数的角度

能够从新修改模型训练的损失函数,使得错分正样本的损失变大,错分负样本的损失变小。这样训练出来的模型就会对正负样本有一个合理的判断。机器学习

更多于此话题相关内容请移步: 
分类中数据不平衡问题的解决经验 
机器学习中的数据不平衡问题函数

2 异常值处理问题

说到异常值,首先得说一下数据量的问题。异常值不是缺失值,更不是错误值,一样是真实状况的表现,之因此以为一个数据异常,是由于咱们可以用到的数据量不够大,没法准确地表明整个此类数据的分布。若是把异常值放在海量数据的大背景下,那么这个异常值也就不那么异常了。post

下载摘自某大牛博客一段话:性能

异常值并不是错误值,而一样是真实状况的表现,咱们之因此认为异常,只是由于咱们的数据量不足够大而已。可是从实际的工业界来看,考虑到实际的计算能力以及效果,大多数公司都会对大数据作“去噪”,那么在去噪的过程当中去除的不只仅是噪音,也包括“异常点”,而这些“异常点”,偏偏把大数据的广覆盖度给下降了,因而利用大数据反而比小数据更容易产生趋同的现象。尤为对于推荐系统来讲,这些“异常点”的观察其实才是“个性化”的极致。

既然说到大数据,一样是这位大牛的一段话:

说得学术一些,咱们不妨认为大数据是频率学派对于贝叶斯学派一次强有力的逆袭。那么既然说到这个份上了,咱们不妨思考一下,咱们是否是有但愿在回归贝叶斯学派,利用先验信息+小数据完成对大数据的反击呢?

某些机器学习算法对异常值很敏感,好比:K-means聚类,AdaBoost。使用此类算法必须处理异常值。 
某些算法拥有对异常值不敏感的特性,好比:KNN,随机森林。

如何处理异常值?最简单的方法就是直接丢掉。其它方法我后面会继续研究。

3 过拟合问题

过拟合可要命了,好不容易训练一个模型,来一些测试数据,分类结果很是的差。过拟合产生的缘由:

  • 训练数据太少
  • 模型太复杂
  • 训练数据中存在噪声点(就算训练数据足够多)

几乎全部的机器学习算法都会容易遇到过拟合的问题。因此先说一些解决过拟合的通用办法。固然,首先得保证训练数据不要太少。

3.1 正则化

正则化就是在模型的优化目标上再加入一个惩罚因子。这样模型的优化策略就从经验风险最小化变为结构风险最小化。

  • 线性回归正则化就是岭回归和lasso回归,分别对应L2,L1罚项。
  • 决策树正则化就是剪枝,一般把子节点个数做为罚项。

3.2 交叉验证

在数据量足够的状况下,能够采用交叉验证的方式避免过拟合,甚至能够在正则化以后再作一次交叉验证。

其它详细研究请点击: 
机器学习过分拟合问题一些缘由

4 特征工程问题

有句话必须得放在前面:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。因而可知,特征工程尤为是特征选择在机器学习中占有至关重要的地位。

4.1 什么是特征工程

首先拽一段英文定义:

Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.

in a word, feature engineering is manually designing what the input x’s should be.

4.2 为何要进行特征降维和特征选择

主要是出于以下考虑: 
1. 特征维数越高,模型越容易过拟合,此时更复杂的模型就很差用。 
2. 相互独立的特征维数越高,在模型不变的状况下,在测试集上达到相同的效果表现所须要的训练样本的数目就越大。 
3. 特征数量增长带来的训练、测试以及存储的开销都会增大。 
4. 在某些模型中,例如基于距离计算的模型KMeans,KNN等模型,在进行距离计算时,维度太高会影响精度和性能。 
5. 可视化分析的须要。在低维的状况下,例如二维,三维,咱们能够把数据绘制出来,可视化地看到数据。当维度增高时,就难以绘制出来了。

在机器学习中,有一个很是经典的维度灾难的概念。用来描述当空间维度增长时,分析和组织高维空间,因体积指数增长而遇到各类问题场景。例如,100个平均分布的点能把一个单位区间以每一个点距离不超过0.01采样;而当维度增长到10后,若是以相邻点距离不超过0.01小方格采样单位超一单位超正方体,则须要10^20 个采样点。

正是因为高维特征有如上描述的各类各样的问题,因此咱们须要进行特征降维和特征选择等工做。

4.3 特征提取

对于高维特征(成百上千维),好比图像,文本,声音的特征,特征的每一维没有显著意义的,最好要对特征先进行降维,也就是从初始数据中提取有用的信息。经过降维,将高维空间中的数据集映射到低维空间数据,同时尽量少地丢失信息,或者降维后的数据点尽量地容易被区分。这样,能够提取出显著特征,避免维度灾难,还能够避免特征之间的线性相关性。

特征降维经常使用的算法有PCA,LDA等。

PCA算法经过协方差矩阵的特征值分解可以获得数据的主成分,以二维特征为例,两个特征之间可能存在线性关系(例如运动的时速和秒速度),这样就形成了第二维信息是冗余的。PCA的目标是发现这种特征之间的线性关系,并去除。

LDA算法考虑label,降维后的数据点尽量地容易被区分。

4.4 特征选择

一般遇到的状况是:特征不够用。。在这种状况下,咱们就要在设计算法以前,好好地挖掘一下特征。对于逻辑斯蒂回归和决策树,每一维的特征是有确切意义的。咱们就要从各个方面,抽取与目标相关的全部可用信息做为特征。这个过程可能会比较痛苦。。

而后,是否是特征越多越好?其实也不是。盗一张图过来以下: 
这里写图片描述 
能够发现,刚开始模型的准确率随着特征数量的增长而增长,当增长到必定程度便趋于稳定了。若是还要强行加入如此多的特征,反而多此一举,容易过拟合。而后,若是出现特征过多出现过拟合的状况,就要适当地进行参数缩减。对于逻辑斯蒂回归,某一维特征对应的参数若是接近为零,说明这个特征影响不大,就能够去掉。所以,咱们的特征选择过程通常以下:

  1. 选取尽量多的特征,必要时先进行降维
  2. 对特征进行选择,保留最具备表明性的特征

这个过程的进行要同时观察模型准确率的变化。

最后,特征选择有哪些算法呢? 
- 过滤方法:将全部特征进行打分评价,选择最有效的一些特征。好比:卡法检验,信息增益,相关系数打分。 
- 包装方法:将特征组合的选择看作是一个在特征空间中的搜索问题。好比:随机登山法,启发式的搜索方法等。 
- 嵌入方法:将特征选择的过程嵌入到模型训练的过程当中,其实也就是正则化的方法。好比lasso回归,岭回归,弹性网络(Elastic Net)等。

具体其它细节,之后补充。

推荐一篇美团网的技术报告: 
机器学习中的数据清洗与特征处理综述 
还有一篇参考: 
机器学习中的特征选择问题 
最后一篇特征选择的好文: 
A introduction on feature seclection

 

机器学习算法须要注意的一些问题(二)

标签: 机器学习算法特征
 分类:
 

目录(?)[+]

 

训练样本大小选取的问题

模型学习的准确度与数据样本大小有关,那么如何展现更多的样本与更好的准确度之间的关系呢?

咱们能够经过不断增长训练数据,直到模型准确度趋于稳定。这个过程可以很好让你了解,你的系统对样本大小及相应调整有多敏感。

因此,训练样本首先不能太少,太少的数据不能表明数据的总体分布状况,并且容易过拟合。数据固然也不是越多越好,数据多到必定程度效果就不明显了。不过,这里假设数据是均匀分布增长的。

然而这里有另外一种声音:

算法使用的数据越多,它的精度会更加准确,因此若是可能要尽可能避免抽样。机器学习理论在预测偏差上有着很是直观的描述。简而言之,在机器学习模型和最优预测(在理论上达到最佳可能的偏差)之间的预测偏差的差距能够被分解为三个部分:

因为没有找到正确函数形式的模型的偏差
 因为没有找到最佳参数的模型的偏差
 因为没用使用足够数据的模型的偏差

若是训练集有限,它可能没法支撑解决这个问题所需的模型复杂性。统计学的基本规律告诉咱们,若是咱们能够的话,应该利用全部的数据而不是抽样。

其实固然数据越多越好,可是更多的数据意味着获取的难度以及处理的复杂度等。而且当数据多到必定程度后区别就不那么明显了。因此咱们仍是要根据本身状况科学地使用必定数量的数据。

参考资料: 
机器学习项目中常见的误区 
开发者成功使用机器学习的十大诀窍

选择什么模型算法?

不少像我同样的机器学习新手在遇到问题的时候,都会对用什么样的模型解决问题感到困惑。除了基本的有监督无监督,分类仍是回归,二分类多分类等等基本的选择标准,貌似其余的都差很少,一般的作法就是每一个模型都试一试,看看哪一个效果好就用哪一个。。显然这么作的不够的。

其实,选择什么算法最好,关键不在于算法,而在于具体要解决的问题,以及问题所具备的数据和特征。下面结合本身的经验和收集的资料,给出几点选择算法的tips。

1 特征角度

特征层次级别

就像古代把人分为三六九等,特征也有层次之分。咱们暂且粗略地分为高级别特征和低级别特征,有的时候高级别的特征又叫组合特征。整体上,低级别特征比较有针对性,单个特征覆盖面小(含有这个特征的数据很少),特征数量(维度)很大。高级别特征比较泛化,单个特征覆盖面大(含有这个特征的数据不少),特征数量(维度)不大。下图展现了什么是高级低级特征:

这里写图片描述

特征级别与线性模型和非线性模型

特征的低级和高级带来模型选择上的线性模型和非线性模型的考量:

非线性模型的特征 
1)能够主要使用High Level特征,由于计算复杂度大,因此特征维度不宜过高; 
2)经过High Level非线性映射能够比较好地拟合目标。

线性模型的特征 
1)特征体系要尽量全面,High Level和Low Level都要有; 
2)能够将High Level转换Low Level,以提高模型的拟合能力。

  • 线性模型有:逻辑斯蒂回归,线性SVM等;
  • 非线性模型有:决策树,随机森林,GBDT等。

例子: 逻辑斯蒂回归和决策树用哪一个好?

只用高级或者低级特征

那日常咱们所纠结的逻辑斯蒂回归和决策树用哪一个好为例,决策树是一种非线性模型,所以若是是高级别特征的话咱们就选择决策树;逻辑斯蒂回归是一种线性模型,所以若是是低级别特征的话咱们就选择逻辑斯蒂回归。

然而,在咱们是具体应用中,高级特征一般难以得到,或者得到的时间和成本很高,然而低级特征却很容易拿到。因此,在解决问题的初始阶段,咱们最好先普遍收集能够用的低级别特征,来一个逻辑斯蒂回归,做为框架的基线系统。

线性模型对非线性关系缺少准确刻画,高级特征恰好能够加入模型的非线性表达,加强模型的表达能力。另外,使用低级特征能够认为是对全局进行建模,而高级特征更加精细,是个性化建模,这就是为何

  • 决策树深刻数据细部,但同时失去了对全局的把握,由于决策树通常使用高级特征;
  • 逻辑回归始终着眼整个数据的拟合,因此对全局把握较好。但没法兼顾局部数据,或者说缺少探查局部结构的内在机制,由于逻辑回归通常使用低级特征;
  • 长尾样本的预测值主要受High Level特征影响,由于长尾样本是个性化样本;
  • 高频样本的预测值主要受Low Level特征影响,由于高频样本是大众化的样本。

高级特征和低级特征都有

当咱们有一些高级特征的时候,就把高级特征和低级特征共同加入到逻辑回归中进行训练,这样训练出来的模型兼顾了全局化与个性化,会使模型预测的准确率有所提升。具体到逻辑回归和决策树的使用上,咱们能够充分利用二者之间的优缺点进行互补。主要思路是利用决策树对局部数据结构优越的把握能力增长逻辑回归的效力。在具体作法上有几种,一种是从决策树分析中找出数据局部结构,做为在逻辑回归中构建依变量(interaction)的依据。另外一种是在须要对预测因子进行离散化处理时,利用决策树分析决定最佳切分点。还有一种是把决策树分类的最终结果做为预测变量,和其余协变量一块儿代入回归模型,又称为“嫁接式模型”。从理论上讲,嫁接模型综合了决策树和逻辑回归的优势。最终节点包含了数据中重要的局部结构,而协变量能够拾补被决策树遗漏的数据总体结构。

本部分参考文献: 
在广告LR模型中,为何要作特征组合? 
逻辑回归与决策树在分类上的一些区别

2 要解决的问题自己

有时候咱们要解决的问题能够用单个复杂的模型解决,也能够用多个简单的模型分别解决各个子问题,再基于各个单模型进行融合解决总问题。融合的方式能够是简单的线性融合,也能够是更加复杂的融合。

不一样模型有不一样 优缺点,具体以下: 
这里写图片描述

选择哪一种模式? 
1)问题可预估的难度,难度大,则考虑用多模型; 
2)问题自己的重要性,问题很重要,则考虑用多模型; 
3)多个模型的关系是否明确,关系明确,则能够用多模型。

这一部分主要抄袭美团技术报告: 
实例详解机器学习如何解决问题

3 模型组合

最近模型组合的算法愈来愈流行,当单个分类器的性能不足以解决实际问题的时候,能够考虑使用模型组合的方法,也就是bagging和boosting的方法。

关于这部分,只知道GBDT在工业界很火,当有了必定了解和实战经验后,再来补充。

相关文章
相关标签/搜索