python 费舍尔判别法
Fisher判别分析原理详解

Fisher判别分析原理详解说起Fisher判别分析,不得不提到一个大神级人物!Ronald Aylmer Fisher (1890~1962)英国统计学家和遗传学家主要著作有:《根据孟德尔遗传方式的亲属间的相关》、《研究者用的统计方法》、《自然选择的遗传理论》、《试验设计》、《近交的理论》及《统计方法和科学推理》等。
他一生在统计生物学中的功绩是十分突出的。
•生平1890年2月17日生于伦敦,1962年7月29日卒于澳大利亚阿德莱德。
1912年毕业于剑桥大学数学系,后随英国数理统计学家J.琼斯进修了一年统计力学。
他担任过中学数学教师,1918年任罗坦斯泰德农业试验站统计试验室主任。
1933年,因为在生物统计和遗传学研究方面成绩卓著而被聘为伦敦大学优生学教授。
1943年任剑桥大学遗传学教授。
1957年退休。
1959年去澳大利亚,在联邦科学和工业研究组织的数学统计部作研究工作。
大神解决的问题•Fisher 线性判别函数的提出:在用统计方法进行模式识别时,许多问题涉及到维数,在低维空间可行的方法,在高维空间变得不可行。
因此,降低维数就成为解决实际问题的关键。
Fisher 的方法,就是解决维数压缩问题。
对xn的分量做线性组合可得标量yn=wTxn,n=1,2,…,Ni得到N个一维样本yn组成的集合。
从而将多维转换到了一维。
考虑把d维空间中的数据点投影到一条直线上去的问题,需要解决的两个问题:(1)怎样找到最好的投影直线方向;(2)怎样向这个方向实现投影,这个投影变换就是要寻求的解向量w*。
这两个问题就是Fisher方法要解决的基本问题。
•判别分析的一些基本公式Fisher判别分析用于两类或两类以上间的判别,但常用于两类间判别。
Fisher判别函数表达式(多元线性函数式):判别函数的系数是按照组内差异最小和组间差异最大同时兼顾的原则来确定判别函数的。
Fisher判别准则:判别临界点:Fisher判别分析思想:1. 类间差异大,类内变异小,最大2. 方差分析的思想:以下值最大•Fisher判别的原理分析w1方向之所以比w2方向优越,可以归纳出这样一个准则,即向量w的方向选择应能使两类样本投影的均值之差尽可能大些,而使类内样本的离散程度尽可能小。
Fisher线性分类器通俗解释及MATLAB、Python实现

Fisher线性分类器通俗解释及MATLAB、Python实现⼀、通俗的解释:问题提出:还是以iris的数据为例,有A、B、C三种花,每⼀类的特征都⽤4维特征向量表⽰。
现在已知⼀个特征向量,要求对应的类别,⽽我们⼈可以直接通过眼睛看⽽作出分类的是在⼀维⼆维三维空间,⽽不适应这样的四维数据。
启⽰:假设有这样的⼀个⽅向向量,其与特征向量进⾏内积运算(即向⽅向向量的投影)后,结果为⼀个数值,若同类的特征向量投影后聚集在⼀起,不同类的特征投影后相对分散,那么,我们的⽬的就达到了。
⽬标:这样就有了⽅向,即要寻找⼀个独特的⽅向,使其达到我们的要求。
注:具体的推导过程,参看教科书,另外,在求解极值的时候,利⽤了矩阵论中的向量导数运算。
⼆、MATLAB程序:clearA=[5.1,3.5,1.4,0.24.9,3.0,1.4,0.24.7,3.2,1.3,0.24.6,3.1,1.5,0.25.0,3.6,1.4,0.25.4,3.9,1.7,0.44.6,3.4,1.4,0.35.0,3.4,1.5,0.24.4,2.9,1.4,0.24.9,3.1,1.5,0.15.4,3.7,1.5,0.24.8,3.4,1.6,0.24.8,3.0,1.4,0.14.3,3.0,1.1,0.15.8,4.0,1.2,0.25.7,4.4,1.5,0.45.4,3.9,1.3,0.45.1,3.5,1.4,0.35.7,3.8,1.7,0.35.1,3.8,1.5,0.35.4,3.4,1.7,0.25.2,4.1,1.5,0.15.5,4.2,1.4,0.24.9,3.1,1.5,0.15.0,3.2,1.2,0.25.5,3.5,1.3,0.24.4,3.2,1.3,0.25.0,3.5,1.6,0.6 5.1,3.8,1.9,0.44.8,3.0,1.4,0.35.1,3.8,1.6,0.24.6,3.2,1.4,0.25.3,3.7,1.5,0.2 5.0,3.3,1.4,0.2 7.0,3.2,4.7,1.4];B=[6.4,3.2,4.5,1.5 6.9,3.1,4.9,1.55.5,2.3,4.0,1.36.5,2.8,4.6,1.55.7,2.8,4.5,1.36.3,3.3,4.7,1.6 4.9,2.4,3.3,1.0 6.6,2.9,4.6,1.3 5.2,2.7,3.9,1.4 5.0,2.0,3.5,1.05.9,3.0,4.2,1.56.0,2.2,4.0,1.0 6.1,2.9,4.7,1.45.6,2.9,3.6,1.36.7,3.1,4.4,1.4 5.6,3.0,4.5,1.55.8,2.7,4.1,1.06.2,2.2,4.5,1.5 5.6,2.5,3.9,1.15.9,3.2,4.8,1.86.1,2.8,4.0,1.3 6.3,2.5,4.9,1.5 6.1,2.8,4.7,1.25.5,2.4,3.8,1.1 5.5,2.4,3.7,1.05.8,2.7,3.9,1.26.0,2.7,5.1,1.65.4,3.0,4.5,1.56.0,3.4,4.5,1.6 6.7,3.1,4.7,1.5 6.3,2.3,4.4,1.3 5.6,3.0,4.1,1.3 5.5,2.5,4.0,1.35.5,2.6,4.4,1.26.1,3.0,4.6,1.4 5.8,2.6,4.0,1.2 5.0,2.3,3.3,1.0 5.6,2.7,4.2,1.3 5.7,3.0,4.2,1.25.7,2.9,4.2,1.36.2,2.9,4.3,1.3 5.1,2.5,3.0,1.1 5.7,2.8,4.1,1.3];C=[6.3,3.3,6.0,2.5 5.8,2.7,5.1,1.9 7.1,3.0,5.9,2.1 6.3,2.9,5.6,1.86.5,3.0,5.8,2.27.6,3.0,6.6,2.1 4.9,2.5,4.5,1.7 7.3,2.9,6.3,1.86.7,2.5,5.8,1.87.2,3.6,6.1,2.5 6.5,3.2,5.1,2.0 6.4,2.7,5.3,1.97.7,2.6,6.9,2.36.0,2.2,5.0,1.56.9,3.2,5.7,2.35.6,2.8,4.9,2.07.7,2.8,6.7,2.06.3,3.4,5.6,2.46.4,3.1,5.5,1.86.0,3.0,4.8,1.86.9,3.1,5.4,2.16.7,3.1,5.6,2.46.9,3.1,5.1,2.35.8,2.7,5.1,1.96.8,3.2,5.9,2.36.7,3.3,5.7,2.56.7,3.0,5.2,2.36.3,2.5,5.0,1.96.5,3.0,5.2,2.06.2,3.4,5.4,2.35.9,3.0,5.1,1.8];%⽅法⼀:先将A作为⼀类,BC作为⼀类NA=size(A,1);NB=size(B,1);NC=size(C,1);A_train=A(1:floor(NA/2),:);%训练数据取1/2(或者1/3,3/4,1/4)B_train=B(1:floor(NB/2),:);C_train=C(1:floor(NC/2),:);A_test=A((floor(NA/2)+1):end,:);B_test=B((floor(NB/2)+1):end,:);C_test=C((floor(NC/2)+1):end,:);A_train=A_train;D_train=[B_train;C_train];A_test=A_test;D_test=[B_test;C_test];for i=1:size(A_train,1)S1=S1+(A_train(i,:)-u1)'*(A_train(i,:)-u1);endfor i=1:size(D_train,1)S2=S2+(D_train(i,:)-u2)'*(D_train(i,:)-u2);endSw=S1+S2;w1=(inv(Sw)*(u1-u2)')';w1=w1./norm(w1);y0=w1*(u1+u2)'/2;% a1=w*u1'% d1=w*u2'r1=0;for i=1:size(D_test,1)if w1*D_test(i,:)'<y0r1=r1+1;endendrate_D=r1/size(D_test,1)r2=0;for i=1:size(A_test,1)if w1*A_test(i,:)'>y0r2=r2+1;endendrate_A=r2/size(A_test,1)三、Python程序:from sklearn import discriminant_analysisfrom sklearn.model_selection import train_test_splitimport numpydata = numpy.genfromtxt('iris.csv', delimiter=',', usecols=(0,1,2,3)) target = numpy.genfromtxt('iris.csv', delimiter=',', usecols=(4), dtype=str) t = numpy.zeros(len(target))t[target == 'setosa'] = 1t[target == 'versicolor'] = 2t[target == 'virginica'] = 3#print(clf.predict([data[3]]))。
fisher判别的基本步骤

Fisher判别是一种基于线性判别分析的分类方法,用于将样本分为不同的类别。
其基本步骤如下:
1. 确定判别变量:首先需要确定用于判别的变量,即用于分类的特征。
2. 计算判别函数:根据样本数据,计算出判别函数,即用于将样本分为不同类别的函数。
3. 确定判别类别:根据判别函数,将样本分为不同的类别。
4. 计算判别准确率:计算分类准确率,即正确分类的样本数与总样本数之比。
5. 优化判别函数:根据判别准确率,调整判别函数,以提高分类准确率。
6. 重复步骤3~5:重复以上步骤,直到达到所需的分类准确率。
在Fisher判别中,判别函数是基于Fisher线性判别的,即对于每个类别,计算出一个线性函数,使得属于该类别的样本与属于其他类别的样本的距离最大化。
这个过程可以通过矩阵运算和求导来实现。
总之,Fisher判别是一种基于线性判别分析的分类方法,其基本步骤包括确定判别变量、计算判别函数、确定判别类别、计算判别准确率、优化判别函数和重复步骤3~5,直到达到所需的分类准确率。
费舍尔算法

费舍尔算法
费舍尔算法是一种用于解决多元线性回归问题的统计学算法。
它是由罗纳德·费舍尔在20世纪20年代提出的,被广泛应用于各种领域,如经济学、生物学、医学等。
多元线性回归问题是指在多个自变量的情况下,如何预测因变量的值。
费舍尔算法的核心思想是最小化残差平方和,即找到一组系数,使得预测值与实际值之间的误差最小。
具体来说,费舍尔算法通过以下步骤来求解多元线性回归问题:
1. 建立模型:根据实际问题,选择自变量和因变量,并建立数学模型。
2. 估计系数:利用样本数据,通过最小二乘法估计模型中的系数。
3. 检验模型:通过各种统计指标,如R方值、F统计量等,检验模型的拟合程度和显著性。
4. 预测值:利用估计的系数,对新的自变量进行预测,得到因变量的预测值。
费舍尔算法的优点在于它考虑了各个自变量之间的相关性,避免了多重共线性问题。
此外,它还可以通过F统计量来检验模型的显著性,从而避免了过拟合的问题。
然而,费舍尔算法也存在一些缺点。
首先,它假设误差项服从正态分布,如果数据不符合这个假设,就会导致误差的估计不准确。
其次,它对异常值比较敏感,如果数据中存在异常值,就会影响模型的拟合效果。
总的来说,费舍尔算法是一种简单而有效的多元线性回归算法,可以应用于各种领域的数据分析和预测问题。
但在实际应用中,需要根据具体情况选择合适的模型和方法,以获得更准确的结果。
判别分析(2)费希尔判别

两总体的Fisher判别法 判别法 两总体的
其中, 其中,S 即
jl
= ∑ ( x Aij − x Aj )( x Ail − x Al ) + ∑ ( x Bij − x Bj )( x Bil − x Bl )
i =1 i =1
na
nb
F = ∑ ∑ c j c l s jl
j =1 l =1
Fisher判别 判别
内容:
1、建立判别准则; 2、建立判别函数 3、回代样本; 4、估计回代的错误率; 5、判别新的样本。
Fisher判别 判别
y 是线性函数, 由于 ( X ) 是线性函数,一般可将 y( X )表示为
(4.2) ) 对于线性函数 y( X ) ,它的几何表示就是空间中 的一条直线或平面,或超平面, 的一条直线或平面,或超平面,如果我们把两 B 看成空间的两个点集, 总体 A、 看成空间的两个点集,该平面所起的 B 分开, 作用就是尽可能将空间两个点集 A 、 分开,如 所示。 图4.1所示。 所示
Fisher判别 判别
Fisher判别 判别
Fisher判别 判别
费希尔判别的基本思想是投影(或降维)
Fisher方法是要找到一个(或一组)投 影轴w使得样本投影到该空间后能 在保证方差最小的情况下,将不同 类的样本很好的分开。并将度量类 别均值之间差别的量称为类间方差 (或类间散布矩阵);而度量这些均值 周围方差的量称为类内方差(或类内 散布矩阵)。Fisher判决的目标就是: 寻找一个或一组投影轴,能够在最 小化类内散布的同时最大化类间布。
两总体的Fisher判别法 判别法 两总体的
两总体的Fisher判别法 判别法 两总体的
max I = max ( ya − yb )
fisher判别函数

Fisher判别函数,也称为线性判别函数(Linear Discriminant Function),是一种经典的模式识别方法。
它通过将样本投影到一维或低维空间,将不同类别的样本尽可能地区分开来。
一、算法原理:Fisher判别函数基于以下两个假设:1.假设每个类别的样本都服从高斯分布;2.假设不同类别的样本具有相同的协方差矩阵。
Fisher判别函数的目标是找到一个投影方向,使得同一类别的样本在该方向上的投影尽可能紧密,而不同类别的样本在该方向上的投影尽可能分开。
算法步骤如下:(1)计算类内散度矩阵(Within-class Scatter Matrix)Sw,表示每个类别内样本之间的差异。
Sw = Σi=1 to N (Xi - Mi)(Xi - Mi)ᵀ,其中Xi 表示属于类别i 的样本集合,Mi 表示类别i 的样本均值。
(2)计算类间散度矩阵(Between-class Scatter Matrix)Sb,表示不同类别之间样本之间的差异。
Sb = Σi=1 to C Ni(Mi - M)(Mi - M)ᵀ,其中 C 表示类别总数,Ni 表示类别i 中的样本数量,M 表示所有样本的均值。
(3)计算总散度矩阵(Total Scatter Matrix)St,表示所有样本之间的差异。
St =Σi=1 to N (Xi - M)(Xi - M)ᵀ(4)计算投影方向向量w,使得投影后的样本能够最大程度地分开不同类别。
w= arg max(w) (wᵀSb w) / (wᵀSw w),其中w 表示投影方向向量。
(5)根据选择的投影方向向量w,对样本进行投影。
y = wᵀx,其中y 表示投影后的样本,x 表示原始样本。
(6)通过设置一个阈值或使用其他分类算法(如感知机、支持向量机等),将投影后的样本进行分类。
二、优点和局限性:Fisher判别函数具有以下优点:•考虑了类别内和类别间的差异,能够在低维空间中有效地区分不同类别的样本。
Fisher判别法距离判别法Bayes判别法逐步判别法

总体G1 (i=1, …, p)
1 X1(1) …
i Xi(1) …
总体G2 (i=1, …, q)
p Xp(1) 1 X1(2)
…
i Xi(2) …
q Xq(2)
1
x11(1) … xi1(1) …
xp1(1) x11(2)
P(好人 / 做好事)
P好人P做好事 / 好人 P好人P(做好事 / 好人) P(坏人)P(做好事
/
坏人)
0.5 0.9
0.82
0.5 0.9 0.5 0.2
P(坏人/ 做好事)
P坏人P做好事/ 坏人 P好人P(做好事/ 好人) P(坏人)P(做好事
/
坏人)
0.5 0.2
0.18
0.5 0.9 0.5 0.2
7
目录 上页 下页 返回 结束
§4.2 距离判别
2020/6/22
8
目录 上页 下页 返回 结束
§4.2 距离判别
2020/6/22
9
目录 上页 下页 返回 结束
§4.2 距离判别
2020/6/22
10
目录 上页 下页 返回 结束
§4.2
4.2.2 多总体情况 1. 协差阵相同。
距离判别
2020/6/22
2020/6/22
3
目录 上页 下页 返回 结束
§4.1判别分析的基本理论
判别分析的假设之一,是每一个判别变量(解释变量)不 能是其他判别变量的线性组合。即不存在多重共线性问题。 判别分析的假设之二,是各组变量的协方差矩阵相等。判 别分析最简单和最常用的形式是采用线性判别函数,它们 是判别变量的简单线性组合。在各组协方差矩阵相等的假 设条件下,可以使用很简单的公式来计算判别函数和进行 显著性检验。 判别分析的假设之三,是各判别变量之间具有多元正态分 布,即每个变量对于所有其他变量的固定值有正态分布。 在这种条件下可以精确计算显著性检验值和分组归属的概 率。当违背该假设时,计算的概率将非常不准确。
简述fisher判别的基本思想

简述fisher判别的基本思想第一章,首先对经典fisher判别做了介绍,然后对经典fisher 判别的基本思想和条件,以及现代fisher判别方法进行了概括总结。
一、形态判别法二、遗传物质的存在形式;三、经典fisher判别方法四、实验判别法,在实验室中,为使两个变量都达到均衡状态,必须让研究者分别接触两种环境:①只包含正常小鼠和失常小鼠的环境;②除小鼠外还加入其它生物的环境。
这样可以避免因选择性压力而导致实验的偏倚,因此为了证明某一基因能否被作为特定基因存在于某一种生物,最好是对两种不同类型的环境分别进行比较。
例如小鼠具有特定的基因,而人没有该基因,则小鼠能生成与人相同类型的细胞,这一结论是不能肯定的。
对此只有在考虑到环境的情况下,在特定条件下观察实验组与对照组细胞中染色体的数目才能得到确定。
一般的经典fisher判别方法,在其所有的方法中,最具代表性的一种就是经典fisher判别方法。
这种方法是最早被提出的,也是使用最多的一种方法,它的基本思想是用小鼠和非小鼠的两组等量的无关动物和人体来比较。
例如在研究黑腹果蝇的性染色体上,基因在小鼠和人之间是相同的还是不同的,或者一个基因是从非小鼠而来,还是另有其他基因的来源等问题时,最适宜用经典fisher方法。
第二章,对经典fisher判别的基本原理和条件进行了阐述。
在实验中应控制所有影响实验结果的因素。
在实验前必须对变量、自变量和因变量做充分的测定。
由于经典fisher方法的假设基本上来自于两个变量,实验过程中可能会发生各种干扰因素,造成实验结果不能重复或实验偏差很大。
所以,为了保证实验结果的准确性,在实验前必须采取措施消除所有干扰因素。
为此在实验前必须明确影响实验的主要因素。
因此可根据变量的影响分为三种: 1、外界因素,这些因素是难以控制的。
例如光照强度、 ph值、试剂的浓度等等。
2、可以控制的因素。
3、受试动物因素,如血型、年龄、性别等。
另外对影响实验的外界因素必须加以控制,减少误差。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python费舍尔判别法
费舍尔判别法(Fisher’s Discriminant Analysis)是一种经典的统计学方法,用于解决二分类问题。
它通过计算投影向量,将高维数据投影到一维空间上,从而实现数据降维和分类的目的。
在本文中,我们将介绍Python中如何使用费舍尔判别法进行分类分析。
什么是费舍尔判别法?
费舍尔判别法是由英国统计学家罗纳德·费舍尔(Ronald Fisher)于1936年提出的。
它是一种线性判别分析(Linear Discriminant Analysis,简称LDA)方法,用于解决二分类问题。
费舍尔判别法的目标是找到一个投影向量,将数据投影到一维空间上,使得不同类别的数据在投影后的空间中能够最大程度地分离。
费舍尔判别法的核心思想是最大化类间散布矩阵与最小化类内散布矩阵之比。
类间散布矩阵度量了不同类别之间的差异性,而类内散布矩阵度量了同一类别内部的相似性。
Python中的费舍尔判别法
在Python中,我们可以使用scikit-learn库来实现费舍尔判别法。
scikit-learn 是一个功能强大的机器学习库,提供了丰富的分类、回归、聚类和降维等算法。
首先,我们需要安装scikit-learn库。
可以使用以下命令进行安装:
pip install scikit-learn
安装完成后,我们可以开始编写代码来实现费舍尔判别法。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 创建LinearDiscriminantAnalysis对象
lda = LinearDiscriminantAnalysis()
# 准备训练数据和标签
X_train = [[1, 2], [3, 4], [5, 6]] # 训练数据
y_train = [0, 1, 0] # 训练标签
# 使用训练数据和标签拟合模型
lda.fit(X_train, y_train)
# 准备测试数据
X_test = [[2, 3], [4, 5]]
# 使用训练好的模型进行预测
y_pred = lda.predict(X_test)
print(y_pred)
在上述代码中,我们首先导入LinearDiscriminantAnalysis类,然后创建一个lda 对象。
接下来,我们准备训练数据和标签,使用fit方法拟合模型。
最后,我们准备测试数据,并使用训练好的模型进行预测。
示例:鸢尾花数据集
为了更好地理解费舍尔判别法的应用,我们将使用经典的鸢尾花数据集进行分类分析。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, te st_size=0.2, random_state=42)
# 创建LinearDiscriminantAnalysis对象
lda = LinearDiscriminantAnalysis()
# 使用训练数据和标签拟合模型
lda.fit(X_train, y_train)
# 使用训练好的模型进行预测
y_pred = lda.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
在上述代码中,我们首先导入load_iris函数来加载鸢尾花数据集。
然后,使用train_test_split函数将数据集划分为训练数据和测试数据。
接下来,创建一个lda对象,并使用训练数据和标签拟合模型。
最后,我们使用训练好的模型进行预测,并计算准确率。
结论
本文介绍了Python中费舍尔判别法的基本概念和使用方法。
费舍尔判别法是一种经典的统计学方法,用于解决二分类问题。
通过最大化类间散布矩阵与最小化类内散布矩阵之比,费舍尔判别法能够在一维空间上将数据进行有效的分类。
使用scikit-learn库,我们可以轻松地实现费舍尔判别法,并在实际问题中应用。