Machine Learning Theory Review

提问

  1. ID3,C4.5,CART的区别

  2. XGboost如何处理不平衡数据集

  3. Sklearn计算相关系数的几种方式

  • 离散与离散变量之间的相关性——卡方检验、信息墒/信息增益
  • 连续与连续变量之间的相关性——协方差、Pearson相关系数(corrcoef)
  1. SQL如何优化解决数据倾斜问题
    数据倾斜即指在大数据计算任务中某个处理任务的进程(通常是一个JVM进程)被分配到的任务量过多,导致任务运行时间超长甚至最终失败,进而导致整个大任务超长时间运行或者失败。外部表现的话,在HiveSQL任务里看到map或者reduce的进度一直是99%持续数小时没有变化;在SparkSQL里则是某个stage里,正在运行的任务数量长时间是1或者2不变。
    1)读倾斜。即某个map(HiveSQL)或者task(SparkSQL)在读取数据阶段长期无法完成。这通常是因为文件分块过大或者此分块数据有异常。这种场景出现频率较小。

2)算倾斜。即在某个需要排序(如开窗函数或者非广播关联时)或者聚合操作的时候,同一个key(通常是一个或者多个字段或者表达式的组合)的处理耗时过长。这通常是最多的情况,情况也较为复杂。

3)写倾斜。即某个操作需要输出大量的数据,比如超过几亿甚至几十亿行。主要出现在关联后数据膨胀及某些只能由一个task来操作(如limit)的情况。

4)文件操作倾斜。即数据生成在临时文件夹后,由于数量巨大,重命名和移动的操作非常耗时。这通常发生在动态分区导致小文件的情况。目前在国内和印度区域已经因为我们默认进行小文件合并而不再存在这个情况,新加坡还有(我们在推动解决)。

map数据倾斜
做好分区剪裁,尽量先用where过滤其他,分段跑

join数据倾斜
大小表关联,且小表是从表,使用map join
都是大表时,将空值变成随机值

reduce数据倾斜
用两次 group by 代替 count distinct
不同指标的 count distinct 放到多段 SQL 中执行,执行后再 UNION 或 JOIN 合并

  1. rand(7)构造rand(20)

假如有了一个从自然数中随机取一个数的函数rand(0,7)——从0到7中随机取一个自然数出来,问如何用这个函数构造rand(0,20)——随机从0到20中取一个自然数出来。

参考发现如果直接结果相加确实不符合rand()分布
思路:1/20
P(ABC)=1/20=1/21/21/5
第一次:1~6中的奇和偶数是一样多,所以可以看成奇数和偶数是一样的,也就是0.5,那么7就可以丢弃。
第二次:我们可以挑选1~5,[6,7]丢弃,那么1 ~5的每个数字的概率都是0.2;
第三次:我们继续可以挑选1~5,[6,7]丢弃,那么1 ~5的每个数字的概率都是0.2;
最后一次:挑选大于6的,条件等于7,那么概率就是1

会有bug,就是不符合条件的值会变成None,做一个条件要求

1. Decision Tree

决策树算法的核心是要解决两个问题:
1)如何从数据表中找出最佳节点和最佳分枝?
Ans: Gini, Entropy

Gini越小越好, GINI为不纯度
Entropy, 熵是对不确定性的度量,在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。
Information_Entropy越大越好(sklearn计算的就是信息增益)

信息墒更敏感,生成树更精细,速度更慢,高维容易过拟合

在这里插入图片描述

2)如何让决策树停止生长,防止过拟合?
ans: 剪枝
在这里插入图片描述
使用确定超参数的曲线来进行判断,填写参数,以查找max_depth为例

import matplotlib.pyplot as plt
test = []
for i in range(10):
clf = tree.DecisionTreeClassifier(max_depth=i+1
,criterion="entropy"
,random_state=30
,splitter="random"
)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()

每个模型都有自己的决策上限,所以一个怎样调整都无法提升表现的可能性也是有的。当一个模型怎么调整都不行的时候,我们可以选择换其他的模型使用,不要在一棵树上吊死。

最擅长月亮型数据的是最近邻算法,RBF支持向量机和高斯过程;最擅长环形数据的是最近邻算法和高斯过程;最擅长对半分的数据的是朴素贝叶斯,神经网络和随机森林。

2. RandomForest

集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或
分类表现。
在这里插入图片描述n_estimators越大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。

一般而言,单个决策树表现越好,随机森林也越好

交叉验证:是数据集划分为n分,依次取每一份做测试集,每n-1份做训练集,多次训练模型以观测模型稳定性的方法

随机森林中有三个非常重要的属性:.estimators_,.oob_score_以及.feature_importances_。

.estimators_是用来查看随机森林中所有树的列表

oob_score_指的是袋外得分。随机森林为了确保林中的每棵树都不尽相同,所以采用了对训练集进行有放回抽样的
方式来不断组成信的训练集
,在这个过程中,会有一些数据从来没有被随机挑选到,他们就被叫做“袋外数据”。
些袋外数据
,没有被模型用来进行训练,sklearn可以帮助我们用他们来测试模型,测试的结果就由这个属性
oob_score_来导出,本质还是模型的精确度。

而.feature_importances_和决策树中的.feature_importances_用法和含义都一致,是返回特征分数

随机森林的接口与决策树完全一致,因此依然有四个常用接口:apply, fit, predict和score。除此之外,还需要注
意随机森林的predict_proba接口,这个接口返回每个测试样本对应的被分到每一类标签的概率,标签有几个分类
就返回几个概率。如果是二分类问题,则predict_proba返回的数值大于0.5的,被分为1,小于0.5的,被分为0。

传统的随机森林是利用袋装法中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均
每个样本对应的predict_proba返回的概率
,得到一个平均概率,从而决定测试样本的分类

调参思路

当模型在未知数据(测试集或者袋外数据)上表现糟糕时,我们说模型的泛化程度不够,泛化误差大,模型的效果不好。泛化误差受到模型的结构(复杂度)影响。
e r r D err_D errD: generation error - e r r D ( h ) = P r ( x , y ) ∗ [ h ( x ) ≠ y ] err_D(h)=Pr_{(x,y)} *[h_(x) \neq y] errD(h)=Pr(x,y)[h(x)=y]

针对树模型和树的继承模型调参的顺序
在这里插入图片描述

PCA

PCA使用的信息量衡量指标,就是样本方差,又称可解释性方差,方差越大,特征所带的信息量越多。

方差计算公式为什么是n-1,方差反应离散度,随机变量去估计一个参数
信息量。 从x1到xn 是n个信息量;但要用到平均值 ,因此x1到xn只有n-1个信息量,因为任一个xi可以由其他n-1个信息及平均值求出,因为只有n-1个信息量,所以要除n-1

降维算法创造特征(压缩了)

XGboost

Lightgbm

Linear Regression

h θ ( x ) = ∑ θ i ∗ x i = θ T ∗ x h_{\theta}(x)=\sum\theta_i*x_i=\theta^T*x hθ(x)=θixi=θTx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值