一、EDA
------explore data analysis,顾名思义,数据探索性分析。主要目的是对数据有个大体的认识
1、看下整体数据信息,有多少行,多少特征,特征是数值还是分类
2、看目标值(假如有)的分布。如果是分类,看看各样本比例是否平衡;如果是回归,看看均值,方差
3、观察特征,看含义是什么?有没有冗余?分布情况如何,有没有异常值,缺失值
4、观察少不了作图,matplotlib.pyplot,你懂的。当然还有一个高级库,seaborn.
二、数据前处理(data preprocessing)
1、缺失值与异常值处理
一般来说,我们采用替换法来处理,常见的有平均值替换,中位数替换、拉格朗日插值法等。特殊情况下我们可以删掉样本(样本量很大),也可以不处理(部分算法对缺失异常值并不敏感)
2、样本不平衡问题
这种主要通过采样来解决。
上采样----在样本数目不够时,对少数类进行过采样。
下采样----在样本数目充足时,对多数类进行欠采样
3、类别属性转换成数值
数据分析中经常遇到类别属性,比如性别,名字等。大多数算法无法直接处理这类数据(决策树不服),需要把他们先处理成数值型变量
one-hot code-----独热编码,用0/1多维向量表示。男 01 女 10
label encoding---标签编码,用自然数进行编码,小学 1 中学 2 大学 3
以上两种编码较常见,但是有其弊端,所以又有均值编码等其他编码方式
4、归一化
常见的有0-1归一化与均值方差标准化
什么时候需要归一化?一般的准则是,该模型关心变量的值。还有就是模型使用梯度下降法求解时也需要。否则很难收敛甚至不能收敛。
不需要归一化的模型----决策树、随机森林、朴素贝叶斯
--------------------------------------------------------------------------------------------------------------------------
三、特征工程(feature engineer)
------数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限罢了
1、特征构建(feature construction)
比如我现在有身高、体重两个特征,输出为胖 瘦 正常。直接喂给模型,可能分类效果并不是特别好,此时我构建了一个新的特征BMI指数。这样分类准确性便大大提高了
2、特征选择(feature selection)
思考一个问题,现在我有几十个特征。所有的特征都和目标有关系吗?特征之间是否存在相关性?更少的特征降低模型的复杂度,一个简单的模型更方便理解与解释
2.1 filter methods(过滤法)
方差选择法:如果一个特征没啥变动,那他对结果基本也没有什么解释性。
最大信息系数:对线性非线性相关都适用,比较健壮
2.2 wrapper methods(包裹法)
RFE:递归特征消除。使用一个有监督的模型来训练,逐步剔除权重较小的特征,.RFE给出的是特征重要性顺序
stability selection:稳定性选择。他的主要思想是在不同的数据子集和特征子集上运行特征选择算法,最终汇总特征选择的结果。该方法性能比较好
2.3 Embedded methods(插入法)
L1正则化:将额外的惩罚项加到模型上面,最后很多特征系数为0.惩罚系数越大,特征系数越稀疏
基于树模型:这里用随机森林的平均精确度减少。主要思想是打乱每个特征的顺序,如果模型的准确度受到影响,说明该特征是重要的。
3. feature extraction(特征提取)
PCA:数据从原来的坐标系转换为新的坐标系,第一个坐标轴选择的是原始数据中方差最大的方向。第二个坐标轴与第一个正交且方差次之,以此类推。最后几个维度的方差很小,可以舍去,故有降维的效果
四、机器学习算法
1、分类算法
决策树:目前一般用CART算法。他建立的是二叉树,分类时使用基尼系数来度量划分点
朴素贝叶斯:一种基于先验概率以及特征独立假设的算法。
KNN算法:根据距离选取K个样本,样本中哪个类别多则划分为哪一类
SVM:除去集成算法,在简单算法里面是很强大的分类算法。通常会用到高斯核函数。核函数是什么?他能把数据映射到高维空间以便线性分开,同时又能在低维进行内积运算。
逻辑回归:是一种线性分类器,主要通过最大似然估计来学习。
2、回归算法
Linear Regression:使用拟合直线在因变量和一个或多个自变量之间建立关系(现实世界不会这么简单,所以就有下面的算法)
逻辑回归:当因变量的类型属于二元变量时,我们就应该使用逻辑回归。
Ridge Regression:主要适用于过拟合严重以及自变量高度相关的情况
Lasso Regression:比岭回归更严厉。如果一组变量高度相关,那么他会选出一组变量并将其他变量系数降低为0.
3、聚类算法
K-Means:基于距离的聚类。目前除了仍必须指定K值外(其实可以调参解决),其他缺点都有改善的办法
DBSCAN:基于密度的算法。缺点是对密度变化比较大时效果不好,但是OPTICS很好的解决了这一问题。
spectral clustering:谱聚类。他的主要思想是把所有的数据看作空间中的点。点之间的相似度看成是带权重的边。聚类时簇的边权重值尽可能高,簇之间尽可能低
4、集成算法
Random Forest:随机森林。从原始样本集中抽取训练集,有放回的抽样。而且每次随机的选取节点上的部分特征进行划分。抽样K次形成K个决策树,每棵树是平行的,独立的。分类结果投票决定。优点泛化能力强
AdaBoost:最开始每个样本的权重是一样的,训练得到第一个分类器,分对的样本权重降低,分错的样本权重提高,然后进行下一轮训练。
GBDT:假设第一轮拟合产生的残差是10,那么第二轮就针对10进行拟合,结果是-5.两者相加等于5.这样逐步逼近0.
XGBoost:和gbdt大体相同。只是在拟合残差时用的是二阶泰勒展开,所以结果更为精确。
五、算法评价与参数调整
聚类算法的评价稍微有些麻烦,一般可以用兰德系数(Rind Index)进行评估。
分类算法可以用平均绝对误差、平均绝对百分误差、均方根误差等评价
分类算法可以用ROC曲线,AUC,混淆矩阵等进行评价
部分算法也自带了评价方法。
参数调整:一般使用GridSearchCV进行调参。