目录
  1. 1. 第一周
    1. 1.1. 从模型的角度
    2. 1.2. 内容:
    3. 1.3. 学习要求:
    4. 1.4. 监督学习的实现步骤
    5. 1.5. 模型有两种:
    6. 1.6. 泛化误差
    7. 1.7. 重点:泛化误差上界
    8. 1.8. MLE:最大似然估计
    9. 1.9. 贝叶斯估计
    10. 1.10. 作业1
    11. 1.11. 感知机模型
      1. 1.11.1. 假设:数据是线性可分的
    12. 1.12. 算法收敛性
    13. 1.13. 作业2
      1. 1.13.1. 模型
        1. 1.13.1.1. 度量距离
          1. 1.13.1.1.1. 无穷范数
      2. 1.13.2. kd树
    14. 1.14. 作业3
      1. 1.14.1. 贝叶斯估计
    15. 1.15. concurrent多线程、多进程小例子
  2. 2. 第二周
    1. 2.1. 朴素贝叶斯法
  3. 3. 决策树
    1. 3.1. 模型
  4. 4. 第三周
  5. 5. 支持向量机
    1. 5.1. 硬间隔最大化
03统计学习方法

第一周

从模型的角度

  1. 监督学习
  2. 无监督学习
  3. 半监督学习
  4. 强化学习

内容:

  1. 概论
  2. 感知机
  3. k近邻
  4. 朴素贝叶斯
  5. 决策树
  6. 罗辑回归和最大熵
  7. 支持向量机
  8. 提升方法
  9. EM算法机器推广
  10. 隐马尔可夫模型
  11. 条件随机场
  12. 总结
  13. 梯度下降法
  14. 牛顿法和拟牛顿法
  15. 拉格朗日对偶性

不同模型的差别在于:模型的假设和损失函数的设计

学习要求:

  1. 首先理解模型、算法的适用场景
  2. 然后理解模型、算法的逻辑框架
  3. 依据自己能力掌握个别推导细节

监督学习的实现步骤

  1. 得到一个有限的训练集合
  2. 得到模型的假设空间,也就是所有的备选模型
  3. 确定模型选择的准则,即学习的策略
  4. 实现求解最优模型的算法
  5. 通过学习方法选择最优模型
  6. 利用学习的最优模型对新数据进行预测或分析

对一个训练集,从里面拿出一下x和y来,这个拿取是随机的,可以用x和y的联合概率分布来表示(原来还有这种理解)。

条件概率分布$P(Y|X)$,预测形式$arg\mathop{min}\limits_{y}P(y|x)$

模型有两种:

决策模型:

1
F=\{f|Y=f_\theta(X),\theta\in R^n\}
条件概率分布:
1
F=\{P|P_{\theta}(Y|X),\theta\in R^n\}
F表示假设空间。举个例子,随机变量x和y,他俩是线性关系,如果用决策模型来描述,就是$Y=a_0+a_1X,\theta=(a_0,a_1)^T$,如果用条件概率分布来描述,就是$Y\sim N(a_0+a_1X,\sigma^2)$,这样就决定了给定一个x的情况下,y服从正态分布由$a_0,a_1$决定。

泛化误差

学到的模型是$\hat{f}$,用这个模型对未知数据预测的误差即为泛化误差: 在这里插入图片描述

重点:泛化误差上界

对于二分类问题,当假设空间是有限个函数的集合$F=\{f_1,f_2,\dots ,f_d\}$时,对任意一个函数$f\in F$,至少以概率$1-\delta $,以下不等式成立:

1
2
R(f)\leq \hat{R} (f)+\varepsilon(d,N,\delta )\\
\varepsilon(d,N,\delta )=\sqrt{\frac{1}{2N}(\log{d}+\log{\frac{1}{\delta }})}
### 证明: 霍夫丁不等式(Hoeffding's inequality)是机器学习的基础理论,通过它可以推导出机器学习在理论上的可行性。(这玩意从没见过。。) 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MLE:最大似然估计

在这里插入图片描述
在这里插入图片描述

贝叶斯估计

在这里插入图片描述
在这里插入图片描述

作业1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

感知机模型

假设:数据是线性可分的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法收敛性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

作业2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当w和b初始值为0时,eta就没有用了,因为被约去了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述 ## k近邻 在这里插入图片描述 数据不一定是线性可分的。

  1. 度量距离:欧氏距离
  2. 决策准则:多数表决

模型

在这里插入图片描述
在这里插入图片描述

度量距离

在这里插入图片描述
在这里插入图片描述
无穷范数

与输入变量相差最大的分量比较小 ##### 1、2范数 不仅与输入变量相差最大的分量比较小,而且每个分量都要小 ### k值得选择 交叉验证方法 ### 分类决策规则 在这里插入图片描述

上图其实就是举手表决法

kd树

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

作业3

在这里插入图片描述 1. 模型的复杂度体现在搜索距离分类点最近的k个样本。 K值越小,越容易过拟合 2. 线性扫描是O(n),但是扫描完后还得选出最大的k个,如果用排序的话就是O(nlogn)。kd树是O(logn)

在这里插入图片描述 ### sklearn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import numpy as np
from sklearn.neighbors import KNeighborsClassifier

x = np.array([[5, 4],[9, 6],[4, 7],[2, 3],[8, 1],[7, 2]])
y = np.array([0, 0, 0, 1, 1, 1])
class_label = {0: '正例', 1: '负例'}
sample = np.array([[5, 3], [3, 3]])
for k in range(1, 7):
print('k={}'.format(k))
classifier = KNeighborsClassifier(n_neighbors=k)
classifier.fit(x, y)
result = classifier.predict(sample)
print(result)
for i in range(sample.shape[0]):
print('\t样本:{}, 预测结果:{}'.format(sample[i],
class_label[result[i]]))

output:
k=1
样本:[5 3], 预测结果:正例
样本:[3 3], 预测结果:负例
k=2
样本:[5 3], 预测结果:正例
样本:[3 3], 预测结果:正例
k=3
样本:[5 3], 预测结果:负例
样本:[3 3], 预测结果:正例
k=4
样本:[5 3], 预测结果:负例
样本:[3 3], 预测结果:正例
k=5
样本:[5 3], 预测结果:负例
样本:[3 3], 预测结果:负例
k=6
样本:[5 3], 预测结果:正例
样本:[3 3], 预测结果:正例
### 自编程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import numpy as np

class K():
def __init__(self, k, x, y):
self.x = x
self.y = y
self.k = k

def calssifier(self, sample):
nums_sample = sample.shape[0]
nums_x = self.x.shape[0]

# 数据扩充维度,方便利用矩阵运算求距离
_sample = np.stack([sample] * nums_x, axis=1)
_x = np.stack([self.x] * nums_sample, axis=0)
distance = np.sqrt(np.sum((_sample - _x) ** 2, axis=2))
# 距离排序
distance = np.argsort(distance, axis=-1)
# 选择最近的k个
index = distance[:, :self.k]
index = np.reshape(index, (-1))
result = self.y[index]
result = np.reshape(result, (-1, self.k))
final_result = []
for res in result:
final_result.append(np.argmax(np.bincount(res)))
final_result = np.array(final_result)
return final_result


x = np.array([[5, 4],[9, 6],[4, 7],[2, 3],[8, 1],[7, 2]])
y = np.array([0, 0, 0, 1, 1, 1])
class_label = {0: '正例', 1: '负例'}
sample = np.array([[5, 3], [3, 3]])
for k in range(1, 7):
print('k={}'.format(k))
k_classifier = K(k=k, x=x, y=y)
result = k_classifier.calssifier(sample=sample)
for i in range(sample.shape[0]):
print('\t样本:{}, 预测结果:{}'.format(sample[i],
class_label[result[i]]))

output:
k=1
样本:[5 3], 预测结果:正例
样本:[3 3], 预测结果:负例
k=2
样本:[5 3], 预测结果:正例
样本:[3 3], 预测结果:正例
k=3
样本:[5 3], 预测结果:负例
样本:[3 3], 预测结果:正例
k=4
样本:[5 3], 预测结果:负例
样本:[3 3], 预测结果:正例
k=5
样本:[5 3], 预测结果:负例
样本:[3 3], 预测结果:负例
k=6
样本:[5 3], 预测结果:正例
样本:[3 3], 预测结果:正例
## 作业解答 ### 为什么极大似然估计里的概率密度函数,而不是概率 在这里插入图片描述

其实这里是用f(xi)代替了P(|x-xi|<e),即xi邻域的概率

贝叶斯估计

在这里插入图片描述
在这里插入图片描述

concurrent多线程、多进程小例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from concurrent import futures
import threading
import os


def func(i):
print(os.getpid(), threading.current_thread(), i)
return i**2

# with futures.ProcessPoolExecutor(max_workers=5) as executor:
with futures.ThreadPoolExecutor(max_workers=5) as executor:
# 建立多进程(线程)任务
tasks = [executor.submit(func, i) for i in range(10)]
# 驱动多进行运行
done_iter = futures.as_completed(tasks)
# 提取运行结果
res = [future.result() for future in done_iter]

print(res)

第二周

朴素贝叶斯法

基于贝叶斯定理特征条件独立假设的分类方法。

决策函数、条件概率

注意: 在估计该方法的参数时,可以使用极大似然估计法和贝叶斯估计法。这也意味着,不要混淆朴素贝叶斯分类法和贝叶斯估计法。 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

极大似然估计,上图第二项,有0的可能,所以换成了贝叶斯估计

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

决策树

模型

在这里插入图片描述 问题:如何选择根节点、如何避免过拟合。 ## 特征选择 在这里插入图片描述 再次复习,熵是自信息的期望。当事件以1/e概率出现时,熵最大。 经验熵: 在这里插入图片描述 在这里插入图片描述 使用有工作作为根节点,分类后的的条件熵是:(条件是有工作) 在这里插入图片描述 在这里插入图片描述 H(D)是经验熵,H(D|A)是给定条件A下D的条件熵。差是增益,也就是熵变小了多少。换句话说,增益是数据混乱减少的程度。 在这里插入图片描述 在这里插入图片描述 意思就是某个特征分的类别越多,混乱程度是越大的,像是某种程度上的正则化。 ## 决策树的生成 在这里插入图片描述 在这里插入图片描述 第四步是预剪枝。 ## 剪枝 后剪枝。决策树叶子节点越多,说明模型越复杂,泛化能力低。 在这里插入图片描述 ## CART算法 二分树。 提出来了一个度量混乱程度的方法——基尼指数 在这里插入图片描述 选择Gini最小的那个特征。 不用考虑Ha(D)了,也就是不用考虑信息增益比了。因为这里是二叉树。 ## 熵、信息增益、基尼指数 在这里插入图片描述 熵和基尼指数都是衡量混乱程度的,用于离散变量。 方差:基本是用于连续变量。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 内部节点是否剪枝只与该节点为根节点的子树有关!

第三周

对数线性模型 logistics 判别模型 最大熵 生成模型 ## logistic 在这里插入图片描述 在这里插入图片描述 logit变换,把0到1区间变换到\(-\infty\)\(\infty\)。就是这么直接。 在这里插入图片描述 注意:公式里的\(\pi(x)\)取值是\([0,1]\)。含义是概率。 然后反解出\(\pi(x)\)。 可以看出来了,上面的公式就是凑出来的,但是凑得很好,很紧凑。 在这里插入图片描述 最终的公式(模型): 在这里插入图片描述 其实就是造成了一个公式,把\([-\infty,\infty]\)变换到\([0,1]\),然后把0到1的这个数看做是概率(赋予它概率的意义)。 在这里插入图片描述 这个是求w的方法。 在这里插入图片描述 上面就是在w的条件下,y的分布。 在这里插入图片描述 通过最大化上面的式子,求w。方法是梯度下降。 在这里插入图片描述 推导(这个才明白这个分子分母的设置,估计这个设计,解出来好看。也有可能是第一个这么做的人,“误导”了后人): 在这里插入图片描述 ## 最大熵 在这里插入图片描述 为什么选熵最大的:因为在不知道数据真实分布的情况是,假设各类数据是平均分布(熵最大)是比较合理的。 看下面这个例子,一目了然。 在这里插入图片描述 增加条件: 在这里插入图片描述 在这里插入图片描述 “一弯”表示从样本里得出(观察得到)。 在这里插入图片描述 在这里插入图片描述 对上面的式子求期望,就能得到。 在这里插入图片描述 下面公式的意思是:让其在总体中出现的概率等于在样本中出现的概率。 在这里插入图片描述 在这里插入图片描述 上面第二行式子的意思:约束条件。条件就是要让熵最大,但是得符合实际情况。 求解结果: 在这里插入图片描述 在这里插入图片描述 区别: 以前都是直接使用x的取值,而这个最大熵模型是用的x和y的特征函数,也即是\(f(x,y)\)。 ## 拉格朗日对偶性 在这里插入图片描述 在这里插入图片描述 对应的L函数: 在这里插入图片描述 下面说明:为什么等价 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 然后,对偶形式: 在这里插入图片描述 三个定理: 在这里插入图片描述 定理一:对偶问题提供了一个原始问题解得下界。 在这里插入图片描述 定理二:给出了强对偶性的充分条件。也就告诉了我们什么时候可以利用对偶求原问题的解。 在这里插入图片描述 凸优化问题:在凸集上寻找凸函数的的极小值。 凸集、凸函数。 slater条件: 可行域的交集也得是凸集,且有内点。 正例: 在这里插入图片描述 反例: 在这里插入图片描述在这里插入图片描述 kkt条件。 在这里插入图片描述 ## 改进的迭代尺度法 在这里插入图片描述 在这里插入图片描述 。。。懵了。放弃,进下一章

支持向量机

硬间隔最大化

在这里插入图片描述 函数距离、几何距离 在这里插入图片描述 在这里插入图片描述 使用函数距离的问题。 函数距离的意义:当固定下一个超平面,判断不同的点到该超平面的距离。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 ## 软间隔 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 ## 非线性与核函数 在这里插入图片描述 ## 序列最小最优化算法 在这里插入图片描述 两个两个轮换着优化。

\(a=b\) \[ b=a \]

文章作者: Ash's Blogs
文章链接: http://yoursite.com/2019/11/19/03%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo