自己研究方向的社交网络,会用到一些机器学习的方法,本身自己也很感兴趣,从去年开始就开始了学习,学习经历和相关资料,代码见GitHub主页:
https://github.com/lovesoft5/ml
学习机器学习大半年了,下面是自己整理的一些心得笔记
机器学习广泛应用于计算机视觉,自然语言处理,信息检索,推荐等领域,因为涉及面太广,现在并没有一个完整的定义什么是机器学习。个人偏向的理解是:机器学习过程本质都是在一个样本空间中,找出一个模型、搜索一组参数,按照需要使其描述这个样本空间(损失函数最小),从而可以对新样本做出某种判断。
一个完整的机器学习项目大体有如下步骤(kaggle比赛流程也大体如下):
首先、将所要解决的问题抽象成机器学习的问题(类似数学建模),目标问题到底是一个什么问题,分类,回归还是聚类问题,要达到的目标是什么,对准确率的要求等。
其次、明确该项目可以获取哪些数据,大概有多少样本,多少个特征,训练的时候内存占用量,需不需要用分布式,
接着、考虑对特征数据做处理和选择,包括特征筛选,数据清晰,归一化,缺失值处理......,然后利用特征选择的方法,比如相关系数法,卡方检验,逻辑回归权重选择,平均互信息等,如果需要,还可以进一步用PCA,LDA等方法降维。
然后 就是模型选择、训练与调优,根据样本大小特征选择相应模型,然后对参数进行调优,随后还需要模型诊断,进行特征融合,模型融合等进一步提高预测效果
最后、经过测试,方差可以接受以后就可以提交上线。
-------------------------------------------------------------------------------
1) 多个分类器组合法:比如预测结果有4种类型,把这4种类型两两组合,这样就得到6组样本(每个样本有两种类型),对每组样本分别用一个二分类器进行训练,相当于得到6个二分类器,把预测数据在6个分类器上分别计算,预测结果最多的那个类型就是预测结果。
2) 另一个思想就是:还是有4种类型,把其中一类作为正样本,另外3个作为负样本,可以得到4个二分类器,预测数据取分类为正的那个值(因为分类为负,我们无法判断是另外3类中的哪一类)
-----------------------------------------------------------------------------------
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没有处理缺失值的策略(决策树有)。