第2章 感知机
2.1
模仿例题2.1,构建从训练数据求解感知机模型的例子。
例题 2.1 的数据集如下:
x = [3 3; 4 3; 1 1];
y = [1; 1; -1];
感知机的训练过程为:
(1)选取初值w和b
(2)从训练集中选取数据
(3)如果
(4)转至(2),直到训练集中没有误分类点
import numpy as np
def hypothesis(w,x,b):
a = np.dot(w, x.T) + b
a[a<=0] = -1
a[a>0] = 1
return a
def training(x,y,eta):
sample_count = len(x)
feature_count = len(x[1])
w = np.zeros(feature_count)
b = 0;
miss = sum(hypothesis(w, x, b) != y)
i = 0
while miss > 0:
xi=x[i,:]
yi=y[i]
if ((np.dot(w, xi.T) + b)*yi <= 0):
w = w + eta * yi * xi
b = b + eta * yi
print(w)
print(b)
print(hypothesis(w, x, b))
miss = sum(hypothesis(w, x, b) != y)
print("miss:", miss)
print("---------")
else:
i = (i + 1) % sample_count
return w, b
if __name__ == '__main__':
x = np.array([[3,3],[4,3],[1,1]])
y=np.array([1,1,-1])
(w, b) = training(x,y,0.1)
print(w)
print(b)
感知机训练结果如下:
if __name__ == '__main__':
x = np.array([[3,3],[4,3],[1,1]])
y=np.array([1,1,-1])
(w, b) = training(x,y,0.1)
print(w)
print(b)
结果如下:
[0.1 0.1]
-0.30000000000000004
第三章 K近邻算法
3.1
参照图 3.1,在 二维空间中给出实例点,画出 k 为 1 和 2 时的 K 近邻法构成的空间划分,并对其进行比较,体会 K 值选择与模型复杂度及预测准确率的关系。
3.3
参照算法 3.3,写出输出为 x 的 K 近邻的算法。
在寻找最近邻节点的时候需要维护一个”当前最近点“,而寻找 K 近邻的时候,就需要维护一个”当前 K近邻点集“。首先定义一个”当前 K 近邻点集“插入新点操作:如果”当前 K近邻点集“元素数量小于K,那么直接将新点插入集合;如果”当前 K近邻点集“元素数量等于K,那么将新节点替换原来集合中最远的节点。
在 kd 树中找出包含目标点 x 的叶结点:从根结点出发,递归地向下访问树。若目标点 x当前维的坐标小于切分点的坐标,则移动到左子结点,否则移动到右子结点,直到子结点为叶结点为止;
如果”当前 K 近邻点集“元素数量小于K或者叶节点距离小于”当前 K 近邻点集“中最远点距离,那么将叶节点插入”当前 K 近邻点集“;
递归地向上回退,在每个结点进行以下操作:
(a) 如果”当前 K 近邻点集“元素数量小于K或者当前节点距离小于”当前 K 近邻点集“中最远点距离,那么将该节点插入”当前 K 近邻点集“,
(b) 检查另一子结点对应的区域是否与以目标点为球心、以目标点与于”当前 K近邻点集“中最远点间的距离为半径的超球体相交。如果相交,可能在另一个子结点对应的区域内存在距目标点更近的点,移动到另一个子结点 . 接着,递归地进行最近邻搜索;如果不相交,向上回退;当回退到根结点时,搜索结束,最后的”当前 K 近邻点集“即为 x 的 K 近邻点集。
第五章
5.1
根据表 5.1 所给的训练数据集,利用信息增益比(C4.5 算法)生成决策树。
数值比字符串更容易处理,所以在学习过程中需要将字符串映射到数值:
特征(编号) | 0 | 1 | 2 |
---|---|---|---|
年龄(0) | 青年 | 中年 | 老年 |
有工作(1) | 否 | 是 | |
有自己的房子(2) | 否 | 是 | |
信贷情况(3) | 一般 | 好 | 非常好 |
类别 | 否 | 是 |
训练数据集:
x = [[0,0,0,0],
[0,0,0,1],
[0,1,0,1],
[0,1,1,0],
[0,0,0,0],
[1,0,0,0],
[1,0,0,1],
[1,1,1,1],
[1,0,1,2],
[1,0,1,2],
[2,0,1,2],
[2,0,1,1],
[2,1,0,1],
[2,1,0,2],
[2,0,0,0]
];
y = [0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0];
计算数据集D的经验熵方法为:
计算特征A对数据集D的经验条件熵H(D|A):
计算信息增益比:
其中