感知机
来源:互联网 发布:采购平台软件 编辑:程序博客网 时间:2024/05/01 19:23
考虑到还有一个月要找工作了,所以决定写个博客来抢救一下自己(梳理一下所学的东西)
从最简单的感知机开始,感知机说来菜鸡,但在我看来却是集大成的体现(o゜▽゜)o☆
(我的理解线性SVM就是它的进化版)
先来看看感知机的基础面板:
1)目的:分类,二分类;
2)损失函数:
;
3)方法:梯度下降,每次找分错的样本点根据梯度修改权重w
至于它的对偶问题,我们假设对于权重w和偏置b初始化为0,那么最后的w和b就变成了这个样子:
其中N表示样本的个数,αi实质表示所对应第i个样本在训练过程中误分类的次数(也是根据该样本调整w、b的次数)
(上面那个w是不是和SVM里头那个w对偶形式一毛一样o(* ̄▽ ̄*)ブ)
理论部分结束,我们开始撕代码= =
class Perceptron: def __init__(self): self._w = self._b = None def fit(self, x, y, lr=0.01, epoch=1000): x, y = np.asarray(x, np.float32), np.asarray(y, np.float32) self._w = np.zeros(x.shape[1]) self._b = 0. for _ in range(epoch): err = -y * self.predict(x, True) idx = np.argmax(err) if err[idx] < 0: break delta = lr * y[idx] self._w += delta * x[idx] self._b += delta def predict(self, x, raw=False): x = np.asarray(x, np.float32) y_pred = x.dot(self._w) + self._b if raw: return y_pred return np.sign(y_pred).astype(np.float32)
我们初始化权重w和b为0,学习率(lr)为0.01迭代次数为1000(你问我为啥要有迭代次数的限制?万一数据集有异常点怎么办,万一线性不可分怎么办,不可分我也很绝望啊(;′⌒`))
每一次我们选择下降步子最大的那个样本进行下降,当然这里你可以进行修改,取一个batch计算它梯度,然后取平均下降
我们可以看下效果
效果还不错,收工o(* ̄▽ ̄*)ブ
阅读全文
0 0
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- 感知机
- java 基础类型对应的Object在+-><运算符中的问题
- 关于错误处理
- 进制转化(小bug)
- Linux学习收藏--不定期更新
- ZOJ --- 2974 倒水 【思维 + 矩阵快速幂】
- 感知机
- web前端学习路径
- wireshark抓包过滤器
- C++自己写的程序中,出现“无法启动(0xc00007b)”的解决方法
- 【webview】android webview 显示空白页问题解决
- 数据的本地存储——Json
- 堆——洛谷 P1484 种树
- json
- C# .net中cookie值为中文时的乱码解决方法