介绍数据挖掘的一般流程。尚未明了的地方绿字标注,继续学习。
数据挖掘是从大量数据中挖掘出有趣模式和知识的过程。数据源一般是数据库、数据仓库、Web等,得到的数据称为数据集(dataset)。其中数据仓库是data mining独有内容,是从多个数据源收集的信息存储库。按照William H.Inmon的说法,“数据仓库是一个面向主题的、集成的、时变的、非易失的数据集合,支持管理者的决策过程”。
一般数据集是已经存在的或者至少知道如何获得的(访问某个资料库,网上过滤抓取需要的数据,问卷调查手动收集等)。数据集的选取对数据挖掘模式是否有趣起决定作用。一般的数据挖掘模式有频繁模式,用于预测分析的分类和回归模式,聚类分析模式等,代表着数据挖掘的某种目的。最开始做实验的时候并不知道自己想要做什么(一般都是现有数据集或者想法,再有数据挖掘),于是查看一些常见的数据集网站(下附),寻找自己感兴趣的数据集,毕竟兴趣是最好的老师,兴趣有了,数据挖掘才能开心地做下去。
UCI机器学习和智能系统 https://archive.ics.uci.edu/ml/datasets/
kdd 2015预测学堂在线退课率 https://www.kddcup2015.com/information.html
数据挖掘 数据集下载搜集整理版 http://blog.sina.com.cn/s/blog_5c9288aa01014a56.html
一般来说,在获得了原始数据之后,不能直接开始进行统计分析等操作。因为通常我们获得的数据都是「脏」数据,在分析之前需要进行数据的清洗。对于清洁的数据(tidy data)的定义为:
- 每个变量各占一列
- 每个观测值各占一行
- 每个表格或者文件只储存一种观测值的数据
对于数据清洗,Python中著名的pandas包可以进行十分方便的处理([具体可见这篇博文])。而在R中,也有dplyr包以及tidyr包用来进行数据的整理。
(1)数据清理
忽略元祖
人工填写缺失值
使用属性的中心度量填充
给定同一类所有样本的属性均值或中位数填充
最可能的值填充
(2)数据集成
实体识别
冗余和相关分析(卡方检验,相关系数,协方差等,用spss比较方便)
(3)数据归约
维规约(小波变换和主成分分析,最常用)
数量规约(较小的数据替代原始数据)
数据压缩(有损无损两种,尤其对于图像视频等多媒体常用)
(4)数据变换和数据离散化
数据变换:光滑,属性构造,聚集,规范化,离散化和概念分层。
图3 数据规范化常见方法
图4 数据离散化
Eg:3-4-5规则,根据最高有效位个数分:
分为3类:最高有效位个数为 3 6 7 9
4 2 4 8
5 1 5
一般步骤:取min5%,max95%;根据3-4-5规则分段;根据两端调整分段
意义:避免维度灾难,降低模型复杂度,提高模型可解释性。
a.嵌入式选择:将特征选择和学习器结合,让模型训练过程中自动进行特征选择,比如各种树模型;
嵌入式特征选择是将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择。
sklearn提供了SelectFromModel
来实现嵌入式特征提取。SelectFromModel使用外部提供的estimator来工作。estimator必须有coef_或feature_importances属性。
原型为 class sklearn.feature_selection.SelectFromModel(estimator,threshold=None,prefit=False)
b.包裹式选择:以模型最终的学习性能作为特征集的评估准则,选择好的特征集,但因为需要训练多个模型,开销很大,不推荐;
包裹式特征选择直接把最终要使用的学习器的性能作为特征子集的评价准则。
包裹式特征选择的目的就是为给定学习器选择最有利于其性能,“量身定做”的特征子集。
由于包裹式特征选择方法直接针对给定学习器进行优化,因此从最终学习器性能看,包裹式特征选择比过滤式特征选择更好。
另一方面,特征选择过程中需多次训练学习器,因此包裹式特征选择的计算开销通常比过滤式特征选择大得多。
1.递归特征消除RFE
首先:学习器在初始特征集合以及初始的权重上训练。
class sklearn.feature_selection.RFE(estimator,n_features_to_select=None,step=1,estimator_params=None,verbose=0)
2.RFECV
sklearn还提供了RFECV类,它是RFE的一个变体,它执行一个交叉验证来寻找最优的剩余特征数量,因此不需要指定保留多少个特征。原型为 class sklearn.feature_selection.RFECV(estimator,step=1,cv=None,scoring=None,estimator_params=None,verbose=0)
c.过滤式选择:计算每个特征与相应变量的相关性,过滤掉相关性较低的特征,但实际应用中,一般会逐个特征分析与预测变量的关系,在Pandas中有很多相关函数(describe,value_counts()等等)可以很清晰的表示出两者关系,也可以通过画图。
相当于先用特征选择过程个对初始特征进行“过滤”,再用过滤后的特征来训练模型。
1.方差阈值选择
方差很小的属性,意味着该属性的识别能力很差。极端情况下,方差为0,意味着该属性在所有样本上的值都是一个常数。 sklearn
库提供feature_selection.VarianceThreshold(threshold=0.0)
方法可以通过计算各个属性上的方差过滤掉小于指定阈值的属性。
2.单变量特征提取
通过计算每个特征的某个统计指标,然后根据该指标来选取特征。 sklearn
库提供feature_selection.SelectKBest
和feature_selection.SelectPercentile
方法可保留在指定统计指标上得分最高的k个特征或百分之k个特征。
sklearn提供的统计指标函数有
d.降维,用相关算法处理数据集,对特征重要性进行排序,取重要性大的特征,例如PCA等。
(1)数据归一化:一般的模型都需要归一化,原因:将数据维度都调整到某范围内。注意点:训练集归一化的时候要计算最大值和最小值,测试集归一化的时候也要用训练集的最大和最小值进行归一化。
(2)模型选择:不管怎么样先用随机森林(Random Forest)试试,效果总不会太差,可以以这个为度量来评估后续模型的好坏。一般越复杂的模型效果越高,GBDT,XGBOOST等,但如果需求是解释性模型较高时,还是线性模型好;
(3)建模:开源的机器学习包,Sklearn.
(4)调参:交叉验证!先大范围的调,然后再小范围的调参,直到找到相对较好的参数。
参考链接:
[1]https://blog.csdn.net/cppjava_/article/details/76820427