一、Fisher算法

二、蠓的分类问题:

两种蠓AfApf已由生物学家根据它们的触角翼长加以区分(Af是能传播花粉的益虫,Apf是会传播疾病的害虫),两个矩阵中分别给出了6只Apf 和9只Af蠓的触角长(对应于矩阵的第1列)和翼长(对应于矩阵的第2列)的数据(See next slide)。根据触角长和翼长这两个特征来识别一个样本是Af还是Apf是重要的。

(1)试给出该问题的Fisher分类器;

(2)有三个待识别的模式样本,它们分别是(1.24,1.80),(1.28,1.84),( 1.40,2.04),试问这三个样本属于哪一种蠓。

数据集:

APF = np.array([
[1.14,1.78],[1.18,1.96],
[1.20,1.86],[1.26,2.00],
[1.30,2.00],[1.28,1.96]
]) AF = np.array([
[1.24,1.72],[1.36,1.74],
[1.38,1.64],[1.38,1.82],
[1.38,1.90],[1.40,1.70],
[1.48,1.82],[1.54,2.08],
[1.56,1.78]
])

三、代码实现:

Fisher算法关键在于求出权向量W_和阈值W*,然后求出待测数据的映射y_test,最后与W*阈值作比较。

import numpy as np

APF = np.array([
[1.14,1.78],[1.18,1.96],
[1.20,1.86],[1.26,2.00],
[1.30,2.00],[1.28,1.96]
]) AF = np.array([
[1.24,1.72],[1.36,1.74],
[1.38,1.64],[1.38,1.82],
[1.38,1.90],[1.40,1.70],
[1.48,1.82],[1.54,2.08],
[1.56,1.78]
]) #获取样本均值
def getAvg(x):
return np.mean(x, axis=0) #求两类样本类内离散度矩阵Si
def getSi(x, x_mean):
x_mean = x_mean.reshape(x.shape[1],1)
Si = np.zeros((x.shape[1],x.shape[1]))
for xi in x:
temp_xi = xi.copy().reshape(x.shape[1],1)
temp = (temp_xi-x_mean)
Si = Si + np.dot(temp, temp.T)
return Si # 求权向量W_
def getW(x1_mean,x2_mean,Sw):
return np.dot(np.linalg.inv(Sw),(x1_mean-x2_mean)) # 获取分类阈值w0和权向量W_
def get_w0(x1, x2):
x1_mean = getAvg(x1)
x2_mean = getAvg(x2)
S1 = getSi(APF, x1_mean)
S2 = getSi(AF, x2_mean)
Sw = S1+S2
W_ = getW(x1_mean,x2_mean,Sw) #获取投影点
y1 = np.dot(x1, W_)
y2 = np.dot(x2, W_) #求各类样本均值yi_mean
y1_mean = np.mean(y1)
y2_mean = np.mean(y2) #选取分类阈值w0
w0 = (y1_mean + y2_mean) / 2 return w0, W_ def Fisher(x1, x1_label, x2, x2_label, x_test):
w0, W_ = get_w0(x1,x2)
y_test = np.dot(x_test, W_)
if y_test > w0:
print('测试样本属于', x1_label)
elif y_test <w0:
print('测试样本属于',x2_label)
else:
print('测试样本可能属于%s,也可嫩属于%s'%x1_label%x2_label) x_tests = np.array([
[1.24,1.80],[1.28,1.84],[1.40,2.04]
]) i = 1
for x_test in x_tests:
print('第%d个'%i,end='')
i += 1
Fisher(APF,'蠓APF',AF,'蠓AF',x_test)

预测结果如下:

第1个测试样本属于 蠓APF
第2个测试样本属于 蠓APF
第3个测试样本属于 蠓APF

Fisher算法+两类问题的更多相关文章

  1. delphi 创建DBASE和FOXPRO两类DBF数据文件的差异

    delphi 创建DBASE和FOXPRO两类DBF数据文件的差异,主要有几点: 1.创建方法不同 DBASE的创建方法: Self.Table1.Close; Self.Table1.Active ...

  2. 06 - 从Algorithm 算法派生类中删除ExecuteInformation() 和ExecuteData() VTK 6.0 迁移

    在先前的vtk中,如vtkPointSetAlgorithm 等算法派生类中定义了虚方法:ExecuteInformation() 和 ExecuteData().这些方法的定义是为了平稳的从VTK4 ...

  3. Java 网络编程(二) 两类传输协议:TCP UDP

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html 两类传输协议:TCP,UDP TCP TCP是Transfer C ...

  4. MT【284】构造函数的导数的两类题型

    第一类: 已知定义在$R$上的奇函数$f(x),f(-1)=0,$当$x>0$时,$xf^{'}(x)-f(x)<0,$则$f(x)>0$的解集为____ 第二类: 已知函数$f(x ...

  5. MD5算法工具类

    抽时间写了一个算法工具类,目前支持的算法有SHA1,SHA256,SHA384,SHA512,MD5,同时支持获取文件的MD5值. 使用方法如下: 获取字符串的MD5值 String str= Alg ...

  6. 什么是UML?分哪两类?

    统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言.UML为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言 ...

  7. 两类for循环

    九.两类for循环 (一)穷举 1.格式 for (初始条件;循环条件 ;循环改变) { for (初始条件;循环条件;循环改变) { for (初始条件;循环条件;循环改变) { if (判断条件) ...

  8. Flyod 算法(两两之间的最短路径)

    Flyod 算法(两两之间的最短路径)动态规划方法,通过相邻矩阵, 然后把最后的结果存在这么一个矩阵里面,(i,j), #include <iostream> #include <v ...

  9. Spring Cloud的子项目,大致可分成两类

    Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目:第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cl ...

随机推荐

  1. Window下将nginx配置为开机自动启动

    前两天看到公司window服务器上面有个nginx在跑,重启服务器后没有自动启动,需要手动运行nginx,甚是麻烦呀 上网找了一下关于将nginx配置为系统服务并且开机自动启动的解决方案,这里mark ...

  2. python list遍历方法汇总

    list=['a','b','c','d','e'] #方法1: print('#方法1:') #i值为列表的item,list为列表名,因此i值即为列表元素 for i in list: #list ...

  3. Python 简明教程 --- 14,Python 数据结构进阶

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...

  4. express高效入门教程(2)

    2.请求和响应 2.1.请求相关 2.1.1.返回一个html页面 // 注意path模块需要先引入 app.get('/', function (req, res){ res.sendFile(pa ...

  5. QUIC/HTTP3 协议简析

    从 HTTP 的进化历史讲起,细说使用协议的变迁,了解原因发现问题,解码 QUIC 在 HTTP3 中的支撑作用,共同探讨 HTTP3 的未来. HTTP.HTTP2 和 HTTP3 先和大家来回顾一 ...

  6. 部署rabbitMQ镜像集群实战测试

    部署rabbitMQ镜像集群 版本信息 rabbit MQ: 3.8.5 Erlang: 官方建议最低21.3 推荐22.x 这里用的是23 环境准备 主机规划 主机 节点 172.16.14.3 磁 ...

  7. 【Xamarin.Forms 1】App的创建与运行

    引言 本篇文章将从介绍Xamarin.Forms创建开始. 开发环境 Visual Studio 2019 16.6.2 Xamarin.Forms 4.6.0.726 Android 5.0 (AP ...

  8. 打造属于你的聊天室(WebSocket)

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  9. python unittest自动测试框架

    编写函数或者类时进行测试,确保代码正常工作 python  unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...

  10. linux磁盘容量不足的处理方案

    在虚机上安装memcached时,突然发现磁盘空间不足. df -h 发现,磁盘一共12G,原来是新申请的虚机,磁盘分区没有挂载上. fdisk -l 查看磁盘,发现有 /dev/vdb1 /dev/ ...