机器学习的一些感悟(一)
2018-03-10 14:01
183 查看
自己研究方向的社交网络,会用到一些机器学习的方法,本身自己也很感兴趣,从去年开始就开始了学习,学习经历和相关资料,代码见GitHub主页:https://github.com/lovesoft5/ml
学习机器学习大半年了,下面是自己整理的一些心得笔记
机器学习广泛应用于计算机视觉,自然语言处理,信息检索,推荐等领域,因为涉及面太广,现在并没有一个完整的定义什么是机器学习。个人偏向的理解是:机器学习过程本质都是在一个样本空间中,找出一个模型、搜索一组参数,按照需要使其描述这个样本空间(损失函数最小),从而可以对新样本做出某种判断。
一个完整的机器学习项目大体有如下步骤(kaggle比赛流程也大体如下):
首先、将所要解决的问题抽象成机器学习的问题(类似数学建模),目标问题到底是一个什么问题,分类,回归还是聚类问题,要达到的目标是什么,对准确率的要求等。
其次、明确该项目可以获取哪些数据,大概有多少样本,多少个特征,训练的时候内存占用量,需不需要用分布式,
接着、考虑对特征数据做处理和选择,包括特征筛选,数据清晰,归一化,缺失值处理......,然后利用特征选择的方法,比如相关系数法,卡方检验,逻辑回归权重选择,平均互信息等,如果需要,还可以进一步用PCA,LDA等方法降维。
然后 就是模型选择、训练与调优,根据样本大小特征选择相应模型,然后对参数进行调优,随后还需要模型诊断,进行特征融合,模型融合等进一步提高预测效果
最后、经过测试,方差可以接受以后就可以提交上线。
-------------------------------------------------------------------------------
2) 另一个思想就是:还是有4种类型,把其中一类作为正样本,另外3个作为负样本,可以得到4个二分类器,预测数据取分类为正的那个值(因为分类为负,我们无法判断是另外3类中的哪一类)
-----------------------------------------------------------------------------------
但是为什么是优化||W||,很多资料都没有讲清原因,下面这个图来自清华大学的数据挖掘课上的ppt,很好的解释了这个问题,
我们知道,支持向量机要找出一个间隔最大化的平面。间隔最大化如何表示呢? 通过投影(空间点投影参考线代相关知识,其实PCA降维也用到了相关方法)! 数据点到分界面的投影表示如上图,这里,为了表示方便,b是常数,我们通常取1. 于是就有了后面的优化目标。
2、同为分类模型。逻辑回归模型(LR)是参数模型,SVM是非参数模型。损失函数上,LR采用了Logistical Loss,SVM采用了hinge loss。这两个损失函数都是增加对分类影响较大的数据点的权重,减少与分类关系较少的数据点的权重。SVM处理数据时最考虑Support vector,也就是和分类相关的少数点去学习分类器,所以增加某些新的样本点不会对模型造成影响,而LR通过非线性映射,每个样本点都会对参数有影响,只不过距离分类面远的点影响权重越小。
3、逻辑回归本质上其实也是一个线性回归模型,所以处理不了非线性问题,通过sigmod函数把一个回归问题轻松转化为0/1分类问题,虽然简单,但是实用性强,典型的应用比如在线广告。SVM则可通过核函数把非线性数据映射到高维从而线性可分,但是模型训练时间平方级别增大,所以数据量太大,一般不用SVM,另一方面SVM没有处理缺失值的策略(决策树有)。
学习机器学习大半年了,下面是自己整理的一些心得笔记
机器学习广泛应用于计算机视觉,自然语言处理,信息检索,推荐等领域,因为涉及面太广,现在并没有一个完整的定义什么是机器学习。个人偏向的理解是:机器学习过程本质都是在一个样本空间中,找出一个模型、搜索一组参数,按照需要使其描述这个样本空间(损失函数最小),从而可以对新样本做出某种判断。
一个完整的机器学习项目大体有如下步骤(kaggle比赛流程也大体如下):
首先、将所要解决的问题抽象成机器学习的问题(类似数学建模),目标问题到底是一个什么问题,分类,回归还是聚类问题,要达到的目标是什么,对准确率的要求等。
其次、明确该项目可以获取哪些数据,大概有多少样本,多少个特征,训练的时候内存占用量,需不需要用分布式,
接着、考虑对特征数据做处理和选择,包括特征筛选,数据清晰,归一化,缺失值处理......,然后利用特征选择的方法,比如相关系数法,卡方检验,逻辑回归权重选择,平均互信息等,如果需要,还可以进一步用PCA,LDA等方法降维。
然后 就是模型选择、训练与调优,根据样本大小特征选择相应模型,然后对参数进行调优,随后还需要模型诊断,进行特征融合,模型融合等进一步提高预测效果
最后、经过测试,方差可以接受以后就可以提交上线。
-------------------------------------------------------------------------------
二分类器转化为多分类器的方法,下面通过例子来说明:
1) 多个分类器组合法:比如预测结果有4种类型,把这4种类型两两组合,这样就得到6组样本(每个样本有两种类型),对每组样本分别用一个二分类器进行训练,相当于得到6个二分类器,把预测数据在6个分类器上分别计算,预测结果最多的那个类型就是预测结果。2) 另一个思想就是:还是有4种类型,把其中一类作为正样本,另外3个作为负样本,可以得到4个二分类器,预测数据取分类为正的那个值(因为分类为负,我们无法判断是另外3类中的哪一类)
-----------------------------------------------------------------------------------
关于逻辑回归与SVM:
1、svm分类时,会存在无数个超平面,只有间隔最大化的超平面,泛化能力最强。通常表示为如下优化问题:但是为什么是优化||W||,很多资料都没有讲清原因,下面这个图来自清华大学的数据挖掘课上的ppt,很好的解释了这个问题,
我们知道,支持向量机要找出一个间隔最大化的平面。间隔最大化如何表示呢? 通过投影(空间点投影参考线代相关知识,其实PCA降维也用到了相关方法)! 数据点到分界面的投影表示如上图,这里,为了表示方便,b是常数,我们通常取1. 于是就有了后面的优化目标。
2、同为分类模型。逻辑回归模型(LR)是参数模型,SVM是非参数模型。损失函数上,LR采用了Logistical Loss,SVM采用了hinge loss。这两个损失函数都是增加对分类影响较大的数据点的权重,减少与分类关系较少的数据点的权重。SVM处理数据时最考虑Support vector,也就是和分类相关的少数点去学习分类器,所以增加某些新的样本点不会对模型造成影响,而LR通过非线性映射,每个样本点都会对参数有影响,只不过距离分类面远的点影响权重越小。
3、逻辑回归本质上其实也是一个线性回归模型,所以处理不了非线性问题,通过sigmod函数把一个回归问题轻松转化为0/1分类问题,虽然简单,但是实用性强,典型的应用比如在线广告。SVM则可通过核函数把非线性数据映射到高维从而线性可分,但是模型训练时间平方级别增大,所以数据量太大,一般不用SVM,另一方面SVM没有处理缺失值的策略(决策树有)。
最大似然估计与最小二乘:
最大释然估计是找到参数估计值,使得前面已经实现的样本发生概率最大。最小二乘找到一个估计值,使得实际值与估计值的距离最小。 前面的回归模型在学习时,就是用的最大似然估计法,之说以不用最小二乘法是因为通过最小二乘法得到的损失函数是非凸,这样得不到全局最优解。关于判别模型与生成模型:
之前也看了很多这方面的解释,但是都没有理解其本质,知道有一天看了一篇解释HMM与CRF的博客,一下子豁然开朗了。通俗理解如下: 判别模型其实从样本空间中学习一个到预测对象的映射函数(既然是函数,所以就要学习到一些参数),从而在新样本来临的时候,可以带入到函数中,预测出y。也可以说是在新样本下的条件概率P(Y|X)的大小。生成模型是学习样本数据在某个空间的分布规律(所以样本越多越好),即联合概率分布P(X,Y)。学习到了分布规律以后,对新样本,就可以用P(Y|X)来预测样本值。这也是概率模型不需要归一化的原因,它寻找的是分布规律。GBDT,随机深林,XGBoost区别及采用的思想
1、随机深林是在传统决策上采用bagging(装袋)思想,它通过引入一组分类器(比如一组决策树)来完成学习。给出一个样本,所有的分类器都并行的工作,并对这一个样本各自标定类别。然后由一个“主”分类器负责收集这类信息,选择出现次数最多的类标来标记该样本。通俗理解bagging为什么有效:假设有3个分类器,每一个分类器可能会在检测不同的样本时犯错,在该次试验中,一个最多被错分一次,但是如果另外两个分类器给出的标记是正确的,那么结果就是:一个分类器偶然犯的错误会被其他分类器纠正。因此、一定程度上它解决了单个分类器准确率不高的问题。 但是,该思想存在一个严重的问题,就是参与投票的分类器之间的彼此独立的,使用的数据都是随机选择的。我们可以设计一个更为合理更有效的机制,使分类器之间互补。Boosting(提升)的机制就是前面分类器被错分的样本会成为下一轮训练集中的一员的可能性更高,采用了一种基于权重的多数投票机制。 随机深林在bagging的基础上,在决策树训练过程中引入了随机属性选择。传统决策树在选择划分属性的时候是在当前节点属性集合中选择最优属性,而随机深林则是对节点随机选择包含K个属性的子集,K的大小就控制着随机性的程度。 2、GBDT的训练基于Boosting思想,每一轮迭代根据上一轮错误更新样本权重,因此是串行化的方法。 3、XGBoost是GBDT的优化版,优化了损失函数(用泰勒展开式二次逼近),更为精确,而GBDT的直接用的一阶导数。 此外,也对树的结构进行了正则化约束,防止模型过度复杂,从而降低 了过拟合的可能,XGBoost工具支持并行(可参考其官方文档),实际使用过程中,XGBoost有大量参数可以调节,往往能取得比单模型好的效果。相关文章推荐
- 关于机器学习的一些感悟
- 一些对于机器学习的感悟和思考
- 我的机器学习的一些感悟(一)
- 关于XMPP MUC的一些感悟
- 程序员工作几年的一些感悟
- 调试gy273时的一些感悟
- 我对编程的一些感悟
- 【Some】【other】程序员的一些感悟
- 读书的一些感悟
- 对于ppt设计的一些感悟
- 近期SQL优化的一些感悟
- rabbitmq技术的一些感悟(二)
- 关于JSP的一些感悟和心得
- 关于多项目管理过程中的一些感悟
- grunt使用的一些感悟
- 连接池的一些感悟
- 最近的一些感悟
- 机器学习(四)使用sklearn库的练习normalization和model的一些参数
- 【个人感悟】测试4年的一些感悟
- 机器学习等一些有用的网站