三个典型问题相似:1.评估 2.学习 3.解码
1.评估
使用向前后算法进行概率评估
2.学习
此处不同
3.解码
维特比算法解码
不同点:
1.CRF是判别模型, hmm是生成模型
2.在模型训练上,crf是基于优化条件概率的进行求解的 给定X去进行标注y;hmm是联合概率进行优化求解的
3.crf是基于条件概率模型进行建立的,对于观测序列没有进行马尔可夫假设; hmm是在马尔可夫假设前提下进行联合分布的模型
4.crf是一个很复杂的条件概率的模型,因此crf的使用范围要比hmm广泛的多
5.我们经常使用的是liner-crf(线性链条件随机场)假设条件随机中的两个变量有相同的结构,个数相同:词有十个,词性也有十个
p(yi | x, y1, y2,y3….yn) = p(yi | x,yi-1,yi+1)(马尔可夫性)
Crf主要的两个因素是特征函数和权重:
特征函数有两类:1.此节点只喝当前节点有关, 2.局部特征函数,这类函数只和当前节点和上一个节点有关,因为liner-crf 满足马尔可夫性
https://zhuanlan.zhihu.com/p/29989121
主要三个关键指标
1.隐含状态数量
2.转换概率
3.可见状态链
模型主要两种:
1.给定序列,求最大似然路径
2.不给定序列, 直接求出每次最大的概率
建模
1.求出每一种骰子的转化概率(我用的占比情况)
2.计算马尔可夫链,求出最大似然路径阿
https://www.zhihu.com/question/20962240
由于GIL全局解释器锁,所以导致任何时刻仅有一个线程在执行,于是出现了协程:
https://juejin.im/post/5c13245ee51d455fa5451f33
协程的优点:
1.可以随时中断,切换效率比较高,协程依靠线程,对于io密集型任务非常适合协程
2.不需要多线程的锁机制,因为只有一个线程,不存在冲突
python实现方式
1.生成器
2. gevent
3.协程由自己控制
进程是资源分配的最小单位
所以每一个进程独立掌握一个资源,如果一个资源变化其他的进程不会受到影响,但是多线程共享一个变量,如果一个变量变化,所有的线程都会受到影响
多线程无法使用多核CPU因为gil 全局锁,但是可以通过多进程家多线程使用多核CPU
数据库中in 和 exits 的区别
In 会让外表哥内表进行连接 然后依次对比 例如 A100 B100 in 会查询10000词
Exits 只会在内表中进行对比 A100 B100 会查询100次
数据库四大属性
1.原子性
2.隔离性
3.一致性
4.持久性
数据库隔离级别
1.防止幻读 脏读 等
四个级别 度未提交 读已提交 可重复度 串行
更改隔离级别 会导致并能力下降但是安全级别会提高
Hadoop 是一个成熟的生态系统
1.HDFS 分布式存储系统
2.mapreduce 分布式计算框架
3.Yarn 资源调度系统
1.hdfs 结构
2.Yarn
1,Client提交作业请求
2,ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个Container(容器),并将 ApplicationMaster 分发到这个容器上面
3,在启动的Container中创建ApplicationMaster
4,ApplicationMaster启动后向ResourceManager注册进程,申请资源
5,ApplicationMaster申请到资源后,向对应的NodeManager申请启动Container,将要执行的程序分发到NodeManager上
6,Container启动后,执行对应的任务
7,Tast执行完毕之后,向ApplicationMaster返回结果
8,ApplicationMaster向ResourceManager 请求kill
Hive 和 hbase 的区别
Hive 主要是基于mapreduce 的SQL 结构化数据库,主要用于计算和处理结构化数据,查询速度比较慢,不适合实时查询
Hbase 主要是用在实时的查询上,速度比较快
两者多为配合使用,有hdfs 存储数据, 通过hive 进行计算 再通过hbase 进行实时的查询
1.1 思想
从信息论的知识中我们知道:信息熵越大,从而样本纯度越低,。ID3 算法的核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间(C4.5 也是贪婪搜索)。 其大致步骤为:
信息熵: ID3 使用的分类标准是信息增益,它表示得知特征 A 的信息而使得样本集合不确定性减少的程度。
1.初始化特征集合和数据集合;
2.计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
3.更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);
4.重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。
信息增益: 信息增益 = 信息熵 - 条件熵:
缺点:
1.没有剪枝策略,容易过拟合
2.信息增益准则对可取值数目较多的特征倾斜,类似编号的特征信息增益接近于1
3.只能用在离散分布的特征上
4.没有考虑缺失值
2.1 思想
C4.5 相对于 ID3 的缺点对应有以下改进方式:
引入悲观剪枝策略进行后剪枝;
引入信息增益率作为划分标准;
将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
对于缺失值的处理可以分为两个子问题:
问题一:在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
问题二:选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
信息增益率: 利用信息增益率可以克服信息增益的缺点(倾斜于较多数量的特征)
CART 在 C4.5 的基础上进行了很多提升。
C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
C4.5 只能分类,CART 既可以分类也可以回归;
CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。
基尼指数反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。因此基尼指数越小,则数据集纯度越高。基尼指数偏向于特征值较多的特征,类似信息增益。基尼指数可以用来度量任何不均匀分布,是介于 0~1 之间的数,0 是完全相等,1 是完全不相等,
上文说到,模型对于缺失值的处理会分为两个子问题:
如何在特征值缺失的情况下进行划分特征的选择?
选定该划分特征,模型对于缺失该特征值的样本该进行怎样处理?
对于问题 1,CART 一开始严格要求分裂特征评估时只能使用在该特征上没有缺失值的那部分数据,在后续版本中,CART 算法使用了一种惩罚机制来抑制提升值,从而反映出缺失值的影响(例如,如果一个特征在节点的 20% 的记录是缺失的,那么这个特征就会减少 20% 或者其他数值)。
对于问题 2,CART 算法的机制是为树的每个节点都找到代理分裂器,无论在训练数据上得到的树是否有缺失值都会这样做。在代理分裂器中,特征的分值必须超过默认规则的性能才有资格作为代理(即代理就是代替缺失值特征作为划分特征的特征),当 CART 树中遇到缺失值时,这个实例划分到左边还是右边是决定于其排名最高的代理,如果这个代理的值也缺失了,那么就使用排名第二的代理,以此类推,如果所有代理值都缺失,那么默认规则就是把样本划分到较大的那个子节点。代理分裂器可以确保无缺失训练数据上得到的树可以用来处理包含确实值的新数据。
最后通过总结的方式对比下 ID3、C4.5 和 CART 三者之间的差异。
除了之前列出来的划分标准、剪枝策略、连续值确实值处理方式等之外,我再介绍一些其他差异:
划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值小的特征,CART 使用基尼指数克服 C4.5 需要求 log 的巨大计算量,偏向于特征值较多的特征。
使用场景的差异:ID3 和 C4.5 都只能用于分类问题,CART 可以用于分类和回归问题;ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快;
样本数据的差异:ID3 只能处理离散数据且缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大 ;
样本特征的差异:ID3 和 C4.5 层级之间只使用一次特征,CART 可多次重复使用特征;
剪枝策略的差异:ID3 没有剪枝策略,C4.5 是通过悲观剪枝策略来修正树的准确性,而 CART 是通过代价复杂度剪枝。
1.一种特殊的RNN (RNN的基础就是回收循环)
2.解决了梯度爆炸和梯度消失(梯度爆炸和梯度消失都是层数太多了造成的)
3.使用挤压函数(squashing function)tanh(双曲正切函数)(作用就是将模型的投票结果限制在特定的范围内)
RNN的问题:出现一些错误,這是因為我們的模型有著很短期的記憶,只會參考前一步的結果,所以它不會參考更早之前的資訊,以避免這類錯誤。為了解決這個問題,我們需要在模型中加入更多內容。
LSTM改进: 遗忘路径
https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_rnns_lstm_work.html