↑↑↑关注后"星标"Datawhale

每日干货 & 每月组队学习,不错过

Datawhale干货

作者:小雨姑娘,康涅狄格大学,Datawhale成员

这几天看了看SVM的推导,看的是真的头疼,那就先梳理基础的线性判别分析模型,加深对SVM的理解。

线性判别分析是一种线性的分类模型。

线性分类模型是指采用直线(或超平面)将样本直接划开的模型,其形式可以表示成  的形式,划分平面可以表示成 。这里可以看出,线性分类模型对于样本的拟合并不一定是线性的,例如逻辑回归(外面套了一层sigmod函数)和感知机(外面套了一层激活函数)。

线性判别分析的基本思想是把所有样本投影到一条直线上,使样本在这条直线上最容易分类。

设直线的方向向量为,则样本在直线上的投影为,如图:

我们的目标是使两类样本的中心点在线上的投影距离大(两类样本区分度高),同时使每一类样本在线上投影的离散程度尽可能小(类内样本区分度低)。

令,,分别代表每一类的样本,每一类样本的均值向量,每一类样本的协方差矩阵。

若将所有样本都投影到直线上,则两类样本的中心点可分别表示为, 。

若将所有样本都投影到直线上,则两类样本的协方差可表示为, 。

协方差是什么?协方差表示的是两个变量总体误差的期望。如果两个变量的变化趋势一致,则为正值;若相反则为负值;变化趋势无关时为0,此时两个变量独立。

协方差矩阵是什么?协方差矩阵的元素是任意两个变量之间的协方差。

因此我们如果要让两类样本在投影后离散程度尽可能小,我们就应该让他们之间的方差尽可能小。计算每一类元素投影后的方差在做向量化时,中间就是协方差矩阵(不好意思,下面第二个应该加个转置)。

使两类样本的中心点在线上的投影距离大,同时使每一类样本在线上投影的离散程度尽可能小的表达式可以写为:

对于参数的优化问题可以做如下转换:

因为求的是一个方向向量,所以 同样也是所求的解,因此我们可以假定

(相当于为乘以一个系数使得其最后的和为1)

则问题转换为二次规划问题:

解得:

最后的判别模型可表示为:

其中b由于不在目标函数中,所以要手动去找,一般经验方法是:

Python实现如下:

import numpy as np# 2 dm vectors
x_0 = np.array([[2.95,6.63],[2.53,7.79],[3.57,5.65],[3.16,5.47]])
x_1 = np.array([[2.58,4.46],[2.16,6.22],[3.27,3.52]])# mean vectors
u_0 = np.mean(x_0, axis=0)
u_1 = np.mean(x_1, axis=0)# S_w & S_b
S_w = np.cov(x_0, rowvar=False) + np.cov(x_1, rowvar=False)
S_b = np.matmul((u_0 - u_1).reshape(-1,1), (u_0 - u_1).reshape(1,-1))# Result
w = np.matmul(np.linalg.inv(S_w), (u_0 - u_1))
b = -1 * np.dot((u_0+u_1)/2, w)

实验结果

利用 LDA 进行一个分类的问题:假设一个产品有两个参数柔软性 A 和钢性 B,来衡量它是否合格,如下图所示:

X_0类:

for i in x_0:print(np.dot(w , i) + b) # 7.908179218783431
# 8.836977507881144
# 11.047547831774281
# 3.8717837839741094

X_1类:

for i in x_1:print(np.dot(i , x_0[0]) + b) # -39.39697440389426
# -28.96717440389427
# -43.59367440389427

整理不易,三连

经典分类:线性判别分析模型!相关推荐

  1. LDA 线性判别分析模型

    线性判别分析(Linear Discriminant Analysis,LDA)是一种可作为特征抽取的技术,可以提高数据分析过程中的计算效率,同时对于不适用于正则化的模型,它可以降低模型灾难带来的过拟 ...

  2. python--LDA线性判别分析模型

    以下内容笔记出自'跟着迪哥学python数据分析与机器学习实战',外加个人整理添加,仅供个人复习使用. 1. 导入数据 import numpy as np import pandas as pd d ...

  3. 邻域线性判别《Neighborhood linear discriminant analysis》

    模式识别与机器学习老师留了作业说是让找一篇线性判别的论文,所以就记录一下论文(<Neighborhood linear discriminant analysis>)吧,虽然只是一些翻译. ...

  4. 线性判别准则与线性分类编程实践

    一.线性判别分析 (一)简介 线性判别分析(linear discriminant analysis,LDA)是对费舍尔的线性鉴别方法的归纳,这种方法使用统计学,模式识别和机器学习方法,试图找到两类物 ...

  5. 线性判别准则和线性分类算法

    一.线性判别-LDA         线性分类:指存在一个线性方程可以把待分类数据分开,或者说用一个超平面能将正负样本区分开,表达式为y=wx,这里先说一下超平面,对于二维的情况,可以理解为一条直线, ...

  6. fisher判别_经典模式识别:Fisher线性判别

    本文将介绍Fisher线性判别的原理和具体实践,阅读时间约8分钟,关注公众号可在后台领取数据集资源哦^-^ Fisher线性判别 1.背景介绍 生活中我们往往会遇到具有高维特性的数据,如个人信息,天气 ...

  7. Python 分类问题研究-Fisher线性判别

    [实验目的] 1.掌握常见机器学习分类模型思想.算法,包括Fisher线性判别.KNN.朴素贝叶斯.Logistic回归.决策树等: 2.掌握Python编程实现分类问题,模型评价指标.计时功能.保存 ...

  8. 机器学习算法(九): 基于线性判别LDA模型的分类(基于LDA手写数字分类实践)

    机器学习算法(九): 基于线性判别模型的分类 1.前言:LDA算法简介和应用 1.1.算法简介 线性判别模型(LDA)在模式识别领域(比如人脸识别等图形图像识别领域)中有非常广泛的应用.LDA是一种监 ...

  9. 机器学习(六)分类模型--线性判别法、距离判别法、贝叶斯分类器

    机器学习(六)分类模型--线性判别法.距离判别法.贝叶斯分类器 首先我们了解常见的分类模型和算法有哪些 线性判别法 简单来说就是用一些规定来寻找某一条直线,用直线划分学习集,然后根据待测点在直线的哪一 ...

最新文章

  1. Mybatis学习错误之:重复加载mapper.xml
  2. C语言退出多层嵌套循环技巧
  3. js操作节点对象-getElementById
  4. Ionic3 通讯录索引的实现
  5. 一个好用的便利设置浏览器代理的Chrome扩展应用
  6. Python中的If,Elif和Else语句
  7. 数学家探索两个几何世界之间的镜像链接
  8. linux代码_Sonar代码走查的配置(linux)
  9. [BZOJ]2820: YY的GCD
  10. Linux内核深入理解系统调用(2):vsyscall 和 vDSO 以及程序是如何运行的(execve)
  11. 广东技能大赛软件测试项目,我校喜获2019年全国职业院校技能大赛软件测试赛项二等奖...
  12. 主数据治理平台培训规程
  13. uniGUI session超时时间设置
  14. b250支持服务器cpu,b250m主板应该上什么cpu
  15. c语言写街机,C 实现 Atari 经典街机游戏《飞天蜈蚣》
  16. MATLAB理论力学应用
  17. django项目启动加载训练的模型报错OSError: Unable to open file (unable to open file: name = ‘model/model_weigh完美解决
  18. 25 岁,毕业写前端的这三年
  19. 今天,传说中的老方给我们班上课了
  20. oracle 存储过程带入参,oracle中带参存储过程的使用

热门文章

  1. .NET判断字符串是否是数值型或xxx型
  2. TP-link 设置MAC地址过滤
  3. 【POJ】2377 Bad Cowtractors(最大生成树)
  4. 【POJ】2503 Babelfish(字典树,map,指针)
  5. 重磅!深度学习知识总结和调参技巧开放下载了
  6. 机器学习中的线性回归,你理解多少?
  7. “不会Linux,到底有多危险?”骨灰级成程序员:基本等于自废武功!
  8. 今日头条李磊等最新论文:用于文本生成的核化贝叶斯Softmax
  9. 求助:我有一辆机器人小车,怎么让它跑起来,还会避障、目标跟踪、路径规划?...
  10. Hinton等人最新研究:大幅提升模型准确率,标签平滑技术到底怎么用?