当我们说数据挖掘的时候我们在说什么
开头下定语:统计学习
现在市面上谈论到的数据挖掘基本上都是基于统计学习的监督学习或非监督学习问题。尤其以监督学习应用面更广。
统计学习的应用
- 分类问题:客户分类模型、异常鉴别、图像识别等
- 标注问题:信息抽取、自然语言处理等
- 标注问题:信息抽取、自然语言处理等
统计学习的一般流程
- 得到一个有限的数据集合
- 确定所有的学习模型集合
- 确定模型选择的准则,就是学习的策略
- 实现求解最优模型的算法并通过学习方法选择最优模型
- 利用学习得到的最优模型对新数据进行分析或预测
步骤一:得到一个有限的数据集合 涉及到以下多个流程:
- 数据的采集
- 原始数据的格式化、标准化
- 原始去噪,去掉错误的值(而不是误差值,这里又涉及到一个复杂的问题,如何界定错误数据)
- 预处理(针对具体需要研究的问题、抽取相应地特征组成需要研究的数据集合)
步骤二:确定所有的学习模型集合
这个问题取决于我们选择怎么样的学习方法。常见得学习方法有:
- 感知机模型
- k近邻法
- 朴素贝叶斯法
- 决策树
- 逻辑斯谛回归和最大熵模型
- 支持向量机
- 提升方法AdaBoost
- EM算法
- 隐马尔可夫模型
- 条件随机场
- …
而且这些算法还可以进行变异、组合然后形成新的算法模型。也是通常认为中数据挖掘比较核心的部分。
一些论文:历练NIPS和ICML大会的文章
步骤三:确定模型选择的策略
一般来说,当你确定了你的学习方法后,在学习的过程中会产生很多个模型。而如何在这些模型中间挑选最优的模型,成为了我们亟待解决的问题。
一般衡量一个模型的优秀程度我们使用两个指标:
- 拟合能力
- 泛化能力
*拟合能力
表示模型的计算结果和实际结果的相差程度,我们一般使用风险函数来衡量。而风险函数是损失函数的期望。所以我们其实是使用损失函数来衡量一个模型的期望。
常见的损失函数:
- 0-1损失函数
- 平分损失函数
- 绝对值损失函数
- 对数损失函数
损失函数越小,模型的拟合能力就越好。
*泛化能力
泛化能力是指模型对新数据的预测能力。一般来说,越复杂的模型的拟合能力越强,但是泛化能力越弱。所以我们需要选择一个适当复杂度的模型,使其泛化能力和拟合能力都足够强。
而衡量一个模型同时具有较好地泛化能力和拟合能力,我们一般用结构风险函数
结构风险函数是在风险函数的基础上面加上一个罚项。通过罚项来降低复杂度高的模型的结构风险函数值。从而达到筛选出合适的复杂度的模型的目的。
罚项一般取特征空间w的范数,一般有:
- L0范数
- L1范数
- L2范数
- 核范数 …
步骤四:实现求解最优模型的算法并通过学习方法选择最优模型 求解最优模型的算法其实就是求解结构风险函数最小值得算法,即结构风险函数最优化的问题。
如果结构风险函数在我们所关心的区域中是凸函数的话,那么任何局部最小解也是全局最优解。现在已经有稳定,快速的数值计算方法来求二次可微地凸函数的最小值。
然而,很多时候我们没有办法通过结构风险函数直接算出它的最小值。我们只能通过一些迭代的方式获得局部最优解。
常见的通过迭代的方式获得局部最优解的算法有:
- 梯度下降法
- 牛顿法
- 共轭梯度法
- 线性搜索
- 置信域方法
另外还有一些算法:
- 模拟退火
- 遗传算法
- 类免疫算法
- 演化策略
- 差异演化算法
- 微粒群算法
- 神经网络
- 支持向量机
步骤五:利用学习得到的最优模型对新数据进行分析或预测 到这一步一般来说已经成功了,然后往往现实是残酷的,辛辛苦苦20年,一朝回到解放前。
往往学习得到的模型在实际使用过程当中并不是那么的理想。这里面有很多种原因:
- 有可能是原始数据的原因
- 有可能是特征选择的原因
- 有可能是模型的原因
- 有可能是最优模型算法的问题
- 有可能是代码错误
- …
总之,以上的所有步骤的所有细节都可能导致你的模型不够优秀。这就需要你再次的思考这个问题,去不断的优化你的模型。直到得到一个不错的模型。
Don’t Panic!
Fighting!
小结
上面是我大概总结的一些关于数据挖掘相关的东西。
其实数据挖掘涉及的东西远比我上面说的这点东西多的多,我上面提到的还只是监督学习。就光我上面提到的几个步骤。其实每一个步骤都有很多很多东西可以讲,可以研究,工程方面的、算法理论方面的等等等等。
一入数据挖掘深似海,从此奋斗到天明。
But,Don’t Panic!
数据挖掘还是很有意思的,你可以用机器的力量、数学的力量理解世界的运行规律。去预测他或者利用你研究到的东西做一些有意思的事情。