数据分析的一般流程(利用机器学习)

一、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进行调参。

你可能感兴趣的:(数据分析的一般流程(利用机器学习))