一.什么是线性判别分析?

线性判别分析(Linear Discriminant Analysis,LDA)的一种经典的线性学习方法(属于监督学习),这里先借用周志华教授的《机器学习》中的图片来做一个直观的展示:

正如该图中展示的那样,LDA需要寻找一条合适的直线y=wTxy=w^Txy=wTx,使得数据集中的样例投影到该直线时同类样例的投影点尽可能接近,不同类样例的投影点尽可能远离,这样一来就可以对新样例进行分类了,具体做法同样是先将新样例投影到该直线上,然后根据投影点的位置来判断样本的类别。但是实际上LDA用于分类的情况并不是特别常见,其更常见的用法是用来进行高维数据的降维,但是本文还是对LDA分类进行了尝试。

二.推导过程(以二分类为例)

假设数据集DDD中包含mmm个样本,每个样本中xxx代表样例,yyy代表对应样例的标签(target),即D={(xi,yi)}i=1m,yi∈{0,1}D=\{(x_i,y_i)\}_{i=1}^m,\;yi \in \{0,1\}D={(xi​,yi​)}i=1m​,yi∈{0,1}。后面的讨论都是基于该假设,为了方便理解,这里先给出一些数学符号介绍:

数学符号 含义
XiX_iXi​ 表示第iii类样例的集合,其中i∈{0,1}i \in \{0,1\}i∈{0,1}
μi\mu_iμi​ 表示第iii类样例的均值向量,其中i∈{0,1}i \in \{0,1\}i∈{0,1}
w⃗\vec ww 投影直线的方向向量

2.1 投影

若已知向量x⃗\vec xx和向量w⃗\vec ww,则向量x⃗\vec xx与向量w⃗\vec ww上内积可表示为x⃗⋅w⃗=∣x⃗∣∣w⃗∣cosθ\vec x \cdot \vec w = |\vec x||\vec w|cos\thetax⋅w=∣x∣∣w∣cosθ,当w⃗\vec ww的模长为1时,两个向量的内积值就变成了x⃗\vec xx在w⃗\vec ww上的投影,即
x⃗⋅w⃗=∣x⃗∣∣w⃗∣cosθ=∣x⃗∣cosθ\begin{aligned} \vec x \cdot \vec w & = |\vec x||\vec w|cos\theta \\ & = |\vec x|cos\theta \end{aligned} x⋅w​=∣x∣∣w∣cosθ=∣x∣cosθ​

注意:后面内容中的向量都没有采用数学中向量的书写方式,而是表示为矩阵的形式!

2.2 类间散度矩阵

由于需要考虑如何使得不同类样例的投影点尽可能远离,因此需要采用一个标准来衡量类间距离,LDA中采用的是两个类别的均值向量μi,i∈{0,1}\mu_i,\;i\in\{0,1\}μi​,i∈{0,1}在直线上的投影间的距离,即
(wTμ0−wTμ1)2=(wT(μ0−μ1))2=(wT(μ0−μ1))((μ0−μ1)Tw)=wT(μ0−μ1)(μ0−μ1)Tw\begin{aligned} (w^Tμ_0−w^Tμ_1)^2 & =(w^T(μ_0−μ_1))^2 \\ & =(w^T(μ_0−μ_1))((μ_0−μ_1)^Tw) \\ & =w^T(μ0−μ1)(μ0−μ1)^Tw \end{aligned} (wTμ0​−wTμ1​)2​=(wT(μ0​−μ1​))2=(wT(μ0​−μ1​))((μ0​−μ1​)Tw)=wT(μ0−μ1)(μ0−μ1)Tw​
在《机器学习》一书中用Sb=(μ0−μ1)(μ0−μ1)TS_b=(μ0−μ1)(μ0−μ1)^TSb​=(μ0−μ1)(μ0−μ1)T表示类间散度矩阵,则上述公式中的类间距离被改写为了wTSbww^TS_bwwTSb​w。

2.3 类内散度矩阵

同样的,也需要提出一个指标来衡量同类样例投影点的接近程度,很容易的我们可以想到方差,方差可以用来度量一组数据间的离散程度,方差越大则数据就越分散。基于此我们可以分别计算出X0X_0X0​和X1X_1X1​的方差(不是真正标准的方差,没有除以样本量
var(X0)=∑x∈X0(wTx−wTμ0)2var(X1)=∑x∈X1(wTx−wTμ1)2var(X_0)=\sum\limits_{x \in X_0}(w^Tx−w^T\mu_0)^2 \\ var(X_1)=\sum\limits_{x \in X_1}(w^Tx−w^T\mu_1)^2 var(X0​)=x∈X0​∑​(wTx−wTμ0​)2var(X1​)=x∈X1​∑​(wTx−wTμ1​)2
两个类别的方差和为
var(X0)+var(X1)=∑x∈X0(wTx−wTμ0)2+∑x∈X1(wTx−wTμ1)2=∑x∈X0wT(x−μ0)(x−μ0)Tw+∑x∈X1wT(x−μ1)(x−μ1)Tw=wT(∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T)w\begin{aligned} var(X_0) + var(X_1)& =\sum\limits_{x \in X_0}(w^Tx−w^Tμ_0)^2 + \sum\limits_{x \in X_1}(w^Tx−w^Tμ_1)^2\\ & = \sum\limits_{x \in X_0}w^T(x−\mu_0)(x−\mu_0)^Tw + \sum\limits_{x \in X_1}w^T(x−\mu_1)(x−\mu_1)^Tw\\ & = w^T(\sum\limits_{x \in X_0}(x−\mu_0)(x−\mu_0)^T + \sum\limits_{x \in X_1}(x−\mu_1)(x−\mu_1)^T)w \end{aligned} var(X0​)+var(X1​)​=x∈X0​∑​(wTx−wTμ0​)2+x∈X1​∑​(wTx−wTμ1​)2=x∈X0​∑​wT(x−μ0​)(x−μ0​)Tw+x∈X1​∑​wT(x−μ1​)(x−μ1​)Tw=wT(x∈X0​∑​(x−μ0​)(x−μ0​)T+x∈X1​∑​(x−μ1​)(x−μ1​)T)w​
在《机器学习》一书中,用∑0\sum\limits_00∑​和∑1\sum\limits_11∑​分别表示∑x∈X0(x−μ0)(x−μ0)T\sum\limits_{x \in X_0}(x−\mu_0)(x−\mu_0)^Tx∈X0​∑​(x−μ0​)(x−μ0​)T和∑x∈X1(x−μ1)(x−μ1)T\sum\limits_{x \in X_1}(x−\mu_1)(x−\mu_1)^Tx∈X1​∑​(x−μ1​)(x−μ1​)T,并令Sw=∑0+∑1S_w=\sum\limits_0 + \sum\limits_1Sw​=0∑​+1∑​,则两个类别间的方差可以改写为
var(X0)+var(X1)=wTSwwvar(X_0)+var(X_1) = w^TS_ww var(X0​)+var(X1​)=wTSw​w

2.4 目标函数

根据LDA的目标,我们需要使得同类样例间的投影点尽可能接近,即使得wTSwww^TS_wwwTSw​w尽可能小,异类样例间的投影点尽可能远离,即使得wTSbww^TS_bwwTSb​w尽可能大,综合可以得到目标函数JJJ
J=wTSbwwTSwwJ=\frac{w^TS_bw}{w^TS_ww} J=wTSw​wwTSb​w​
可知JJJ的值越大,就越符合LDA的目标。观察目标函数JJJ可得,若w′w'w′是其解时,对于任意常数α\alphaα来说,αw\alpha wαw也是目标函数的解,也就是说目标函数的目标解与www的长度无关,而与其方向有关。鉴于此可令wTSww=1w^TS_ww=1wTSw​w=1,则目标函数等价于在约束条件为wTSww=1w^TS_ww=1wTSw​w=1的情况下,求解wTSbww^TS_bwwTSb​w的最大值,也等价于在同样约束条件下,求解−wTSbw-w^TS_bw−wTSb​w的最小值,利用拉格朗日乘子法可得
L(w,λ)=−wTSbw+λ(wTSww−1)L(w,\lambda)=-w^TS_bw+\lambda(w^TS_ww-1) L(w,λ)=−wTSb​w+λ(wTSw​w−1)
其中λ\lambdaλ为拉格朗日乘子,对上式求导并令导数为零可得
∂L(w,λ)∂w=−2Sbw+2λSww=0\frac{\partial L(w,\lambda)}{\partial w}=-2S_bw+2\lambda S_ww=0 ∂w∂L(w,λ)​=−2Sb​w+2λSw​w=0
即Sbw=λSwwS_bw=\lambda S_wwSb​w=λSw​w,又由于Sbw=(μ0−μ1)(μ0−μ1)TwS_bw=(\mu_0-\mu_1)(\mu_0-\mu_1)^TwSb​w=(μ0​−μ1​)(μ0​−μ1​)Tw中(μ0−μ1)Tw(\mu_0-\mu_1)^Tw(μ0​−μ1​)Tw为标量,设该标量的值为kkk,因此Sbw=λSwwS_bw=\lambda S_wwSb​w=λSw​w可以转换为:
(μ0−μ1)(μ0−μ1)Tw=(μ0−μ1)k=λSww(\mu_0-\mu_1)(\mu_0-\mu_1)^Tw=(\mu_0-\mu_1)k=\lambda S_ww (μ0​−μ1​)(μ0​−μ1​)Tw=(μ0​−μ1​)k=λSw​w
化简可得www的解为
w=Sw−1(μ0−μ1)kλw=S_w^{-1}(\mu_0-\mu_1)\frac{k}{\lambda} w=Sw−1​(μ0​−μ1​)λk​
而kλ\frac{k}{\lambda}λk​省略也对最后的求解不影响,因为只关心其方向,因此可得
w=Sw−1(μ0−μ1)w=S_w^{-1}(\mu_0-\mu_1) w=Sw−1​(μ0​−μ1​)

三.多分类LDA

对于多分类任务,假设存在NNN个类,样本总数为mmm,样本中第iii类示例集合为XiX_iXi​,其所对应的类别样本数为mim_imi​,定义全局散度矩阵StS_tSt​如下:
St=Sb+Sw=∑i=1m(xi−μ)(xi−μ)T\begin{aligned} S_t & = S_b+S_w \\ & = \sum_{i=1}^m{(x_i-\mu)(x_i-\mu)^T} \end{aligned} St​​=Sb​+Sw​=i=1∑m​(xi​−μ)(xi​−μ)T​
上式中μ\muμ表示所以样本的均值向量,全局散度矩阵实际上就是类内散度矩阵和类间散度矩阵之和。对于类内散度矩阵,重定义为了每个类别的散度矩阵之和,即
Sw=∑i=1NSwi=∑i=1N∑x∈Xi(x−μi)(x−μi)T\begin{aligned} S_w& =\sum_{i=1}^N{S_{w_i}}\\& =\sum_{i=1}^N{\sum\limits_{x \in X_i}{(x-\mu_i)(x-\mu_i)^T}} \end{aligned} Sw​​=i=1∑N​Swi​​=i=1∑N​x∈Xi​∑​(x−μi​)(x−μi​)T​
式子中μi\mu_iμi​表示类别iii的均值向量,由上可得SbS_bSb​的表达式,即
Sb=St−Sw=∑i=1N∑j=1mi(xj−μ)(xj−μ)T−∑i=1N∑x∈Xi(x−μi)(x−μi)T=∑i=1N∑j=1mi(xj−μ)(xj−μ)T−∑i=1N∑j=1mi(xj−μi)(xj−μi)T=∑i=1N∑j=1mi[(xj−μ)(xj−μ)T−(xj−μi)(xj−μi)T]=∑i=1N∑j=1mi[(xjxjT−xjμT−μxjT+μμT)−(xjxjT−xjμiT−μixjT+μiμiT)]=∑i=1N[∑j=1mixj(−μT+μiT)+(−μ+μi)∑j=1mixjT+∑j=1mi(μμT−μiμiT)]=∑i=1N[miμi(−μT+μiT)+(−μ+μi)miμiT+mi(μμT−μiμiT)]=∑i=1Nmi[−μiμT+μiμiT−μμiT+μμT]=∑i=1Nmi(μi−μ)(μi−μ)T\begin{aligned} S_b& =S_t-S_w \\ & =\sum_{i=1}^N{\sum_{j=1}^{m_i}{(x_j-\mu)(x_j-\mu)^T}} - \sum_{i=1}^N{\sum\limits_{x \in X_i}{(x-\mu_i)(x-\mu_i)^T}}\\ & =\sum_{i=1}^N{\sum_{j=1}^{m_i}{(x_j-\mu)(x_j-\mu)^T}} - \sum_{i=1}^N{\sum_{j=1}^{m_i}{(x_j-\mu_i)(x_j-\mu_i)^T}}\\ & =\sum_{i=1}^N{\sum_{j=1}^{m_i}{[(x_j-\mu)(x_j-\mu)^T-(x_j-\mu_i)(x_j-\mu_i)^T]}}\\ & =\sum_{i=1}^N{\sum_{j=1}^{m_i}{[(x_jx_j^T-x_j\mu^T-\mu x_j^T+\mu\mu^T)-(x_jx_j^T-x_j\mu_i^T-\mu_i x_j^T+\mu_i\mu_i^T)]}}\\ & =\sum_{i=1}^N{[\sum_{j=1}^{m_i}{x_j(-\mu^T+\mu_i^T)+(-\mu+\mu_i)\sum_{j=1}^{m_i}{x_j^T}+\sum_{j=1}^{m_i}(\mu\mu^T-\mu_i\mu_i^T)}]}\\ & = \sum_{i=1}^N[m_i\mu_i(-\mu^T+\mu_i^T)+(-\mu+\mu_i)m_i\mu_i^T+m_i(\mu\mu^T-\mu_i\mu_i^T)]\\ & = \sum_{i=1}^N{m_i[-\mu_i\mu^T+\mu_i\mu_i^T-\mu\mu_i^T+\mu\mu^T]} \\ & =\sum_{i=1}^N{m_i(\mu_i-\mu)(\mu_i-\mu)^T}\\ \end{aligned} Sb​​=St​−Sw​=i=1∑N​j=1∑mi​​(xj​−μ)(xj​−μ)T−i=1∑N​x∈Xi​∑​(x−μi​)(x−μi​)T=i=1∑N​j=1∑mi​​(xj​−μ)(xj​−μ)T−i=1∑N​j=1∑mi​​(xj​−μi​)(xj​−μi​)T=i=1∑N​j=1∑mi​​[(xj​−μ)(xj​−μ)T−(xj​−μi​)(xj​−μi​)T]=i=1∑N​j=1∑mi​​[(xj​xjT​−xj​μT−μxjT​+μμT)−(xj​xjT​−xj​μiT​−μi​xjT​+μi​μiT​)]=i=1∑N​[j=1∑mi​​xj​(−μT+μiT​)+(−μ+μi​)j=1∑mi​​xjT​+j=1∑mi​​(μμT−μi​μiT​)]=i=1∑N​[mi​μi​(−μT+μiT​)+(−μ+μi​)mi​μiT​+mi​(μμT−μi​μiT​)]=i=1∑N​mi​[−μi​μT+μi​μiT​−μμiT​+μμT]=i=1∑N​mi​(μi​−μ)(μi​−μ)T​
多分类LDA可以有多种实现方法,使用SbS_bSb​,SwS_wSw​,StS_tSt​三者中的任何两个即可,常见的一种时采用优化目标
maxWtr(WTSbW)tr(WTSwW)\mathop{max}\limits_{W}{\frac{tr(W^TS_bW)}{tr(W^TS_wW)}} Wmax​tr(WTSw​W)tr(WTSb​W)​
其中w∈Rd×(N−1)w\in R^{d×(N−1)}w∈Rd×(N−1),tr(.)tr(.)tr(.)表示矩阵的迹,则上式求解同样和二分类一样可以令tr(WTSwW)=1tr(W^TS_wW)=1tr(WTSw​W)=1,然后使用拉格朗日乘子法(具体过程就不展开了),最后通过求导可以得到下式
SbW=λSwWS_bW=\lambda S_wW Sb​W=λSw​W
而WWW的闭式解就是**Sw−1SbS_w^{-1}S_bSw−1​Sb​的d′d'd′个最大非零广义特征值所对应的特征向量组成的矩阵**,d′≤N−1d'\leq N - 1d′≤N−1。

四.降维和分类

前面两节中介绍了如何求取二分类和多分类任务中的www,那么在获取到www后就可以进行降维及建立在降维之上的分类操作了。假设数据集D={(x1,y1),(x2,y2),...(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),...(x_m,y_m)\}D={(x1​,y1​),(x2​,y2​),...(xm​,ym​)},其中xk=(xk1,xk2,...,xkd),k∈[1,m]x_k=(x_{k1},x_{k2},...,x_{kd}),k \in[1,m]xk​=(xk1​,xk2​,...,xkd​),k∈[1,m],基于该数据集求取的投影矩阵为WWW,那么降维操作

就是对数据集DDD中的每个样本特征xix_ixi​进行投影操作,即
xi′=wTxix_i'=w^Tx_i xi′​=wTxi​
至于分类,在线性判别分析LDA原理总结一文中我发现作者提到了一种常用的思想:假设各个类别的样本数据符合高斯分布,在LDA进行降维操作后,先计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。然后对新样本先进行同样的降维操作,然后分别代入各个类别的高斯分布概率密度函数中去计算概率,概率最高的类别即为新样本的分类类别。

五.实现

5.1 数据集说明

本次实验采用的数据集是UCI上的鸢尾花卉数据集一共包含150个样本,分为三类(Setosa,Versicolour,Virginica),每类50个数据,该数据集的部分数据展示如下:

其中各个属性的描述具体见下表:

属性 属性描述
sepal.length 花萼长度
sepal.width 花萼宽度
petal.length 花瓣长度
petal.width 花瓣宽度
variety 花类型(0表示Setosa, 1表示Versicolour 2表示Virginica)

5.2 示例代码

首先,由于iris数据集较小,因此训练集和测试集的划分比例为7:37:37:3。

from os import startfile
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_splitdef load_iris(file_path='./data/iris.csv',test_size=0.3):"""功能:加载数据集并划分训练集和测试集"""df = pd.read_csv(file_path)x,y = df.iloc[:,0:-1].values,df.iloc[:,-1].values#打乱并划分测试集和训练集train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=test_size,random_state=5)return train_x,test_x,train_y,test_y

然后,我将LDA模型其封装为一个类以供调用,该类需要传入三个参数:数据特征数据标签以及降维后的维度

import numpy as npclass LDA(object):"""线性判别分析"""def __init__(self,data,target,d) -> None:self.data = dataself.target = targetself.d = dself.labels = set(target)self.mu = self.data.mean(axis=0)def divide(self):"""功能:将传入的数据集按target分成不同的类别集合并求出对应集合的均值向量"""self.classify,self.classmu = {},{}for label in self.labels:self.classify[label] = self.data[self.target==label]self.classmu[label] = self.classify[label].mean(axis=0)def getSt(self):"""功能:计算全局散度矩阵"""self.St = np.dot((self.data-self.mu).T,(self.data-self.mu))def getSb(self):"""功能:计算类内散度矩阵"""self.Sb = np.zeros((self.data.shape[1],self.data.shape[1]))for i in self.labels:#获取类别i样例的集合classi = self.classify[i]#获取类别i的均值向量mui = self.classmu[i]self.Sb += len(classi) * np.dot((mui - self.mu).reshape(-1,1),(mui - self.mu).reshape(1,-1))def getW(self):"""功能:计算w"""self.divide()self.getSt()self.getSb()#St = Sw + Sbself.Sw = self.St - self.Sb #计算Sw-1*Sb的特征值和特征向量#eig_vectors[:i]与 eig_values相对应eig_values, eig_vectors = np.linalg.eig(np.linalg.inv(self.Sw).dot(self.Sb))#寻找d个最大非零广义特征值topd = (np.argsort(eig_values)[::-1])[:self.d]#用d个最大非零广义特征值组成的向量组成wself.w = eig_vectors[:,topd]if __name__ == "__main__":x = np.array([[1,2,3],[2,1,3],[2,4,1],[1,3,2],[3,6,4],[3,1,1]])y = np.array([0,1,2,0,1,2])lda = LDA(x,y,2)lda.getW()

最后,对于模型的训练与验证,我是先利用训练集获取投影矩阵WWW,然后对训练集数据进行降维操作,按照第四节中的分类思想需要将对降维后各个类别的数据类别求各自的均值和标准差(确定高斯分布的概率密度函数),然后再对测试集利用投影矩阵进行降维,将样本依次代入各个类别的高斯分布函数,选取概率最大的类别作为样本的预测类别。

from LDAModel import LDA
from load_data import load_iris
import numpy as np
from scipy.stats import norm
from sklearn.metrics import accuracy_scoredef judge(gauss_dist,x):"""功能:判断样本x属于哪个类别"""#将样本带入各个类别的高斯分布概率密度函数进行计算outcome = [[k,norm.pdf(x,loc=v['loc'],scale=v['scale'])] for k,v in gauss_dist.items()]#寻找计算结果最大的类别outcome.sort(key=lambda s:s[1],reverse=True)return outcome[0][0]def Test():"""功能:对测试集进行分类并返回准确率"""#加载数据集train_x,test_x,train_y,test_y = load_iris()#创建模型lda = LDA(train_x,train_y,1)#获取投影矩阵wlda.getW()#对训练集进行降维train_x_new = np.dot((train_x), lda.w)#获取训练集各个类别对应的高斯分布的均值和方差gauss_dist = {}for i in lda.labels:classi = train_x_new[train_y==i]loc = classi.mean()scale = classi.std()gauss_dist[i] = {'loc':loc,'scale':scale}test_x_new = np.dot(test_x,lda.w)pred_y = np.array([judge(gauss_dist,x) for x in test_x_new])return accuracy_score(test_y,pred_y)if __name__ == "__main__":acc = Test()print(acc)

运行结果表明LDA模型在测试集上的预测准确率约为0.930.930.93,对于训练集的降维操作最后也作一个可视化展示,由于最后降维至一维(直线上)为了方便绘制散点图我给这些点的纵坐标统一置为1,只需看横轴即可,从结果可以看出鸢尾花投影后的确将几个类别区分了出来。

参考资料

《机器学习》周志华

LDA深入补充推导和python实现(二分类问题)

Dimensionality Reduction——LDA线性判别分析原理篇

线性判别分析(LDA)实现二分类的思路

以上便是本文的全部内容,要是觉得不错的话,就点个赞或关注一下吧,你们的支持是博主创作的不竭动力!

机器学习(三):一文读懂线性判别分析(LDA)相关推荐

  1. 【机器学习】一文读懂层次聚类(Python代码)

    本篇和大家介绍下层次聚类,先通过一个简单的例子介绍它的基本理论,然后再用一个实战案例Python代码实现聚类效果. 首先要说,聚类属于机器学习的无监督学习,而且也分很多种方法,比如大家熟知的有K-me ...

  2. 推荐文章:机器学习:“一文读懂机器学习,大数据/自然语言处理/算法全有了...

    PS:文章主要转载自CSDN大神"黑夜路人"的文章:           http://blog.csdn.NET/heiyeshuwu/article/details/43483 ...

  3. 【机器学习】一文读懂线性回归、岭回归和Lasso回归

    来源 | AI小白入门 作者 | 文杰 编辑 | yuquanle 完整代码见:原文链接 1. 线性回归 1.1 线性回归 ​ 假设有数据有T={(x(1),y(1)),...,(x(i),y(i)) ...

  4. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...

    点击上方蓝色字体,关注AI小白入门哟 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失,然后 ...

  5. 【机器学习】一文读懂正则化与LASSO回归,Ridge回归

    该文已经收录到专题机器学习进阶之路当中,欢迎大家关注. 1.过拟合 当样本特征很多,样本数相对较少时,模型容易陷入过拟合.为了缓解过拟合问题,有两种方法: 方法一:减少特征数量(人工选择重要特征来保留 ...

  6. 【机器学习】一文读懂异常检测 LOF 算法(Python代码)

    本篇介绍一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法. 背景 Local Outlier Factor(LOF)是基于密度的经典算法(Breunin ...

  7. 预测评价系统_「机器学习」一文读懂分类算法常用评价指标

    前言 评价指标是针对将相同的数据,输入不同的算法模型,或者输入不同参数的同一种算法模型,而给出这个算法或者参数好坏的定量指标. 在模型评估过程中,往往需要使用多种不同的指标进行评估,在诸多的评价指标中 ...

  8. 【机器学习】机器学习之线性判别分析(LDA)

    目录 一.线性判别分析介绍 二.线性判别分析原理 1. 类内散度矩阵(within-class scatter matrix) 2. 类间散度矩阵(between-class scatter matr ...

  9. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

最新文章

  1. 软件工程小组问世第六章之概要设计青铜篇
  2. 智能卡电子钱包应用密钥体系
  3. SAP UI5 OData框架里硬编码的80是怎么来的
  4. lotus php,LotusPhp笔记之:Cookie组件的使用详解
  5. Linux版本的SVN客户端,linux 下安装 subversion(svn) 客户端
  6. Kafka常见痛点及优化方案
  7. 深层神经网络——多层网络解决异或运算
  8. 用python编写密码安全性_密码安全性
  9. 《cmake practice》总结 | cmake的构建过程与基本指令
  10. 清除SQLServer2008缓存
  11. 能播放qlv格式的android软件,QLV用什么播放器 腾讯QLV转换MP4方法
  12. 卡西欧计算机怎么进制转换,卡西欧计算机怎么把十进制转换二进制
  13. UI设计 ,我只推荐这6个网站,真的太好用了。
  14. 【20191025】考试
  15. php字符串处理函数大全--有时候我们只需要知道名字。
  16. protobuf 性能对比
  17. 通信原理 | 波段的划分
  18. 手机拍照打卡活动制作方案,通过拍照不聚集活动,函数参数(Function parameters)是在函数定义中所列的名称。
  19. 酷炫页面产品图片展示
  20. 6个高质量插画、插图网站。

热门文章

  1. 第三章 java集合
  2. win10安装wsl步骤
  3. STM32f107 CAN滤波器设置
  4. 常见思维模型汇总(二)
  5. thinkPad x240 安装黑苹果
  6. 2020年12月31日flash禁用后网页如何播放rtmp视频流
  7. 双译记:UCLA朱松纯团队验证机器人任务中可解释性,登Science子刊
  8. 【项目实践】YOLO V4万字原理详细讲解并训练自己的数据集(pytorch完整项目打包下载)...
  9. zabbix5.0-06-报警媒介
  10. vue 跳转路由后返回上一页还是当前页面,但是路由地址有改变(已解决)