Fisher分类器/LDA
来源:互联网 发布:java源文件的扩展名 编辑:程序博客网 时间:2024/06/04 01:34
最近看特征选择的方法,有一篇文章提到用fisher score来挑选特征
然后就顺手回顾一下fisher分类器和LDA
先来说LDA,不同于PCA, LDA是有监督的降维,需要类标签
它的想法是我们希望投影过后类内样本的距离尽可能小,类间样本的距离尽可能大,所以它想到用一个除式作为目标函数来求解
其中分子为样本间距离,分子为类内样本方差之和
我们通过拉格朗日乘子展开对w求偏导,和PCA一样又能转化为求特征值和特征向量的问题
当我们把它映射到一维上时,我们很自然想到设阈值对其进行分类,于是乎fisher分类器就整出来了
开工写代码
class Fisher: def __init__(self): self._w = self._b = None def fit(self, x, y): x, y = np.asarray(x, dtype=np.float32), np.asarray(y, dtype=np.float32) x0, x1 = np.mean(x[y == -1], axis=0), np.mean(x[y == 1], axis=0) Sb = x0.reshape(len(x0), 1).dot(x1.reshape(1, len(x1))) Sw = (x[y == -1]-x0).T.dot(x[y == -1]-x0) + (x[y == 1]-x1).T.dot(x[y == 1]-x1) w, _, _ = np.linalg.svd(np.linalg.inv(Sw).dot(Sb)) self._w = w[:, 0] self._b = 0. self._b = np.mean(y-self.predict(x, raw=True)) if (lda.predict(x) == y).mean() < 0.5: self._w = -self._w self._b = -self._b def predict(self, x, raw=False): pre = x.dot(self._w)+self._b if raw: return pre else: return np.sign(pre).astype(np.float32)看看效果
不错,收....
日常等等
值得一提的是SB,哦不Sb这个用以衡量类间距离的矩阵的秩最大为C-1(C为类别数目),因为最后一个μc可以用μ1...μc-1来表示
收工。
阅读全文
0 0
- Fisher分类器/LDA
- LDA(Fisher判别)
- Fisher 线性分类器(1)----Fisher准则函数
- 线性分类器之Fisher线性判别函数
- 线性分类器:Fisher线性判别
- 线性分类器之Fisher线性判别
- LDA(FISHER)与核LDA
- LDA-模式识别线性分类器
- LDA 线性判别分析/Fisher线性判别
- 模式识别中Fisher分类器的Matlab实现及测试
- Fisher准则线性分类器的Python实现
- 基于fisher线性判别法的分类器设计
- 分类器的设计(fisher准则函数设计俩个类别的分类器)
- LDA线性分类
- 机器学习笔记_降维_1:LDA(fisher)
- LDA 两类Fisher线性判别分析及python实现
- Fisher线性判别分析(Linear Discriminant Analysis,LDA)
- Fisher线性分类器(2)--- 各最优参数的确定
- c# 日期转换问题
- CTreeCtrl的用法
- 常用对象
- 增强系统Context Node
- Socket
- Fisher分类器/LDA
- 易云股份MySQL云数据库上线,推进IaaS与PaaS融合战略布局
- UDP套接字编程以及提高UDP可靠性的方法
- 微信小程序中使用emoji表情相关说明
- java 项目工具Maven详解
- Java 理论与实践 处理 InterruptedException
- 解决imeOptions=“actionDone”无效问题
- 计算机右键 管理 弹出该文件没有与之关联程序
- mtk6589显示子系统笔记(一)