实现一下模式识别(三)FLD
计算流程在线性判别分析LDA原理总结文章总结了
计算类内间散度矩阵的原理是计算类内间散度矩阵
有了算法步骤和计算所需要的公式,可以实现代码:
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_irisdef LDA(X, y, nComponents):'''输入:X为数据集(m*n),y为label(m*1),nComponents为目标维数输出:W 矩阵(n * nComponents)'''#set():剔除矩阵y里的重复元素,化为集合的形式labels = list(set(y)) # list():将其转化为列表xClasses = {} # 索引for label in labels:xClasses[label] = np.array([X[i] for i in range(len(X)) if y[i] == label]) # list解析# 整体均值meanAll = np.mean(X, axis=0) # 按列求均值,结果为1*n(行向量)meanClasses = {}# 求各类均值for label in labels:meanClasses[label] = np.mean(xClasses[label], axis=0) # 1*n# 全局散度矩阵St = np.zeros((len(meanAll), len(meanAll)))St = np.dot((X - meanAll).T, X - meanAll)# 求类内散度矩阵# Sw=sum(np.dot((Xi-ui).T, Xi-ui)) i=1...mSw = np.zeros((len(meanAll), len(meanAll))) # n*nfor i in labels:Sw += np.dot((xClasses[i] - meanClasses[i]).T, (xClasses[i] - meanClasses[i]))# 求类间散度矩阵Sb = np.zeros((len(meanAll), len(meanAll))) # n*nSb = St - Sw# 求类间散度矩阵# Sb=sum(len(Xj) * np.dot((uj-u).T,uj-u)) j=1...k# Sb=np.zeros((len(meanAll), len(meanAll) )) # n*n# for i in labels:# Sb+= len(xClasses[i]) * np.dot( (meanClasses[i]-meanAll).T.reshape(len(meanAll),1),# (meanClasses[i]-meanAll).reshape(1,len(meanAll))# )# 计算Sw-1*Sb的特征值和特征矩阵eigenValues, eigenVectors = np.linalg.eig(np.dot(np.linalg.inv(Sw), Sb))# 提取前nComponents个特征向量sortedIndices = np.argsort(eigenValues) # 特征值排序W = eigenVectors[:, sortedIndices[:-nComponents - 1:-1]] # 提取前nComponents个特征向量return Wdef main ():# 1.读取数据集iris = load_iris()X = iris.datay = iris.target# 2.LDA特征提取W = LDA(X, y, 2) # 得到投影矩阵newX = np.dot(X, W) # (m*n) *(n*k)=m*k# 3.绘图plt.scatter(newX[:, 0], newX[:, 1], c=y, marker='o') # c=y,plt.title('LDA')plt.show()if '__main__' == __name__:main()
实现一下模式识别(三)FLD相关推荐
- matlab中阈值计算方法,三种阈值计算方法在MatLab6.5中的实现
2007 年 10 月 湘南学院学报 Oct. ,2007 第 28 卷第 5 期 Journal of Xiangnan University Vol. 28 No. 5 收稿日期 :2007 - ...
- 汇编 浮点指令FLD,FSTP,FADD与FPU寄存器
知识点: 浮点数的存放方式 st0至st7 FLD,FST,FADD指令一.浮点数的存放方式 00401000 /$ 55 PUSH EBP 00401001 |. 8BEC MOV EB ...
- 模式识别技术,目前主要应用于哪几方面?
文字识别 汉字已有数千年的历史,也是世界上使用人数最多的文字,对于中华民族灿烂文化的形成和发展有着不可磨灭的功勋.所以在信息技术及计算机技术日益普及的今天,如何将文字方便.快速地输入到计算机中已成为影 ...
- 利用OpenCV的Haar特征目标检测方法进行人脸识别的尝试(一)
一.前言 由于还处于学习阶段,大多数内容都是从网上学习借鉴的,重复的内容就不多赘述,只是将自己的经验和想法分享出来.感觉不错的学习资源如下 http://www.cnblogs.com/tornado ...
- 机器学习的方法排名靠前的十种方法介绍
1.回归算法 在大部分机器学习课程中,回归算法都是介绍的第一个算法.原因有两个: 一.回归算法比较简单,介绍它可以让人平滑地从统计学迁移到机器学习中.二.回归算法是后面若干强大算法的基石,如果不理解回 ...
- 什么是深度学习,深度学习和机器学习之间,主要有什么区别
在深度学习中,计算机模型学习直接从图像.文本或声音中执行分类任务.深度学习模式可以达到新的精确度,有时甚至超过人类的表现.大多数深度学习方法使用神经网络的架构,这也是深度学习模型通常被称为深度神经网络 ...
- 机器学习技术在日常生活和商业领域的应用有哪些,主要带来了什么商业收益?
简而言之,机器学习将实现人.业务.物三者的智能连接,孕育客户与企业之间的全新互动场景,最终催生出真正的智能公司.为了充分发挥机器学习的应用潜力,我们需要营造现代化的商业环境,但前提是企业必须了解人工智 ...
- 中南大学自动化学院控制博士申请经验贴
此贴旨在分享一下中南大学自动化学院博士考核的流程,尤其对于外校考生了解一下要具体准备的内容. 当然本人虽然参加了中南的博士申请考核,但最终还是选择了北航升学. 需要注意的是中南没有笔试环节,但在面试过 ...
- 机器学习和大数据的基本介绍,两者之间有什么联系?
大数据的定义 大数据(bigdata),指无法在定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资 ...
- 基于MATLAB的验证码识别
摘要:验证码是各大网站用以防范计算机自动程序恶意攻击的手段之一.通过使用数字图像处理中的图片分割.开闭运算等手段,能够识别绝大部分网站的验证码.对验证码识别技术的研究,既能及早发现验证码的漏洞,也能对 ...
最新文章
- JVM(2)之 JAVA堆
- python导入csv文件-Python从CSV文件导入数据和生成简单图表
- long 比较大小_Long-Term Feature Banks
- 取两个日期相差几年_干货~44个最常用的日期和时间类函数组合
- boost::geometry::tuples用法的测试程序
- 现代软件工程 作业 结对编程 模板
- Spring Batch 批量处理策略
- python删除列表元素 // 列表的切片
- 程序员如何才算真正的高效编程?
- day2-python工具的选择使用
- Three20 NetWork
- JMeter Exception: java.net.BindException: Address already in use: connect(转)
- 免费后台挂尔雅浏览器下载及使用教程
- 彻底删除vmware
- 读后感之悟道-一位20年IT高管的职场心得
- 如何解决app store显示invalid address的问题
- 微信小程序开发,微信小程序轻松实现微信支付及微信提现到零钱功能
- java list里数据用逗号结合
- 【机器学习】机器学习30个笔试题
- lougu T7983 大芳的逆行板载
热门文章
- 智能硬件APP开发之路:基于机智云APP开源框架
- 大家好,我叫小K,初来乍到 请多多关照~
- 概率统计·参数估计【矩估计、极大似然估计、无偏性、有效性、相合性】
- 电脑桌面加html格式壁纸,巧妙使用IDM获取精美电脑桌面壁纸
- linux 启动 grub 修复工具,当Ubuntu无法启动时,如何修复GRUB2?
- Highest Scoring Word
- c语言 url字符串解析,c语言截取下载url中文件名称
- 精确率/召回率/准确率
- java 正则替换以 开头_String replaceAll-正则匹配-截取以指定字符开头,以指定字符结尾的字符串...
- Python——读取xlsx格式的Excel表格