fisher线性判别算法python_Fisher线性判别(LDA)python实现
LDA概述
首先,LDA是一个用于分类的有监督算法。
基本想法非常质朴,不失一般性的以二维平面二分类为例:
对于两类样本点,我们的目的是想找一条直线,将两类样本点映射到这条直线上时,使这两类之间的类间间距最大,类内间距最小。
图形上的直观理解如下。
对于第一张图,不同类映射到同一条直线上时出现混叠区域,难以判别类别。
对于第二张图,不同类映射到同一条直线上时没有混叠,分界鲜明(类间间距最大),且同一类内部样本距离样本中心点较近(类内间距最小)
推导
不想看的可跳过,毕竟现在都是直接调包(不过建议看下,可以深入理解算法,并且再次体会数学的美妙)
整个算法的推导是一个数学上很优美的过程,详细过程如下。
注意:在模式识别中,所有向量都是m×1形式。
定义类均值向量:
类内散度矩阵:
物理意义上理解:就是各样本到自己所属类别中心点的欧式距离平方的和
类间散度矩阵:
物理意义上理解:就是两类样本中心点的欧式距离的平方
假设我们已经找到最优的那条直线,将其记为向量u’
则新的(y1, y2)可以由下式得到:
同理,计算出新的Sw和Sb
则按照LDA最初始的想法,我们想让投影得到的类间距离最大,类内距离最小,我们可以构造下面这个函数:
即最大化该函数(在特征选择中也称该函数为JF判据,属于基于类内类间距离选择特征的一种判据)
接下来就是常规操作了,求导求极值
注意其中最后一步中的 α 是代换掉了倒数第二个公式中的最后两项向量的内积(可轻易证明其内积为一常数)且 λ 也为常数(亦可证得)
因为向量的大小不影响方向,所以直线向量可摒弃前面的常系数
所以决策域可表示为
算法总结
计算两类的均值向量
计算总类内散度阵
计算总类内散度阵的逆
按照 u 的计算公式求解 u
计算投影过后的两类的均值向量
计算分类阈值
对未知模式 x 判决模式类
可以看出,整个算法就是在进行数学运算,所以LDA是一个数学上非常优美的算法。
应用方向
作为特征抽取的技术
可以提高数据分析过程中的计算效率
对于不适用与正则化的模型,可以降低因维度灾难带来的过拟合
算法实现(python)
因为其数学过于优美,理解其思路后计算机编程实现非常简单
函数实现:
import numpy as np
def LDA(x, y): # x: all the input vector y: labels
x_1 = np.array([x[i] for i in range(len(x)) if y[i] == 1])
x_2 = np.array([x[i] for i in range(len(x)) if y[i] == -1])
mju1 = np.mean(x_1, axis=0) # mean vector
mju2 = np.mean(x_2, axis=0)
sw1 = np.dot((x_1 - mju1).T, (x_1 - mju1)) # Within-class scatter matrix
sw2 = np.dot((x_2 - mju2).T, (x_2 - mju2))
sw = sw1 + sw2
return np.dot(np.linalg.inv(sw), (mju1 - mju2))
测试:
import numpy as np
import matplotlib.pyplot as plt
import LDA
mean_1 = (-5, 0)
mean_2 = (5, 0)
cov = [[1, 0],
[0, 1]]
size = 200
np.random.seed(1)
x_1 = np.random.multivariate_normal(mean_1, cov, size)
np.random.seed(2)
x_2 = np.random.multivariate_normal(mean_2, cov, size)
x = np.vstack((x_1, x_2))
y = [-1] * 200 + [1] * 200
plt.scatter(x_1[:, 0], x_1[:, 1], color='blue', marker='o', label='Positive')
plt.scatter(x_2[:, 0], x_2[:, 1], color='red', marker='x', label='Negative')
plt.legend(loc='upper left')
plt.title('Original Data')
w = LDA.LDA(x, y)
x1 = 1
y1 = -1 / w[1] * (w[0] * x1)
x2 = -1
y2 = -1 / w[1] * (w[0] * x2)
plt.plot([x1, x2], [y1, y2], 'r')
plt.show()
print(w)
网络原因结果图传不上去了,先这样吧,代码可以直接运行,我写的时候写成了两个文件,你们稍微改下调用时代码即可。
fisher线性判别算法python_Fisher线性判别(LDA)python实现相关推荐
- lle算法c 语言,局部线性嵌入算法(LLE)与其Python实现-Go语言中文社区
PCA是至今为止运用最为广泛的数据降维算法,它通过最小化重构误差达到将高维数据映射到低维并同时保留数据中所存在的绝大部分信息.但是一般的PCA也有缺点,它只能实现线性降维.当然现在也有kernel P ...
- 可见面判别算法---可见面判别算法的分类
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/liyangke/blog/2875781
- Fisher线性判别算法原理及实现 MATLAB
Fisher线性判别算法原理及实现 MATLAB 一.Fisher判别器原理 二.代码实现 clc; close all; clear; %% 生成数据 rng(2020); %指定一个种子 mu1 ...
- 线性判别准则和线性分类算法
一.线性判别-LDA 线性分类:指存在一个线性方程可以把待分类数据分开,或者说用一个超平面能将正负样本区分开,表达式为y=wx,这里先说一下超平面,对于二维的情况,可以理解为一条直线, ...
- 线性判别准则与线性分类编程实践
一.线性判别分析 (一)简介 线性判别分析(linear discriminant analysis,LDA)是对费舍尔的线性鉴别方法的归纳,这种方法使用统计学,模式识别和机器学习方法,试图找到两类物 ...
- 机器学习(六)分类模型--线性判别法、距离判别法、贝叶斯分类器
机器学习(六)分类模型--线性判别法.距离判别法.贝叶斯分类器 首先我们了解常见的分类模型和算法有哪些 线性判别法 简单来说就是用一些规定来寻找某一条直线,用直线划分学习集,然后根据待测点在直线的哪一 ...
- ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)
ML:基于自定义数据集利用Logistic.梯度下降算法GD.LoR逻辑回归.Perceptron感知器.支持向量机(SVM_Linear.SVM_Rbf).LDA线性判别分析算法进行二分类预测(决策 ...
- FE之DR之线性降维:PCA/白化、LDA算法的数学知识(协方差矩阵)、相关论文、算法骤、代码实现、案例应用等相关配图之详细攻略
FE之DR之线性降维:PCA/白化.LDA算法的数学知识(协方差矩阵).相关论文.算法骤.代码实现.案例应用等相关配图之详细攻略 目录 PCA 1.PCA的数学知识 1.协方差矩阵计算 2.PCA算法 ...
- 机器学习算法系列(十)-线性判别分析算法(一)(Linear Discriminant Analysis Algorithm)
阅读本文需要的背景知识点:拉格朗日乘数法.一丢丢编程知识 一.引言 前面学习了一种用回归的方式来做分类的算法--对数几率回归算法,下面再来学习另一种分类算法--线性判别分析算法1(Linear D ...
最新文章
- 工业互联网 — TSN — 技术架构
- 深度学习(31)随机梯度下降九: Himmelblau函数优化实战
- spring boot 入门荔枝
- 在线涂鸦画板小程序源码
- 全Sql语句实现SBO事务日志记录与查询
- 地理位置经纬度在Mysql中用什么字段类型
- mysql handlersocket,MySQL-HandlerSocket交易
- C++11中的原子操作(atomic operation)和自旋锁
- 那一年我是如何从功能测试跨入自动化测试的,绝对让你不虚此行!
- 如何将excel.xls文件批量转换成.xlsx格式
- spark RDD 打印元素
- 001 Figuring in C/C++
- geartrax2020中文繁体转简体
- C语言之运算符练习题
- vue中使用 anmite.css 方法
- 网站推荐 | 那些小众却精美的网站
- Windows 下编译 taglib
- Unity3d办公场景灯光布设与光影烘焙及后处理【2020】
- 上台演讲怎么做?这篇文章告诉你
- 《设计模式》作者John Vlissides-UMLChina访谈录
热门文章
- Python 爬虫性能相关总结
- 5个趣味Python练手项目
- 阅读后这篇文章后,python正则表达式完全弄懂了
- 用Python标准库turtle画一头金牛,祝您新年牛气冲天!
- (winform)在一个form里面显示google地图
- [爬虫-python]爬取京东100页的图书(机器学习)的信息(价格,打折后价格,书名,作者,好评数,差评数,总评数)
- 手机pdf格式怎么弄_pdf怎么转html?pdf转html技能分享给你
- nginx tcp转发_Nginx性能优化技巧
- python下载大文件mp4_python下载mp4 同步和异步下载支持断点续下
- MySQL常用数据类型以及内置函数