第八章 回归
线性回归&拟合
- y = ax+b+e
- 复制代码
残差分析(最小二乘法)
误差e:
- |e| = |ax+b-y|
- 复制代码
求e的和Q
- Q = \sum_{i=1}^n (ax_i + b - y_i)^2
- 复制代码
问题转化为求Q最小值时a,b的值,即
- \frac{\partial Q}{\partial b} = 0
-
- \frac{\partial Q}{\partial b} = 0
- 复制代码
过拟合
- 为了迎合所有样本向量点甚至噪声点而使模型描述过去复杂。
- 危害:
- 是逻辑过于复杂。
- 失去泛化能力。(预测的结果准确性下降)
- 解决方法
- 样本量过少
- 尽量减少噪点
欠拟合
- 参数过少
- 拟合不当:例如:数学模型不对
聚类
聚类指的是一种学习方式。把物理或抽象对象的集合分组为彼此类似的对象组成的多个类的分析过程。
K-Means 算法
有趣的模式
- 易于被人理解
- 在某种确信度上,对于新的或检验数据是有效的。
- 意思是:对于新的样本也能适用
- 是潜在有用的
- 是新颖的
孤立点
- 噪点
- 存在个体差异极大的样本组成
层次聚类
聚类里面还有聚类
密度聚类
-
欧式距离
d=\sqrt {\sum_1^n(A_i - B_i)^2}
-
余弦相似度
\cos\theta = \frac {\sum_1^n(A_i \times B_i)}{\sqrt{\sum_1^n A_i} \times {\sqrt{\sum_1^n B_i}}}
聚类评估
- 估计聚类的趋势:数据中必须存在非随机结构
- 确定数据集中的簇数
- 测量聚类的质量
聚类趋势
- 霍普金斯统计量:
- 随机抽取n个向量统称为p向量,每个向量为p_1,p_2, ... , p_n,每个向量都在样本空间里找出最近的向量,然后求距离,用x_1,x_2, ... , x_n表示这个距离。
- 随机抽取n个向量统称为q向量,每个向量为q_1,q_2, ... , q_n,每个向量都在样本空间里找出最近的向量,然后求距离,用y_1,y_2, ... , y_n表示这个距离。
- 计算霍普金斯统计量H: H = \frac {\sum_{i=1}^n y_i}{\sum_{i=1}^n x_i + \sum_{i=1}^n y_i}
- 若聚簇不明显,则H应该为0.5左右,若聚类明显,则接近1.
簇数确定
- 经验法:簇数p = \sqrt \frac {n}{2}, 每个簇大概有\sqrt {2n}个点。
- 肘方法(更科学):假设分为n个类,n从1开始递增,最大值为样本点数。计算每个聚类中各个向量到该聚类的中心距离的和x,把每个和x相加得到一个结果y。用函数值表示y = var(n)。把函数y绘制出来得到一条递减的非线性函数,其函数斜率变化最大的对应点n即为最佳的簇数。
测定聚类质量
- 外在方法:样本已经有严格的类别定义,在跟据该分类去观察是否分类正确。
- 内在方法:事先没有分好类。使用轮廓系数衡量。
- 对于有n个向量的样本空间,假设被划分k个类簇,即C_1, C_2, ... C_k。对于任何一个样本空间中的向量v来说,可以求一个v到本类簇中其他各点的距离的平均值a(v),还可以求一个v到其他所有类簇的最小平均值,求这些距离的平均值,得到b(v),轮廓系数定义为 S(v) = \frac {b(v)-a(v)}{\max[a(v),b(v)]} 一般来说,这个函数结果在-1和1之间。a(v)表示的是类簇内部的紧凑型,越小越紧凑。b(v)表示该类簇和其他类簇之间的分离程度。函数越接近1,包含v的类簇越紧凑。
分类
朴素贝叶斯
- 基本思想:
- 已知类条件概率密度参数表达式和先验概率。
- 利用贝叶斯公式转换成后验式概率。
- 根据后验概率大小进行决策分类。
- 贝叶斯公式 P(D_j|x) = \frac{P(x|D_j)P(D_j)}{\sum_{i=1}^n P(x|D_j)P(D_j|x)}
- 贝叶斯分类器通常这样一个假定:“给定目标值时,属性之间相互条件独立。”
- 贝叶斯简写:P(A|B)P(B)=P(B|A)P(A)
- 该式子也称为朴素贝叶斯公式。
决策树归纳
样本收集
信息增益
- 信息量与信息熵:
- 信息量
- 表示你得到信息多少的一个量
- 概率越小的事情,信息量越大;反之越小。
- 一定为正值。
- 信息量公式:h(x)=-p_i \log_2p_i
- p_i指的是事件发生的概率,恒小于1。
- 前面加负号保证结果恒大于0。
- 信息熵:
- 本质概括:各事件期望(事件发生概率\cdot事件的信息量)求和。熵越小,不确定性越低,可以确定的信息越多。
- 熵是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。
- 若一个系统越复杂,出现不同情况的种类越多,那么他的信息熵越大;若系统越简单,信息熵相对较小。
- 整个样本集合的熵: Info=H(X)=-\sum_{i=1}^m p(x_i) \log_2p(x_i)
- m是分类的种类
- p_i指的是这种决策项产生的概率。
- 这个熵也叫“期望信息”
- 信息量与信息熵相对详细且通俗的解释(这篇文章作者不是我,我也是通过这篇文章学习的。)
- 信息量
- 条件熵
- 基于某个变量条件前提下的,另一个变量的熵的值。
- 公式: Info_A=H(Y|X)=\sum_{x \in X}p(x)H(Y|X=x)
- p(x)是事件发生的概率。
- x是X样本空间里的一个小事件
- H(Y|X=x):在Y事件的前提下,发生x事件的信息熵大小。
- 条件信息熵的通俗理解(这篇文章作者不是我,我也是通过这篇文章学习的。)
- 信息增益:
- 信息增益是特征选择的一个重要指标,它定义为一个特征能够为分类系统带来多少信息,带来的信息越多,说明该特征越重要,相应的信息增益也就越大。
- 公式:信息熵-条件熵 Gain(A)=Info-Info_A
- 通俗理解决策树算法中的信息增益(这篇文章作者不是我,我也是通过这篇文章学习的。)
连续型变量
- 目的:寻求信息量最大的切割点。
- 过程:
- 先对字段各值进行排序
- 设字段A有n个整数,先对他们进行排序
- 求所有相邻值的平均值
- 由上面条件得,有n-1个平均值,平均值求法:相邻值相加除2
- 求每个平均值作为切割点的信息增益
- 得到信息增益最大时的切割点为最佳切割点。
- 先对字段各值进行排序
- 构造数得思路:
- 找到信息增量最大得字段A和信息增益最大得切割点v(无论连续还是枚举)。
- 决定根节点的字段A和切分点v。
- 把字段A从所有待选的字段列表中拿走,再从第一步开始。此时决策已经走了一步,根节点分裂成两个分支。因此样本空间也随着该字段A的分类分成两个部分。
随机森林
- 在数据挖掘中很多算法实际是一种问题处理方式或者原则,而不是针对某个问题所书写的代码。
- 步骤:
- 随机挑选一个字段构造树的第一层。
- 随机挑选一个字段构造树的第二层。
- ...以此类推...
- 随机挑选一个字段构造树的第n层。
- 在本科树建造完毕后,还需要按照这种方式建造m棵决策树。
- 原则补充:
- 树的层级通常比较浅。
- 每棵树的分类都不能保证分类精度高。
- 一个样本进行分类的同时对这m棵决策树做分类概率判断。
- TODO 问题:
- 什么是分类精度?
- 什么是分类概率?
隐马尔可夫模型(HMM)
- 问题一:知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据骰子骰出的结果(可见状态链),想知道每次骰出的是什么骰子。即骰出的是什么类型骰子?(两种解决方法)
- 最大似然状态路径:求一串骰子序列,通过该序列产生的结果与事实观测结果重合的概率最大。
- 求每次掷出的骰子是某种骰子的概率。
- 问题二:知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据骰子骰出的结果(可见状态链),想知道骰出这个结果的概率。即有多大的概率骰出这个数字?
- 主要用于观察到的结果和已知模型是否吻合。
- 问题三:知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次骰子骰出的结果(可见状态链),反推每种骰子是什么。
维特比算法(Viterbi algorithm)
- 解决问题一思想(最大似然状态路径):
- 从可见状态链中可以看到n个投掷骰子的结果。
- 假设只有第一个骰子的结果,判断哪种骰子出现该结果的概率最大。
- 再获取第二个结果,判断在结合前面情况下出现第二个结果概率最大的骰子序列。
- 以此类推
- 最后获取到最大该结果概率的骰子序列。
前向算法
- 解决问题二思想:
- 从可见状态链中可以看到n个投掷骰子的结果。
- 假设只有第一个骰子的结果,算出各种情况的概率,并求和。
- 再获取第二个结果,通过上一种情况的求和结果,算出第二个结果各种情况概率,并求和。
- 以此类推
- 最后把计算出的结果为出现该结果的概率。
- 骰子问题:判断骰子是否有被做过手脚。
- 用已知正常的骰子投掷n次,并通过前向算法计算出结果R_1,R_1为已知标准模型。
- 用未知待检测的骰子投掷n次,并通过前向算法计算出结果R_2.
- 比较R_1和R_2的值,若相差较大,则说明待检测骰子有问题,或是被做过手脚。
支持向量机SVN(Support Vector Machine)
- 支持向量机SVN是一种比较抽象的算法概念,可以用来做模式识别、分类或者回归的机器学习。
年龄和好坏
- 例子:不同年龄的客户对应其质量的好坏。找出其中的关系,并分类。
- 两种方法:
- 把两类全部标出来:容易产生过拟的结果,使事实描述过去复杂。
- 一刀切:切后两边会发生不纯的现象,且可以计算出不纯率,一般来说越低越好。
- 总结一下:
- 关键点1:切下去的点称为超平面。这个超平面是一个抽象的面概念。在一维空间是一个点,二维是一条线,三维是一个面... x=-A\ y=-\frac{A}{B}x-\frac{C}{B}\ z=-\frac{A}{C}x-\frac{B}{C}y-\frac{D}{C}\ \alpha =-\frac{A}{D}x-\frac{B}{D}y-\frac{C}{D}z-\frac{E}{D}
- 关键点2:过拟问题,一般来说,设计分类器都要尽量避免过拟的。过你会给归纳过程带来很大麻烦,而且在应用的过程中也非常不方便,只要精确度达到标准就足够了。
- 关键度3:不纯度问题。不纯度和精确度是一对矛盾,精确度却高,不纯度越低。分类器的研究和调整的过程是一个精度和成本平衡的过程,所以并不是不纯度越低越好,而是在实际生产操作成本一样情况下,不纯度越低越好。
距离有多远
- N维空间切割
- 一维空间切割:Ax+B=0
- 二维空间切割:Ax+By+C=0
- 三维空间切割:Ax+By+Cz+D=0
- 四维空间切割:Ax+By+Cz+D\alpha + E=0
- ...
- 超平面公式简写: g(v)=wx+b
- v是样本向量。
- b是常量。
- N维空间中的距离:
- 一维空间:d=\frac{|Ax_0+B|}{\sqrt{A^2}}
- 二维空间:d=\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}}
- 三维空间:d=\frac{|Ax_0+By_0+Cz_0+D|}{\sqrt{A^2+B^2+C^2}}
- ...
- 上述\sqrt{A^2}、\sqrt{A^2+B^2}、\sqrt{A^2+B^2+C^2}等分别是一维空间、二维空间、三维空间的范数||w||。
- 距离公式简写: d=\frac{1}{||w||}\cdot |g(v)|
分不开怎么办
- 例子:如果在区间[-2,2]的分类是1,其他的是0,若要通过一刀切的方式分开,则永远都不能较好的分开它们。
- 通过核函数生维,然后再通过一次函数分类
- 例如:把上面的一维直线映射到二维的函数:y = -x^2+4,当y\geq 0时,结果为1;当y<0时,结果为0
- python的Scikit-learn库,SVC类,支持包括linear(线性核函数)、poly(多项式核函数)、rbf(径向基核函数)、sigmoid(神经元激活核函数)、precomputed(自定义核函数)
小结
- SVN解决问题方式描述起来大概有几步:
- 把所有样本和其对应的分类标记交给算法进行训练。
- 如果发现线性可分,那就直接找出超平面。
- 如果发现线性不可分,那就映射到n+1维空间,找出超平面。(n维是当前维度)
- 最后得到超平面表达式,也就是分类函数。