├── 10_1.py ├── 3_3.py ├── README.md ├── ch11_习题.md ├── ch13_习题.md ├── ch14_习题.md ├── ch16_习题.md ├── ch1_课后习题.txt ├── ch2_习题.md ├── ch3_习题.md ├── ch4_习题.md ├── ch5_习题.md ├── ch6_习题.md ├── ch7_习题.md ├── ch8_习题.md └── ch9_习题.md /10_1.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | 5 | data = np.array([ 6 | [0.697,0.460,1],[0.774,0.376,1],[0.634,0.264,1],[0.608,0.318,1],[0.556,0.215,1], 7 | [0.403,0.237,1],[0.481,0.149,1],[0.437,0.211,1],[0.666,0.091,0],[0.243,0.267,0], 8 | [0.245,0.057,0],[0.343,0.099,0],[0.639,0.161,0],[0.657,0.198,0],[0.360,0.370,0], 9 | [0.593,0.042,0],[0.719,0.103,0] 10 | ]) 11 | a = np.arange(0, 1.01, 0.01) 12 | b = np.arange(0, 0.61, 0.01) 13 | 14 | def kNN(train, test, k): 15 | res = [] 16 | for i in range(len(test)): 17 | dist = [] 18 | for j in range(len(train)): 19 | dist.append([j, np.linalg.norm(test[i,:]-train[j,:-1])]) 20 | min_id = sorted(dist, key=lambda x: x[1])[:k] 21 | rate = [train[i[0], -1] for i in min_id] 22 | if sum(rate) / k >= 0.5: 23 | res.append(1) 24 | else: 25 | res.append(0) 26 | return res 27 | 28 | x, y = np.meshgrid(a, b) 29 | k = 1 30 | z = kNN(data, np.c_[x.ravel(), y.ravel()], k) 31 | z = np.array(z).reshape(x.shape) 32 | fig = plt.figure() 33 | ax = plt.gca() 34 | label_map = {1:'good', 0:'bad'} 35 | ax.scatter(data[:,0], data[:,1], c=data[:,2], cmap=plt.cm.Dark2) 36 | ax.set_xlim(0, 1) 37 | ax.set_ylim(0, 0.6) 38 | ax.set_ylabel('sugar') 39 | ax.set_xlabel('density') 40 | ax.set_title('decision boundary: %s-NN' % k) 41 | plt.show() -------------------------------------------------------------------------------- /3_3.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import numpy as np 4 | from sklearn.cross_validation import train_test_split 5 | 6 | def sigmoid(z): 7 | return 1 / (1+np.exp(-z)) 8 | 9 | def logistic_regression(theta, x, y, iteration, alpha, lmbd): 10 | for i in range(iteration): 11 | theta = theta - alpha*(np.dot(x.transpose(), (sigmoid(np.dot(x, theta))-y)) + lmbd*theta)/y.shape[0] 12 | cost = -1/y.shape[0] * (np.dot(y.transpose(), np.log(sigmoid(np.dot(x, theta)))) + np.dot((1-y).transpose(), np.log(1-sigmoid(np.dot(x, theta))))) + lmbd/(2*y.shape[0])*np.dot(theta.transpose(), theta) 13 | print(f'Iteration: {i}, cost: {cost}') 14 | return theta 15 | 16 | def predict(theta, test): 17 | pred = np.zeros([test.shape[0], 1]) 18 | for idx, value in enumerate(np.dot(test, theta)): 19 | if sigmoid(value) >= 0.5: 20 | pred[idx] = 1 21 | else: 22 | pred[idx] = 0 23 | return pred 24 | 25 | def main(): 26 | density=np.array([0.697,0.774,0.634,0.608,0.556,0.430,0.481,0.437,0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719]).reshape(-1,1) 27 | sugar_rate=np.array([0.460,0.376,0.264,0.318,0.215,0.237,0.149,0.211,0.091,0.267,0.057,0.099,0.161,0.198,0.370,0.042,0.103]).reshape(-1,1) 28 | xtrain=np.hstack((density,sugar_rate)) 29 | xtrain=np.hstack((np.ones([density.shape[0],1]),xtrain)) 30 | ytrain=np.array([1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]).reshape(-1,1) 31 | xtrain,xtest,ytrain,ytest=train_test_split(xtrain,ytrain,test_size=0.25,random_state=33) 32 | 33 | theta_init=np.random.rand(3,1) 34 | theta=logistic_regression(theta_init, xtrain, ytrain,200, 0.5, 0.01) 35 | pred = predict(theta, xtest) 36 | print('predictions are',pred) 37 | print('ground truth is',ytest) 38 | print('theta is ',theta) 39 | print('the accuracy is',np.mean(pred==ytest)) 40 | 41 | if __name__ == '__main__': 42 | main() 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 西瓜书(《机器学习》) by 周志华老师 学习笔记&习题记录 (2018) 2 | 3 | - [x] ch1 绪论 finish on 6/25 4 | 5 | - [x] ch2 模型评估与选择 finish on 6/28 6 | 7 | - [x] ch3 线性模型 finish on 6/29 8 | 9 | - [x] ch4 决策树 finish on 6/30 10 | 11 | - [x] ch5 神经网络 finish on 6/30 12 | 13 | - [x] ch6 支持向量机 finish on 7/7 14 | 15 | - [x] ch7 贝叶斯分类器 finish on 7/10 16 | 17 | - [x] ch8 集成学习 finish on 7/13 18 | 19 | - [x] ch9 聚类 finish on 7/15 20 | 21 | - [x] ch10 降为和度量学习 exercise skipped 22 | 23 | - [x] ch11 特征选择与稀疏学习 finish on 7/17 24 | 25 | - [ ] ch12 计算学习理论 will skip and come back to this chapter on one weekend... 26 | 27 | - [x] ch13 半监督学习 finish on 7/18 28 | 29 | - [x] ch14 概率图模型 finish on 7/19 30 | 31 | - [x] ch15 规则学习 看了一遍,习题略。。。 7/20 32 | 33 | - [x] ch16 强化学习 finish on 7/21 强化学习是下一阶段学习的核心,阅读书单有《深入浅出强化学习原理入门》和 sutton的那本《强化学习导论》 34 | -------------------------------------------------------------------------------- /ch11_习题.md: -------------------------------------------------------------------------------- 1 | 2, reliefF算法: 2 | 3 | 输入:训练集D,抽样次数m,特征权重阈值δ,最近邻样本个数k, 4 | 5 | 输出:各个特征的特征权重T。 6 | 1. 置所有特征权重为0,T为空集 7 | 2. for i = 1 to m 8 | 从D中随机选择一个样本R; 9 | 从R的同类样本集中找到R的k个最近邻Hj(j=1,2,..,k),从每一个不同类样本集中找到k个最近邻Mj( C); 10 | 3. for A=1 to N(all features) 11 | $$W(A)=W(A)-\Sigma_{j=1}^kdiff(A,R,H_j)/(mk)+\Sigma_{C\notin class(R)}[\frac{p(C)}{1-p(class(R))}\Sigma_{j=1}^kdiff(A,R,M_j(C))]/(mk)$$ 12 | end. 13 | 14 | 3, 将单一属性的相关统计量计算出来后,两两相加得到每对属性的相关统计量 15 | 16 | 4, 设最多迭代次数t,当总迭代次数达到t的时候,结束迭代并返回当前最优的特征集合 17 | 18 | 5, 平方误差等值线与 $L_1$范数等值线的焦点不在坐标轴时 19 | 20 | 6, 目标函数中都有$||w||^2$项;岭回归中$||w||^2$项作为范数正则化,防止过拟合;支持向量机中$||w||^2$项是优化目标 21 | 22 | 7, $L_0$范数不联系,在优化求解时只能用遍历方法求解 23 | 24 | 9, 字典学习中学习出的字典可以使属性适度稀疏,是的文本数据在字频上线性可分;压缩感知是通过 $x=\Psi s$使得信号x转变成稀疏向量s,通过采样信号y来还原s时可以得到接近的结果从而还原原始信号x 25 | 26 | 10, 分组稀疏编码;假设字典中有分组结构即分组内的多个字词构成一个概念,若这个概念在文档中没出现,则将整个分组所对应的变量都置为零 27 | -------------------------------------------------------------------------------- /ch13_习题.md: -------------------------------------------------------------------------------- 1 | 1, $Y_{ji}$ 表示样本 $x_j$ 属于第i个高斯混合成分的概率,因此可表示为 $p(\theta=i|x_j)$ . 2 | 3 | 由此 $Y_{ji}=p(\theta=i|x_j)=\frac{\alpha_i8p(x_j|\mu_i, \sum_i)}{\sum_{i=1}^N\alpha_i8p(x_j|\mu_i, \sum_i)}$ 得到(13.5) 4 | 5 | 对对数似然 $LL(D_l\cup D_u)$ 分别求关于 $\mu_i$、$\sum_i$、$\alpha_i$的偏导,并分别使偏导=0,即可求得(13.6)(13.7)(13.8)的三个式子 6 | 7 | 2, `https://blog.csdn.net/qilixuening/article/details/72810579` 8 | 9 | 3, 10 | 由 11 | $$ \log L=\sum_{x_i\in X}\log \sum^L_{l=1} \alpha_lf(x_i/\theta_l)+\sum_{x_i\in X}\log \sum^L_{l=1} \alpha_lP(c_i/x_i,m_i=l)f(x_i/\theta_l)$$ 12 | 设 13 | $$P(c_i/m_i,x_i)=P(c_i/m_i)\equiv\beta_{c_i|j}$$ 14 | 得 15 | $$P(c_i/x_i)=\sum_j(\frac{\alpha_jf(x_i/\theta_j)}{\sum_l\alpha_jf(x_i/\theta_j)})\beta_{c_i|j}$$ 16 | 由此可得混合专家模式方法中 $\mu_j^{(t+1)}$, $\\Sigma_j^{(t+1)}$, $\alpha_j^{(t+1)}$ 的更新公式 17 | $$\mu_j^{(t+1)}=\frac{1}{N\alpha_j^{(t)}}(\sum_{x_i\in X}x_iP(m_i=j/x_i,c_i,\theta^{(t)})+\sum_{x_i\in X}x_iP(m_i=j/x_i,\theta^{(t)}))$$ 18 | 19 | $$\Sigma_j^{(t+1)}=\frac{1}{N\alpha_j^{(t)}}(\sum_{x_i\in X}S_{ij}^{(t)}P(m_i=j/x_i,c_i,\theta^{(t)})+\sum_{x_i\in X}S_{ij}^{(t)}P(m_i=j/x_i,\theta^{(t)}))$$ 20 | 21 | $$\alpha_j^{(t+1)}=\frac{1}{N}(\sum_{x_i\in X}P(m_i=j/x_i,c_i,\theta^{(t)})+\sum_{x_i\in X}P(m_i=j/x_i,\theta^{(t)}))$$ 22 | 以及 23 | $$\beta_{k/j}^{(t+1)}=\frac{1}{N\alpha_j^{(t)}}(\sum_{x_i\in X\cap c_i=k}P(m_i=j/x_i,c_i,\theta^{(t)})+\sum_{x_i\in X\cap c_i=k}P(m_i=j/x_i,\theta^{(t)}))$$ 24 | 25 | Reference: Miller, D. J., and Uyar, H. S. 1997. A mixture of experts classifier with learning based on both labelled and unlabelled data. In NIPS 9. 26 | 27 | 6, 在标记调整过程中,每次讲最有可能指派错误的样本进行调整,即正负伪标记样本中松弛变量最大且大于1的样本进行标记更改,可以减少迭代的次数 28 | 29 | 7, 将新样本作为无标记样本再次进行图半监督算法 30 | 8, 训练样本远少于无标记样本,若将全部样本上进行训练,很多无标记样本会成为噪声,从而影响训练效果。应进行局部伪标记调整来优化分类器 31 | -------------------------------------------------------------------------------- /ch14_习题.md: -------------------------------------------------------------------------------- 1 | 1, 用文字描述吧,不画了orz 2 | 条件随机场:N个变量x均依赖y:y指向x,x在框N中 3 | 朴素贝叶斯分类器:y依赖于所有x变量:y指向x,xy都在框N中 4 | 5 | 2,设 $v\in V$是无向图G中任意一点,W是与v有边连接的所有节点,O是v,W以外的其他所有节点,v表示的随机变量是 $Y_W$, W表示的随机变量组是 $Y_W$, O表示的是随机变量组是 $Y_O$。局部马尔科夫性是指在给定随机变量组 $Y_W$ 的条件下随机变量 $Y_v$ 与随机变量组 $Y_O$ 是独立的,即 $P(Y_v,Y_O|Y_W)=P(Y_v|Y_W)P(Y_O|Y_W)$, 在 $P(Y_O|Y_W)>0$时,等价地 $P(Y_v|Y_W)=P(Y_v|Y_W,Y_O)$ 6 | 7 | (参考《统计学习方法》P192) 8 | 9 | 3, 对于两个非邻接变量A和C,一定存在A的所有邻接变量集合的子集B把AC分离,即AC独立,可说明局部 马尔科夫性 10 | 11 | 4, 极大团的势函数可以看成是所有子团势函数的联合分布,再乘上规范化因子使得ψ(x)是正确的概率。 12 | 13 | 5, 同:都是判别式模型,学习条件概率分布P(Y|X) 14 | 15 | 条件随机场可以有对个输出变量 $y_1,y_2,y_3,\dots y_N$ : $P(y_1,y_2,y_3,\dots y_N|x)=\frac1Z\prod_C\Psi_C(Y_C,x)$ 16 | 17 | 对率回归只有一个输出变量y:$P(y|x)=\frac1Ze^{(Wx+b)y}=\frac1Z\Psi(y,x)$ 18 | 19 | 因此可以把对率回归看作是条件随机场的一种特殊情况 20 | 21 | 6, 对极大团计算概率累加时要对每部所有变量同事进行累加,需要计算的次数是 $\prod$, 指数级的;而单独增加节点数目,需要计算的次数可能是 $\sum$,因此未必是指数级的增长 22 | 23 | 7, MH算法通过拒绝采样最终能生成平稳的马尔科夫链,但是有时因为拒绝概率太大导致状态转移频繁的被拒绝,算法效率低下。 吉布斯采样通过每次仅改变一个变量,其他变量保持不变的方法,使得每次改变仅在一个维度,不再拒绝,提升了效率。 24 | 25 | 8, 平均场假设 $q(z)=\prod_{i=1}^mq_i(z_i)$, 把多变量z拆分成一系列相互独立的变量组 $z_i$。 26 | 选择先验分布:参考变分推断 27 | -------------------------------------------------------------------------------- /ch16_习题.md: -------------------------------------------------------------------------------- 1 | 1, 2 | 相同:都是对探索和利用进行折中; 3 | 不同:UCB中,由于一开始 $n_k$值为零因此需要对每个摇臂先进行一次探索;Softmax方法中需要有初始参数 4 | 5 | 2, 6 | 7 | --- 8 | 输入: 9 | - MDP四元组 $E=$ 10 | - 被评估的策略 $\pi$ 11 | 12 | 过程: 13 | 1. $\forall x \in X:V(x)=0$ 14 | 2. loop 15 | 2.    for t = 1, 2, ... do 16 | 3.     $\forall x \in X:V'(x)=\sum_{a\in A}\pi(x,a)\sum_{x'\in X}P^a_{x\to x'}(R^a_{x\to x'}+\gamma V^{\pi}_{\gamma}(x'))$ 17 | 4.     if $max_{x\in X}|V(x)-V'(x)|<\theta$ : 18 | 5.       break 19 | 6.     else: 20 | 7.       $V=V'$ 21 | 8.     endif 22 | 9.   endfor 23 | 10. endloop 24 | 25 | 输出: 26 | - 状态值函数$V$ 27 | --- 28 | 29 | 3, 30 | 31 | --- 32 | 输入: 33 | - MDP四元组 $E=$ 34 | 35 | 过程: 36 | 1. $\forall x \in X:V(x)=0, \pi(x,a)=\frac{1}{|A(x)|}$ 37 | 2. loop 38 | 2.    for t = 1, 2, ... do 39 | 3.     $\forall x \in X:V'(x)=\sum_{a\in A}\pi(x,a)\sum_{x'\in X}P^a_{x\to x'}(R^a_{x\to x'}+\gamma V^{\pi}_{\gamma}(x'))$ 40 | 4.     if $max_{x\in X}|V(x)-V'(x)|<\theta$ : 41 | 5.       break 42 | 6.     else: 43 | 7.       $V=V'$ 44 | 8.     endif 45 | 9.   endfor 46 | 10.   $\forall x\in X:\pi'(x)=argmax_{a\in A}Q(x,a);$ 47 | 11.   if $\forall x :\pi'(x)=\pi(x)$ then 48 | 12.     break 49 | 13.   else 50 | 14.     $\pi=\pi'$ 51 | 15.   endif 52 | 16. endloop 53 | 54 | 输出: 55 | - 最优策略 $\pi$ 56 | --- 57 | 58 | 4, 通过学习MDP模型获得的P和R不能保证精确度,对最重强化学习的结果也有很大影响; Model-free方法也需要先采样出一条轨迹在根据轨迹所涉及的所有s-a对值函数进行更新,学习效率也不高 59 | 60 | 5, 61 | 由式(16.30) 62 | $$ Q^{\pi}(x,a)=\sum_{x' \in X}P^a_{x \rightarrow x'}(R^a_{x \rightarrow x'}+\gamma\sum_{a' \in A}\pi(x',a')Q^{\pi}(x',a')) $$ 63 | 得到进行新一次采样得到的 64 | $$Q(x',a')=R^a_{x\to x'}+\gamma Q_{\pi}(x',a')$$ 65 | 即为式(16.29)中的 $r_{t+1}$ 项。由此可将式(16.29)变为 66 | $$ Q^{\pi}_{t+1}(x,a)=Q^{\pi}_t(x,a)+\frac{1}{t+1}(R^a_{x\to x'}+\gamma Q_{\pi}(x',a')-Q^{\pi}_t(x,a)) $$ 67 | 将 $\frac{1}{t+1}$ 替换成 $\alpha$ 即得到式(16.31) 68 | 69 | 6, 70 | 71 | --- 72 | 输入: 73 | - 环境E; 74 | - 动作空间E; 75 | - 起始状态 $x_0$; 76 | - 奖赏折扣 $\gamma$; 77 | - 更新步长 $\alpha$; 78 | 79 | 过程: 80 | 1. $\theta=0$ 81 | 2. $x=x_0,\alpha=\pi(x)=argmax_{a''}\theta^T(x;a'')$ 82 | 3. for t = 1,2,... do 83 | 4.    $r,x'=$ 在E种执行动作 $a=\pi^{\epsilon}(x)$ 产生的奖赏与转移的状态; 84 | 5.   $a'=\pi(x')$; 85 | 6.   $\theta=\theta+\alpha(r+\gamma\theta^T(x';a')-\theta^T(x;a))(x;a)$; 86 | 7.   $\pi(x)=argmax_{a''}\theta^T(x;a'')$; 87 | 8.   $x=x',a=a'$; 88 | 9. end for 89 | 90 | 输出: 91 | - 策略 $\pi$ 92 | --- 93 | -------------------------------------------------------------------------------- /ch1_课后习题.txt: -------------------------------------------------------------------------------- 1 | 1.1: 2 | 只包含样本1和4,样本空间变为 3 | 1 青绿 蜷缩 浊响 是 4 | 2 乌黑 稍蜷 沉闷 否 5 | 只取是好瓜的看,包括(色泽=青绿;根蒂=蜷缩;敲声=浊响) 6 | 进行拓展: 7 | 1 (色泽=青绿;根蒂=蜷缩;敲声=浊响) 8 | 2 (色泽=*;根蒂=蜷缩;敲声=浊响) 9 | 3 (色泽=青绿;根蒂=*;敲声=浊响) 10 | 4 (色泽=青绿;根蒂=蜷缩;敲声=*) 11 | 5 (色泽=*;根蒂=*;敲声=浊响) 12 | 6 (色泽=*;根蒂=蜷缩;敲声=*) 13 | 7 (色泽=青绿;根蒂=*;敲声=*) 14 | 8 (色泽=*;根蒂=*;敲声=*) 15 | 由于8包含了坏瓜样本,故去掉,只取1-7作为版本空间: 16 | 1 (色泽=青绿;根蒂=蜷缩;敲声=浊响) 17 | 2 (色泽=*;根蒂=蜷缩;敲声=浊响) 18 | 3 (色泽=青绿;根蒂=*;敲声=浊响) 19 | 4 (色泽=青绿;根蒂=蜷缩;敲声=*) 20 | 5 (色泽=*;根蒂=*;敲声=浊响) 21 | 6 (色泽=*;根蒂=蜷缩;敲声=*) 22 | 7 (色泽=青绿;根蒂=*;敲声=*) 23 | 24 | 1.2: 25 | 样本空间: 3*4*4+1 = 49 k最大取2*3*3=18,即所有具体属性假设的析取式 26 | k=1时,49种 27 | k=18时,1种 28 | k取中间值,暂未解 29 | 30 | 1.3: 31 | 可以同时去掉所有具有相同属性而不同分类的数据,留下的数据就是没误差的数据 32 | 33 | 1.4: 34 | 还是考虑二分类问题,NFL首先要保证真是目标函数f均匀分布,对于有X个样本的二分类问题,显然f共有2X种情况。其中一半是与假设一致的,也就 P(f(x)=h(x))=0.5。 35 | 此时, ∑fl(h(x),f(x))=0.5∗2X∗(l(h(x)=f(x))+l(h(x)≠f(x))) 36 | l(h(x)=f(x))+l(h(x)≠f(x))应该是个常数,如果性能度量为错误率,二者各为0.5,则该值为1,如果为其他性能度量,隐含的条件就该是(一个比较合理的充分条件) l(0,0)=l(1,1),l(1,0)=l(0,1)。如果不满足, NFL 应该就不成立了(或者不那么容易证明)。 37 | 38 | 1.5: 39 | 1.最常见的,消息推送,比如某东经常说某些商品我可能会感兴趣,然而并没有。 40 | 2.网站相关度排行,通过点击量,网页内容进行综合分析。 41 | 3.图片搜索,现在大部分还是通过标签来搜索,不过基于像素的搜索也总会有的吧。 -------------------------------------------------------------------------------- /ch2_习题.md: -------------------------------------------------------------------------------- 1 | ### CH2 模评估与选择 2 | 1. 正例和返利应比例一样多,即总共1000 * 30% = 300用于留出法评估,各从正反的五百样本中选150个 3 | 因此有 (C_500^150)^2 种划分方法 4 | 5 | 2. 6 | - 10折交叉验证:由于每次训练样本正反例一样多,预测结果为正或反概率相同,因此错误率期望为50% 7 | - 留一法:假设留下的是正,则训练样本中反例数量大于正例数量,因此会被预测为反;同理留下的是反例时则会被预测为正例,也就是说错误率为100% 8 | 9 | 3. F1是P和R的加权调和平均,BEP是仅当P=R时的特殊情况时取值,不能反映整体的情况。F1和BEP值的大小没有明确关系。 10 | 11 | 4. 12 | - TRP: 真实正例/预测正例 = TP / (TP+FP) 13 | - P: 真实正例/预测正例 14 | **TRP = P** 15 | - FPR: 真是反例/预测正例 = FN / (TP+FP) 16 | - R: 预测正例/所有正例 = TP / (TP+FN) 17 | **FRP和R没有关系** 18 | 19 | 5. lrank中, f(x^+) < f(x^-)对应扫描到反例,之后正例个数n代表向上延伸n个单位;f(x^+) = f(x^-)表示同位置是正例,斜向上延伸,因此前面乘以1/2。而ROC是归一化的,因此求和之前除以系数(m^+m^-),整个式子就是ROC曲线上方空白区域面积,而ROC下方区域面积为AUC,相加得1。即AUC = 1 - lrank 20 | 21 | 6. ROC曲线每个点对应了一个TPR与FPR,此时对应了一个错误率。 22 | E_{cost}=(m^+ *(1-TPR)*cost_{01}+m^-*FPR*cost_{10})/(m^+ +m^-) 23 | 24 | 7. ROC曲线上每一点(FPR,TPR)对应了代价平面上的一条线段。 25 | FNR = 1 - TPR,即可在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示该条件下的期望总体代价 26 | 27 | 8. 28 | - Min−max规范化方法简单,而且保证规范化后所有元素都是正的,每当有新的元素进来,只有在该元素大于最大值或者小于最小值时才要重新计算全部元素。但是若存在一个极大(小)的元素,会导致其他元素变的非常小(大)。 29 | - z−score标准化对个别极端元素不敏感,且把所有元素分布在0的周围,一般情况下元素越多,0周围区间会分布大部分的元素,每当有新的元素进来,都要重新计算方差与均值。 30 | 31 | 9. 卡方检验: 32 | - 提出假设H0 H1 33 | - 计算统计量卡方 = (n-1)s^2 / σ^2 34 | - 计算拒绝域 X^2_1/α (n-1) and X^2_(1-1/α) (n-1) 35 | - 根据拒绝域,接受or拒绝假设 36 | -------------------------------------------------------------------------------- /ch3_习题.md: -------------------------------------------------------------------------------- 1 | 1. 训练集中每个样本减去同一个样本(eg第一个样本)可以将y=wx+b中的b消除掉,使用减去后的新样本进行训练,不必考虑b 2 | 2. 思路: 对目标函数和最大似然函数分别求二阶导,看是否恒大于等于0 3 | 3. 4 | ``` 5 | # -*- coding: utf-8 -*- 6 | 7 | import numpy as np 8 | from sklearn.cross_validation import train_test_split 9 | 10 | def sigmoid(z): 11 | return 1 / (1+np.exp(-z)) 12 | 13 | def logistic_regression(theta, x, y, iteration, alpha, lmbd): 14 | for i in range(iteration): 15 | theta = theta - alpha*(np.dot(x.transpose(), (sigmoid(np.dot(x, theta))-y)) + lmbd*theta)/y.shape[0] 16 | cost = -1/y.shape[0] * (np.dot(y.transpose(), np.log(sigmoid(np.dot(x, theta)))) + np.dot((1-y).transpose(), np.log(1-sigmoid(np.dot(x, theta))))) + lmbd/(2*y.shape[0])*np.dot(theta.transpose(), theta) 17 | print(f'Iteration: {i}, cost: {cost}') 18 | return theta 19 | 20 | def predict(theta, test): 21 | pred = np.zeros([test.shape[0], 1]) 22 | for idx, value in enumerate(np.dot(test, theta)): 23 | if sigmoid(value) >= 0.5: 24 | pred[idx] = 1 25 | else: 26 | pred[idx] = 0 27 | return pred 28 | 29 | def main(): 30 | density=np.array([0.697,0.774,0.634,0.608,0.556,0.430,0.481,0.437,0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719]).reshape(-1,1) 31 | sugar_rate=np.array([0.460,0.376,0.264,0.318,0.215,0.237,0.149,0.211,0.091,0.267,0.057,0.099,0.161,0.198,0.370,0.042,0.103]).reshape(-1,1) 32 | xtrain=np.hstack((density,sugar_rate)) 33 | xtrain=np.hstack((np.ones([density.shape[0],1]),xtrain)) 34 | ytrain=np.array([1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]).reshape(-1,1) 35 | xtrain,xtest,ytrain,ytest=train_test_split(xtrain,ytrain,test_size=0.25,random_state=33) 36 | 37 | theta_init=np.random.rand(3,1) 38 | theta=logistic_regression(theta_init, xtrain, ytrain,200, 0.5, 0.01) 39 | pred = predict(theta, xtest) 40 | print('predictions are',pred) 41 | print('ground truth is',ytest) 42 | print('theta is ',theta) 43 | print('the accuracy is',np.mean(pred==ytest)) 44 | 45 | if __name__ == '__main__': 46 | main() 47 | ``` 48 | 49 | 6. 通过将数据映射,使其在更高一维上可分;使用基于核方法的KLDA 50 | 9. 对于OvR,MvM来说,由于对每个类进行了相同的处理,其拆解出的二分类任务中类别不平衡的影响会相互抵消,因此通常不需要专门处理。 51 | -------------------------------------------------------------------------------- /ch4_习题.md: -------------------------------------------------------------------------------- 1 | 1. 决策树通过属性决定分类结果。若训练集不含冲突数据,则通过决策树分类,可以保证相同属性的样本会被分到同一类中。则会存在训练误差为0的决策树。 2 | 2. 使用最小训练误差会导致过拟合,使得学习模型泛化能力下降。 3 | -------------------------------------------------------------------------------- /ch5_习题.md: -------------------------------------------------------------------------------- 1 | 1. 神经元激活函数必须是非线性的。如果使用线性函数作为激活函数,神经网络和线性回归没有什么区别了就。 2 | 2. 都是希望可以将连续值映射到01区间上,因此logistic回归和神经元会选择sigmoid函数。但作为神经元的激活函数不一定要选择sigmoid,只要是非线性函数就可以。 3 | 3. 4 | -\frac{∂E_k}{∂v_{ih}}=-\frac{∂E_k}{∂b_h}\frac{∂b_h}{∂a_h}\frac{∂a_h}{∂v_{ih}} 5 | \frac{∂a_h}{∂v_{ih}}=x_i 6 | 以及由5.15 e_h=-\frac{∂E_k}{∂b_h}\frac{∂b_h}{∂a_h} 7 | 即可得到更新公式eta_hx_i 8 | 4. 学习率太低,梯度下降慢,迭代次数多;学习率太好,梯度不收敛,在最小值附近震荡 9 | 5. 编码实现bp网络参考另一个repository bp网络 10 | 6. 在网络训练过程中,学习率不断改变,当误差减少时学习率增加,当误差增大时学习率减少。 11 | when E(t) < E(t-1), eta(t+1) = (1+epsilon)*eta(t); 12 | when E(t) > E(t-1), eta(t+1) = (1-epsilon)*eta(t) 13 | 7. 根据异或构造训练集 x1,x2作为输入,输出为y;根据ABP确定参数wi和bi,通过径向基函数计算误差函数偏导,对网络进行更新。。。 14 | -------------------------------------------------------------------------------- /ch6_习题.md: -------------------------------------------------------------------------------- 1 | 1.$w$为超平面(w,b)法向量,点x到平面距离就是$x$到平面上一点距离往w方向的投影也就是用$x$到$x_0$距离除以法向量长度: $\frac{|w^Tx+b|}{|w|}$. 2 | 3 | 4.如果数据是线性可分的时候,且通过LDA求出的投射$w_l$与线性核求出的支持向量$w_s$是相互垂直的时候,二者等价。 4 | 5 | 5.若将隐层神经元设置为训练样本数却每个训练样本对应一个神经元中心,则以高斯径向基函数为激活函数的RBF神经网络与高斯核SVM的预测函数相同。 6 | 7 | 6.因为SVM的约束条件就是对于每一个样本都要正确分类,在此基础上才可以进行间隔最大化的求解。因此很容易过拟合。而且在SVM中经验风险是0,如果数据存在噪声,过拟合可能性很大,因此说SVM对噪声敏感。 8 | 9 | 7.引入拉格朗日乘子,得到拉格朗日函数,求偏导, for all i : 10 | $w=\sum{(\hat{\alpha_i}-\alpha_i)x_i}$ 11 | 12 | $0=\sum{(\hat{\alpha_i}-\alpha_i)}$ 13 | 14 | $C=\alpha_i+u_i$ 15 | 16 | $C=\hat{\alpha_i}+\hat{u_i}$ 17 | 18 | $\alpha_i(f(x_i)-y_i-\epsilon-\xi_i)=0$ 19 | 20 | $\hat{\alpha_i}(y_i-f(x_i)-\epsilon-\hat{\xi_i})=0$ 21 | 22 | $(C-\alpha_i)\xi_i=0$ 23 | 24 | $(C-\hat{\alpha_i})\hat{\xi_i}=0$ 25 | 26 | 9.待补充 27 | 10.使用特征选择方法提出冗余和不相关特征,降低维数 28 | -------------------------------------------------------------------------------- /ch7_习题.md: -------------------------------------------------------------------------------- 1 | 1. 2 | $P(色泽=青绿|好瓜)=\sigma_1$ 3 | $P(色泽=乌黑|好瓜)=\sigma_2$ 4 | $P(色泽=浅白|好瓜)=\sigma_3$ 5 | $\sigma_3=1-\sigma_1-\sigma_2$ 6 | $L(\sigma)=\prod_iP(色泽=x|好瓜)=\sigma_1^3\sigma_2^4(1-\sigma_1-\sigma_2)$ 7 | 对$L(\sigma)$求对于$\sigma_1$和$\sigma_2$的偏导: 8 | 9 | $L'(\sigma_1)=\sigma_1^2\sigma_2^4(3-4\sigma_1-3\sigma_2)$ 10 | $L'(\sigma_2)=\sigma_1^3\sigma_2^3(4-4\sigma_1-5\sigma_2)$ 11 | 令偏导得0, 求得 $\sigma_1=\frac{3}{8}$, $\sigma_2=\frac{1}{2}$, $\sigma_3=\frac{1}{8}$. 12 | 同理可求剩余两个属性的类条件概率 13 | 14 | 2.当条件独立性假设不成立,即存在有不独立的属性时,假设所有样本不独立的属性取值相同时分类也相同,此时朴素贝叶斯分类器仍会产生最优分类器 15 | 16 | 3 17 | `p_c = (Dc +1) / (8+ N[i])` 18 | `p_n = (Dnc +1) / (9 + N[i])` 19 | 20 | 4.可以对各项取对数累加。如果累加仍过多,可对每个加数除以属性个数 21 | 22 | 5.对于线性判别式 $J=\frac{|w^T(\mu_1-\mu_2)|^2}{w^T(\sum_1\sum_2)w}$ 求最大值,即对 $\frac{1}{J}=\frac{w^T(\sum_1\sum_2)w}{|w^T(\mu_1-\mu_2)|^2}$ 求最小值。 23 | $\frac{1}{J}=\sum_i\frac{(1-y_i)|w^T(x_i-\mu_1)|^2+y_i|w^T(x_i-\mu_2)|}{{|w^T(\mu_1-\mu_2)|^2}}$ 即可看做是贝叶斯分类器达到最优,每个样本的后验概率 $P(c|x)$ 最大,对应在线性判别中每个样本到对应分类的中心的距离除以两个类别中心的距离最小。因此线性判别分析可以产生最优贝叶斯分类器。 24 | 25 | 7.正负样本各需30d个,即共需要60d个样本。每个样本只有一个属性和测试样本相同其余都不同。当d=1时,三十个属性相同,三十不同。 26 | -------------------------------------------------------------------------------- /ch8_习题.md: -------------------------------------------------------------------------------- 1 | 1, $p-\delta=\frac12$, 则 $\delta=p-\frac12=\frac12-\epsilon$, 2 | $k=\frac{n}2$, $P(H(n)\leqslant{\frac{n}2)=\sum_{i=0}^{\frac{n}2}p^i(1-p)^{n-i}\leqslant e^{-2(\frac12-\epsilon)^2n}}=e^{-\frac12(1-2\epsilon)^2n}$ 3 | 4 | 4, GradientBoosting把上一个分类器的预测误差传给下一个分类器,以此生成新的分类器,并将梯度下降的下降方向作为权值。而Adaboost在训练的每一轮,根据样本分布为每个样本赋予权重用于下一个分类器的学习和生成权值。 5 | 6 | 6, Bagging主要关注降低方差。而对于朴素贝叶斯分类器,没有方差可以降低。对于朴素贝叶斯分类器不能用随机抽样的方法来提高泛化性能,因为使用全部训练样本生成的朴素贝叶斯分类器是最优分类器。 7 | 8 | 7, 随机森林每次从所有样本属性中随机抽几个属性用来计算,而Bagging每次训练使用全部属性,因此随机森林会速度更快 9 | 10 | 8, MultiBoosting可以有效降低误差和方差,但训练成本很大程度上增加;Iterative Bagging相比Bagging降低误差但相对方差上升。 11 | 12 | 9, 可以用k误差图对分类器多样性做可视化的度量。将每一对分类器作为二维空间上的一个点,x轴表示k度量,y轴表示两个分类器的平均误差。在图的左下角的点有低误差和低k值(高多样性) 13 | 14 | 10, 用Bagging提升kNN,每次训练随机抽样一个子样本集合训练分类器,对测试样本进行分类,最后取最多的一种分类。 15 | -------------------------------------------------------------------------------- /ch9_习题.md: -------------------------------------------------------------------------------- 1 | 1, 对于闵可夫斯基距离 $(\sum_{u=1}^n|x_{iu}-x_{ju}|^p)^{\frac1p}$,显然满足非负性,同一性和对称性。 2 | 设 $x_i$,,$x_j$,$x_k$: 3 | $dist_{mk}(x_i, x_j)=(\sum_{u=1}^n|x_{iu}-x_{ju}|^p)^{\frac1p}$ 4 | 5 | $dist_{mk}(x_i, x_k)=(\sum_{u=1}^n|x_{iu}-x_{ku}|^p)^{\frac1p}$ 6 | 7 | $dist_{mk}(x_j, x_k)=(\sum_{u=1}^n|x_{ju}-x_{ku}|^p)^{\frac1p}$ 8 | 9 | $p\geq1$时,$(\sum|x_iu-x_ku|^p)^{\frac1p}+(\sum|x_ju-x_ku|^p)^{\frac1p} \geq (\sum|x_iu-x_ju|^p)^{\frac1p}$,直递性成立; 10 | 11 | $p\leq1$时,$(\sum|x_iu-x_ku|^p)^{\frac1p}+(\sum|x_ju-x_ku|^p)^{\frac1p} \leq (\sum|x_iu-x_ju|^p)^{\frac1p}$,直递性不成立; 12 | 13 | 当$p\to\infty$, $\sum_{u=1}^n(\frac{|x_iu-x_ju|}{\max_u|x_iu-x_ju|})^p=1$ 14 | $\lim_{p\to\infty}(\sum_{u=1}^n|x_iu-x_ju|^p)^{\frac1p}=(\max_u|x_iu-x_ju|)\lim_{p\to\infty}(\sum_{u=1}^n(\frac{|x_iu-x_ju|}{\max_u|x_iu-x_ju|})^p)^{\frac1p}=\max_u|x_iu-x_ju|$; 15 | 16 | 3, k-means得到的是局部最优解,不是全局最优解。 17 | 18 | 5, 连接性:假设xi为核心对象,由于xj可以由xi密度可达。则存在核心对象xk,使得xi与xk密度直达,xk与xj密度直达。由于xk是核心对象,则xk与xi密度直达。且密度直达是密度可达的子集,所以xk与xj密度可达,xk与xi密度可达,所以xi与xj密度相连。 19 | 20 | 6, 对于所有分类都有一个可以包含所有类内样本的最小圆。最小距离是扩大半径直到遇到第一个其他类的点时合并这两个类;最大距离是扩大半径直到包含另一个其他类的全部样本时合并这两个类 21 | 22 | 7, k-means,DBSCAN,AGNES是凸聚类;高斯混合聚类能产生非凸聚类 23 | 24 | 9, 对于混合属性中的连续属性,可以用闵可夫斯基距离作为度量;对于非连续属性可以使用海明距离进行度量。 25 | --------------------------------------------------------------------------------