一、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. JavaScript 集合基本操作

    参考 MDN 集合 Array 1. 2种创建数组的方式 var fruits = [] ; var friuits = new Array(); 2. 遍历 fruits.forEach(funct ...

  2. springboot项目打war包发布到外置tomcat

    第一步:修改pom.xml 1. <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> ...

  3. Docker(五)Docker镜像讲解

    Docker镜像讲解 镜像概念 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 Dock ...

  4. 入门大数据---Kafka的搭建与应用

    前言 上一章介绍了Kafka是什么,这章就讲讲怎么搭建以及如何使用. 快速开始 Step 1:Download the code Download the 2.4.1 release and un-t ...

  5. 最新的一波Vue实战技巧,不用则已,一用惊人

    在Vue中,不同的选项有不同的合并策略,比如 data,props,methods是同名属性覆盖合并,其他直接合并,而生命周期钩子函数则是将同名的函数放到一个数组中,在调用的时候依次调用 在Vue中, ...

  6. 深入理解RocketMQ(九)---实战(代码)

    一.批量发送消息 即多条消息放入List,一次发送,从而减少网络传输,提高效率 DefaultMQProducer producer = new DefaultMQProducer("bat ...

  7. offer到手!美团Java岗四面(多线程+redis+JVM+数据库)

    美团Java岗四面,已拿offer,前三面都是技术面,第四面是HR面,下面是面试题! 美团Java岗一面(技术,电话面,约40分钟) 自我介绍. 项目介绍. 了解过redis源码及redis集群么? ...

  8. js省市二级联动实例

    //动态创建省市二级联动<!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  9. vim常用指令参考

    (完)

  10. 使用.net standard实现不同内网端口的互通(类似花生壳)

    应用场景 1.公司电脑与家中电脑的远程控制,一般通过teamview.向日葵等软件,端口互通后,可以使用电脑自带的远程桌面 2.家中电脑搭建SVN.git仓库,在外网或者内网访问,一般使用云服务器,端 ...