数据分析面试常见问题(实习&秋招)
1、sql:
(1) 除了熟练掌握基本的select from where group by having,左右外内连接,union和union all,去重,if then else,case when end 还要熟练掌握各种聚合函数,如sum,max,count
(2)开窗函数
(3)字符串处理函数
distinct和group by 的区别
distinct只是将重复的行从结果中出去;
group by是按指定的列分组,一般这时在select中会用到聚合函数。
distinct是把不同的记录显示出来。
group by是在查询时先把纪录按照类别分出来再查询。
group by 必须在查询结果中包含一个聚集函数,而distinct不用。
distinct是将所有查询的字段进行对比去重,所有字段都完全相同才会去重
distinct 必须放在查询字段开头进行查询
group by 根据字段进行去重,字段相同就会去重
mysql索引问题
哪些情况下可以创建索引:
1、字段的数值有唯一性的限制,比如用户名
索引本身可以起到约束的作用,比如唯一索引,主键索引都是可以起到唯一性约束的。在数据表中,如果某个字段是唯一性的,就可以直接创建唯一性约束,或者主键索引。
2、频繁作为 WHERE 查询条件的字段,尤其在数据表大的情况下
3、需要经常 GROUP BY 和ORDER BY 的列
4、UPDATE 、DELETE 的 WHERE 条件列,一般也需要创建索引
5、DISTINCT 字段需要创建索引
做多表JOIN连接操作时,创建索引需要注意以下原则:
连接表的数量尽量不要超过3张,因为每增加一张表就相当于增加了一次嵌套的循环,数量级增长会非常快,严重影响查询的效率
对用于连接的字段创建索引,并且该字段在多张表中的类型必须一致。
索引不是万能的,有一些情况是不需要创建索引的,比如:
1、WHERE 条件(包括GROUP BY 、ORDER BY)里用不到的字段不需要创建索引,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的。2、表记录太少,比如少于1000个,那么是不需要创建索引的。表记录太少,是否创建索引对查询效率的影响并不大。
3、字段中如果有大量重复数据,也不用创建索引,比如性别字段。除此之外还需要考虑数值的分布情况。
4、频繁更新的字段不一定要创建索引。因为更新数据的时候,也需要更新索引,如果索引太多,在更新索引的时候也会造成负担,从而影响效率。
常见的索引失效的例子:
1、如果索引进行了表达式计算,则会失效。
-
如果对索引使用函数,也会造成失效。
-
在WHERE 子句中,如果在OR 前的条件列进行了索引,而在 OR 后的条件列没有进行索引,那么索引会失效。
-
当我们使用LIKE 进行模糊查询的时候,后面不能是 % 。
-
索引列尽量设置为 NOT NULL 约束。
2、在使用联合索引的时候要注意最左原则
最左原则就是需要从左到右的使用索引中的字段,一条SQL语句可以只使用联合索引的一部分,但是需要从最左侧开始,否则就会失效。
索引的作用
- 提高查询效率
- 消除数据分组、排序
- 避免“回表”查询(索引覆盖)
- 优化聚合查询
- 用于多表JOIN关联查询
- 利用唯一性约束,保证数据唯一性
- InnDB行锁实现
- 增加I/O成本
- 增加磁盘空间
- 不合适的索引或索引过多,会降低增删改的效率
索引的分类
1、存储结构
- BTREE:InnoDB & MyISAM
- HASH:HEAP,NDB,InnoDB AHI
- Fractal Tree:TokuDB
- RTREE
- FULLTEXT
2、数据的存储方式
- 聚集索引:聚簇索引的顺序就是数据的物理存储顺序,索引与数据存放在同一个文件中。
- 非聚集索引:非聚簇索引的顺序与数据的物理存储顺序不同,索引与数据存放在不同的文件。
3、应用层次
- 单列:主键索引、唯一索引、普通索引
- 多列:复合索引
查询效率问题
1、sql连接大小表在前在后的重要性(小表在前提高执行效率)。2、left join比 inner join 慢
3、尽量避免子查询,而用join
4、Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
- Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
- union all的执行效率要比sql union效率要高很多
5、外层查询表小于子查询表,则用exists,外层查询表大于子查询表,则用in,如果外层和子查询表差不多,则爱用哪个用哪个。
not in 和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引;而not extsts的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。
连续登陆天数 # 方法一: select uid,min(day)"连续登录开始日",count(*) "连续登录天数" from (select uid,b.day,daynum,rownum,daynum-rownum as days from (select uid,day,ROW_NUMBER() OVER(PARTITION BY uid ORDER BY uid,day) as rownum from (select uid,day from hive.traffic.access_user where day>=20***01 and uid<>'') group by day,uid ) as b join (select day,ROW_NUMBER() OVER(ORDER BY day) daynum from hive.ods.dim_date) as c on b.day=c.day)as d group by uid,days # 方法二: #DATE_SUB()函数从DATETIME值中减去时间值(或间隔)。 SELECT user_id,date_sub(login_time,interval rank day) as login_group,min(login_time) as 连续登录开始日 ,max(login_time) as 连续登录结束日,count(1) as 连续登录天数 FROM ( SELECT user_id,login_time,row_number() OVER(PARTITION BY user_id order by login_time) as rank FROM test.user_login ) a GROUP BY user_id,date_sub(login_time,interval rank day))
2、业务知识
(1) A/B测试+辛普森悖论
(2) 指标异动分析
没有固定的答案,但要有一套自己的分析体系,重点是要划分好维度和内外部综合分析。
1.1 数据的周期性波动
数据的周期性波动是一种自然形态的波动,例如,公众号文章的阅读量周内普遍高于周末阅读量。
1.2 业务内部因素影响
通常情况下内部影响都是来源于业务的活动,例如,运营经常组织的拉新、促活、促销等活动通常会造成某一段时间内的活跃用户数、销售额等指标高于平时。
1.3 外部因素影响
除了业务内部行为造成的数据波动,当然还会有一些外部因素造成的数据波动,例如,天气、政策、竞对等各种因素。
1.4 数据传输问题
数据波动还可能受到数据传输的影响,可能某天某个调度脚本挂了而造成数据缺失,因而造成了数据异动。
(3) 指标体系搭建
一般会给一个场景,让你搭建指标体系去衡量最终的业务情况
(4)数据分析报告怎么写
3、数据预处理&机器学习常用算法
(1) k-means、决策树、随机森林、逻辑回归、朴素贝叶斯、SVM、KNN、boosting、Bagging
kmeans聚类(无监督):
Kmeans算法是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数
基本步骤
step1:选定要聚类的类别数目k(如上例的k=3类),选择k个中心点。
step2:针对每个样本点,找到距离其最近的中心点(寻找组织),距离同一中心点最近的点为一个类,这样完成了一次聚类。
step3:判断聚类前后的样本点的类别情况是否相同,如果相同,则算法终止,否则进入step4。
step4:针对每个类别中的样本点,计算这些样本点的中心点,当做该类的新的中心点,继续step2
优点:
1)原理比较简单,实现也是很容易,收敛速度快。
2)聚类效果较优。
3)算法的可解释度比较强。
4)主要需要调参的参数仅仅是类别数目k。
缺点:
1)K值的选取不好把握(改进:可以通过在一开始给定一个适合的数值给k,通过一次K-means算法得到一次聚类中心。对于得到的聚类中心,根据得到的k个聚类的距离情况,合并距离最近的类,因此聚类中心数减小,当将其用于下次聚类时,相应的聚类数目也减小了,最终得到合适数目的聚类数。可以通过一个评判值E来确定聚类数得到一个合适的位置停下来,而不继续合并聚类中心。重复上述循环,直至评判函数收敛为止,最终得到较优聚类数的聚类结果)。
2)对于不是凸的数据集比较难收敛(改进:基于密度的聚类算法更加适合,比如DESCAN算法)
3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
4) 采用迭代方法,得到的结果只是局部最优。
5) 对噪音和异常点比较的敏感(改进1:离群点检测的LOF算法,通过去除离群点后再聚类,可以减少离群点和孤立点对于聚类效果的影响;改进2:改成求点的中位数,这种聚类方式即K-Mediods聚类(K中值))
决策树(监督学习):
决策树分类算法是一种基于实例的归纳学习方法,它能从给定的无序的训练样本中,提炼出树型的分类模型。树中的每个非叶子节点记录了使用哪个特征来进行类别的判断,每个叶子节点则代表了最后判断的类别。根节点到每个叶子节点均形成一条分类的路径规则。而对新的样本进行测试时,只需要从根节点开始,在每个分支节点进行测试,沿着相应的分支递归地进入子树再测试,一直到达叶子节点,该叶子节点所代表的类别即是当前测试样本的预测类别。
决策树是一个预测模型。它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分支叉路径则代表某个可能的属性值,而每个叶节点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测。从数据产生决策树的机器学习技术叫做决策树学习,通俗说就是决策树。
决策树的树枝节点表示属性,也叫决策节点;树叶节点表示类标签,也叫决策结果。决策树是由从上到下的根节点依次延伸而成,依据属性阈值的差异性延伸到各个地方直至下一个属性节点,一直延长到最后的叶子节点完成预测。
CART算法优点:除了具有一般决策树的高准确性、高效性、模式简单等特点外,还具有一些自身的特点。如,CART算法对目标变量和预测变量在概率分布上没有要求,这样就避免了因目标变量与预测变量概率分布的不同造成的结果;CART算法能够处理空缺值,这样就避免了因空缺值造成的偏差;CART算法能够处理孤立的叶子结点,这样可以避免因为数据集中与其它数据集具有不同的属性的数据对进一步分支产生影响;CART算法使用的是二元分支,能够充分地运用数据集中的全部数据,进而发现全部树的结构;比其它模型更容易理解,从模型中得到的规则能获得非常直观的解释。
CART算法缺点:CART算法是一种大容量样本集挖掘算法,当样本集比较小时不够稳定;要求被选择的属性只能产生两个子结点,当类别过多时,错误可能增加得比较快。
优点:
• 决策树易于理解和实现. 人们在通过解释后都有能力去理解决策树所表达的意义。
• 对于决策树,数据的准备往往是简单或者是不必要的 . 其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性。
• 能够同时处理数据型和常规型属性。其他的技术往往要求数据属性的单一。
• 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。
• 对缺失值不敏感
• 可以处理不相关特征数据
• 效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。
缺点:
1)对连续性的字段比较难预测。
2)对有时间顺序的数据,需要很多预处理的工作。
3)当类别太多时,错误可能就会增加的比较快。
4)一般的算法分类的时候,只是根据一个字段来分类。
5)在处理特征关联性比较强的数据时表现得不是太好
随机森林(监督学习):
随机森林实际上是一种特殊的bagging方法,它将决策树用作bagging中的模型。首先,用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树,在节点找特征进行分裂的时候,并不是对所有特征找到能使得指标(如信息增益)最大的,而是在特征中随机抽取一部分特征,在抽到的特征中间找到最优解,应用于节点,进行分裂。随机森林的方法由于有了bagging,也就是集成的思想在,实际上相当于对于样本和特征都进行了采样(如果把训练数据看成矩阵,就像实际中常见的那样,那么就是一个行和列都进行采样的过程),所以可以避免过拟合
随机森林中有许多的分类树。要将一个输入样本进行分类,需要将输入样本输入到每棵树中进行分类。每棵决策树都是一个分类器,那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出
优点:
1、表现性能好,与其他算法相比有着很大优势。
2、随机森林能处理很高维度的数据(也就是很多特征的数据),并且不用做特征选择。
3、在训练完之后,随机森林能给出哪些特征比较重要。
4、训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的)。
5、在训练过程中,能够检测到feature之间的影响。
6、对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。
7、如果有很大一部分的特征遗失,用RF算法仍然可以维持准确度。
8、随机森林算法有很强的抗干扰能力(具体体现在6,7点)。所以当数据存在大量的数据缺失,用RF也是不错的。
9、随机森林抗过拟合能力比较强(虽然理论上说随机森林不会产生过拟合现象,但是在现实中噪声是不能忽略的,增加树虽然能够减小过拟合,但没有办法完全消除过拟合,无论怎么增加树都不行,再说树的数目也不可能无限增加的。)
10、随机森林能够解决分类与回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。
11、在创建随机森林时候,对generlization error(泛化误差)使用的是无偏估计模型,泛化能力强。
缺点:
1、随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。
2、对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。
3、可能有很多相似的决策树,掩盖了真实的结果。
4、对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。
5、执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了。
逻辑回归:(有监督机器学习)
什么是逻辑回归?
逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。
Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)
应用场景:
用于分类场景, 尤其是因变量是二分类(0/1,True/False,Yes/No)时我们应该使用逻辑回归。
优点:
(1)训练速度较快,分类的时候,计算量仅仅只和特征的数目相关;
(2)简单易理解,模型的可解释性非常好,从特征的权重可以看到不同的特征对最后结果的影响;
(3)适合二分类问题,不需要缩放输入特征;
(4)内存资源占用小,因为只需要存储各个维度的特征值;
缺点:
(1)不能用Logistic回归去解决非线性问题,因为Logistic的决策面向线性的;
(2)对多重共线性数据较为敏感;
(3)很难处理数据不平衡的问题;
(4)准确率并不是很高,因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布;
(5)逻辑回归本身无法筛选特征,有时会用gbdt来筛选特征,然后再上逻辑回归
SVM支持向量机(监督学习)
支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。
优点:
(1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射;
(2)对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心;
(3)支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量。
(4)SVM 是一种有坚实理论基础的新颖的小样本学习方法。它基本上不涉及概率测度及大数定律等,因此不同于现有的统计方法。从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”,大大简化了通常的分类和回归等问题。
(5)SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。
(6)少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在:
①增、删非支持向量样本对模型没有影响;
②支持向量样本集具有一定的鲁棒性;
③有些成功的应用中,SVM 方法对核的选取不敏感
缺点:
(1) SVM算法对大规模训练样本难以实施
(2) 用SVM解决多分类问题存在困难
KNN最近邻(监督学习):
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比
优点:
1.理论成熟,思想简单,既可以用来做分类又可以做回归
2.可以用于非线性分类
3.训练时间复杂度比支持向量机之类的算法低
3.和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
4.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属的类别,因此对于类域的交叉或重叠较多的待分类样本集来说,KNN方法较其他方法更为适合
5.该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量比较小的类域采用这种算法比较容易产生误分类情况
缺点:
1.计算量大,尤其是特征数非常多的时候
2.样本不平衡的时候,对稀有类别的预测准确率低
3.KD树,球树之类的模型建立需要大量的内存
4.是慵懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢
5.相比决策树模型,KNN模型的可解释性不强
朴素贝叶斯(监督学习):
0、思想:
对于给定的待分类项x,通过学习到的模型计算后验概率分布,即:在此项出现的条件下各个目标类别出现的概率,将后验概率最大的类作为x所属的类别。后验概率根据贝叶斯定理计算。
关键:为避免贝叶斯定理求解时面临的组合爆炸、样本稀疏问题,引入了条件独立性假设。用于分类的特征在类确定的条件下都是条件独立的。
朴素贝叶斯有什么优缺点?
优点:
朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
对缺失数据不太敏感,算法也比较简单,常用于文本分类。
分类准确度高,速度快。
对小规模的数据表现很好,能处理多分类任务,适合增量式训练,当数据量超出内存时,我们可以一批批的去增量训练(朴素贝叶斯在训练过程中只需要计算各个类的概率和各个属性的类条件概率,这些概率值可以快速地根据增量数据进行更新,无需重新全量计算)。
缺点:
对训练数据的依赖性很强,如果训练数据误差较大,那么预测出来的效果就会不佳。
理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。
但是在实际中,因为朴素贝叶斯“朴素,”的特点,导致在属性个数比较多或者属性之间相关性较大时,分类效果不好。
而在属性相关性较小时,朴素贝叶斯性能最为良好。
对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
需要知道先验概率,且先验概率很多时候是基于假设或者已有的训练数据所得的,这在某些时候可能会因为假设先验概率的原因出现分类决策上的错误。
然而,这种方法却有很大的局限性。 它以减少历史数据来换取信息的完备,会丢弃大量隐藏在这些对象中的信息。 在初始数据集包含的对象很少的情况下,删除少量对象足以严重影响信息的客观性和结果的正确性;因此,当缺失数据所占比例较大,特别当遗漏数据非随机分布时,这种方法可能导致数据发生偏离,从而引出错误的结论。
说明:删除元组,或者直接删除该列特征,有时候会导致性能下降。
2、数据补齐:
这类方法是用一定的值去填充空值,从而使信息表完备化。通常基于统计学原理, 根据初始数据集中其余对象取值的分布情况来对一个缺失值进行填充 。数据挖掘中常用的有以下几种补齐方法:
3、人工填写(filling manually)
由于最了解数据的还是用户自己,因此这个方法产生数据偏离最小,可能是填充效果最好的一种。然而一般来说,该方法很费时,当数据规模很大、空值很多的时候,该方法是不可行的。
4、平均值填充(Mean/Mode Completer)
将初始数据集中的属性分为数值属性和非数值属性来分别进行处理 。
如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;
如果空值是非数值型的,就根据统计学中的众数原理 ,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。
与其相似的另一种方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,用于求平均的值并不是从数据集的所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。
这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。
5、热卡填充(Hot deck imputation,或就近补齐)
对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。
6、K最近距离邻法(K-means clustering)
先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
使用所有可能的值填充(Assigning All Possible values of the Attribute)
用空缺属性值的所有可能的属性取值来填充,能够得到较好的补齐效果。但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大,可能的测试方案很多。
6、组合完整化方法(Combinatorial Completer)
用空缺属性值的所有可能的属性取值来试,并从最终属性的约简结果中选择最好的一个作为填补的属性值。这是以约简为目的的数据补齐方法,能够得到好的约简结果;但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大。
7、回归(Regression)
基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。
8、期望值最大化方法(Expectation maximization,EM)
EM算法是一种在不完全数据情况下计算极大似然估计或者后验分布的迭代算法。在每一迭代循环过程中交替执行两个步骤:E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。算法在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
8、多重填补(Multiple Imputation,MI)
为每个空值产生一套可能的填补值,这些值反映了无响应模型的不确定性;每个值都被用来填补数据集中的缺失值,产生若干个完整数据集合。
每个填补数据集合都用针对完整数据集的统计方法进行统计分析。
对来自各个填补数据集的结果进行综合,产生最终的统计推断,这一推断考虑到了由于数据填补而产生的不确定性。该方法将空缺值视为随机样本,这样计算出来的统计推断可能受到空缺值的不确定性的影响。该方法的计算也很复杂。
9、C4.5方法
通过寻找属性间的关系来对遗失值填充。它寻找之间具有最大相关性的两个属性,其中没有遗失值的一个称为代理属性,另一个称为原始属性,用代理属性决定原始属性中的遗失值。这种基于规则归纳的方法只能处理基数较小的名词型属性。
就几种基于统计的方法而言,删除元组法和平均值法差于热卡填充法、期望值最大化方法和多重填充法;回归是比较好的一种方法,但仍比不上hot deck和EM;EM缺少MI包含的不确定成分。值得注意的是,这些方法直接处理的是模型参数的估计而不是空缺值预测本身。它们合适于处理无监督学习的问题,而对有监督学习来说,情况就不尽相同了。譬如,你可以删除包含空值的对象用完整的数据集来进行训练,但预测时你却不能忽略包含空值的对象。另外,C4.5和使用所有可能的值填充方法也有较好的补齐效果,人工填写和特殊值填充则是一般不推荐使用的。
10、不处理
补齐处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实,在对不完备信息进行补齐处理的同时,我们或多或少地改变了原始的信息系统。而且,对空值不正确的填充往往将新的噪声引入数据中,使挖掘任务产生错误的结果。因此,在许多情况下,我们还是希望在保持原始信息不发生变化的前提下对信息系统进行处理。
不处理缺失值,直接在包含空值的数据上进行数据挖掘的方法包括贝叶斯网络和人工神经网络等。
总结
大多数数据挖掘系统都是在数据挖掘之前的数据预处理阶段采用第一、第二类方法来对空缺数据进行处理。并不存在一种处理空值的方法可以适合于任何问题。无论哪种方式填充,都无法避免主观因素对原系统的影响,并且在空值过多的情形下将系统完备化是不可行的。从理论上来说,贝叶斯考虑了一切,但是只有当数据集较小或满足某些条件(如多元正态分布)时完全贝叶斯分析才是可行的。而现阶段人工神经网络方法在数据挖掘中的应用仍很有限。值得一提的是,采用不精确信息处理数据的不完备性已得到了广泛的研究。不完备数据的表达方法所依据的理论主要有可信度理论、概率论、模糊集合论、可能性理论,D-S的证据理论等。
常见的解决不平衡问题的方法如下:
1 数据采样
数据采样通过对原始数据集进行处理,使各类别数据比例维持在一个合理的比例。可分为上采样和下采样。
(1)上采样。上采样(Oversampling)是通过把少量数据类别的数据重复复制的方法使各类别数据比例维持在合理的比例,但是基于这样采样方法训练出来的模型容易出现过拟合,可以在每次生成新数据的时候加入轻微随机扰动。
(2)下采样。下采样(Undersampling)是通过从多数数据类中筛选出部分数据使各类别数据比例维持在合理的比例,但是这种采样方法容易丢失关键数据,可以通过多次随机下采样来解决。
2 数据合成
数据合成是利用已有样本的特征相似性生成更多新的样本,主要应用在小数据场景下,如医学图像分析。
3 加权
加权的方法是通过对不同类别分类错误施加不同权重的代价,使得不同类别的加权损失值近似相等。
4 一分类
当正负样本比例严重失衡时,靠单纯的采样和数据合成已经并不能很好地解决问题。因为上述方法虽然解决了训练数据的正负样本比例问题,但却严重偏离了原始数据的真实分布情况,会导致模型训练结果并不能真正反映实际的情况,会有很大的偏差。
此时,可以考虑用一分类(One-class Classification)来解决。最常见的一分类方法是One-class SVM,其基本思路如下:利用高斯核函数将样本空间映射到核空间,在核空间中找到一个能够包含所有数据的一个球体,当进行判别时,如果测试数据位于这个高维球体之中,则将其归为多数类,否则就归为少数类。一分类除了可用来解决数据严重不平衡时的分类问题,还可以应用于金融和医疗领域的异常检测。
总结来说,在样本数据量较大,且正负样本比例相差并不悬殊(两个数量级以内)的情况下,可以考虑使用采样或加权的方法解决;在正负样本数据都非常之小时,可以考虑用数据合成的方法解决;在正负样本数据比例相差悬殊的情况下,可以考虑用一分类的方法解决。
(4) 评估模型的指标,
4、统计学原理
(1)p值、显著性水平
(2)一类错误和二类错误
(3)大数定律、中心极限定理
(4)假设检验、方差分析
5、python
(1)数据结构:列表,元组,字典,集合
(2) pandas、numpy、matplotlib、xlwt\openpyxl
#高频知识点汇总##学习路径##数据分析师##面试题目#