多元统计分析——分类分析——贝叶斯分类

一、两分类问题

1、贝叶斯分类

1.1、分类规则

G_{1}G_{2}代表两个总体,各自的先验概率为p_{1}p_{2}p_{1}+p_{2}=1),f_{1}(y)f_{2}(y)分别是总体G_{1}G_{2}y的概率密度函数。

R_{1}R_{2}代表按分类规则划分的两组区域。例如,如果一个新观测对象分到R_{k},那么我们声明该样本来自总体G_{k}k=1,2R_{1}R_{2} 是整个空间的分割。

多元统计分析——分类分析——贝叶斯分类_第1张图片

P(1|2)是“我们将样本y分为G_{1}(y\in R_{1})然而实际上它来自G_{2} ”的条件概率:P(1|2)=P(y\in R_{1}|G_{2})=\int _{R_{1}}f_{2} (y) dy,类似的,P(2|1)=P(y\in R_{2}|G_{1})=\int _{R_{2}=\Omega -R_{1}}f_{1} (y) dy=1-\int _{R_{1}}f_{1} (y) dy,具体分布如下图所示。

多元统计分析——分类分析——贝叶斯分类_第2张图片

 进而我们可以推导总错分率 (TPM):

P(观测对象被错分到G_{1})=P(y\in R_{1}\cap G_{2})=P(y\in R_{1}| G_{2})P( G_{2})=P(1|2)p_{2}

P(观测对象被错分到G_{2})=P(y\in R_{2}\cap G_{1})=P(y\in R_{2}| G_{1})P( G_{1})=P(2|1)p_{1}

 记c(1|2)是错误地将来自总体G_{2}的观测对象y错分到G_{1}的代价/成本,类似可定义c(2|1)是错误地将来自总体G_{1}的观测对象y错分到G_{2}的代价/成本,如下图。

多元统计分析——分类分析——贝叶斯分类_第3张图片

我们知道,LDA是没有考虑代价的,它考虑的是一个概率,我们想让样本之间分的越开越好(错分率越少越好)。贝叶斯是可以考虑代价的, 于是贝叶斯考虑的是期望代价(Expected cost of misclassification, ECM),贝叶斯分类的目标是最小化错分的期望代价ECM:

ECM=c(2|1)P(2|1)p_{1}+c(1|2)P(1|2)p_{2}

如何最小化ECM?

由上面已知:P(1|2)=P(y\in R_{1}|G_{2})=\int _{R_{1}}f_{2} (y) dyP(2|1)=P(y\in R_{2}|G_{1})=\int _{R_{2}=\Omega -R_{1}}f_{1} (y) dy=1-\int _{R_{1}}f_{1} (y) dy,将它们代入到上式中,得到:

ECM=c(2|1)p_{1}\left \{ 1-\int _{R_{1}}f_{1} (y) dy \right \}+c(1|2)p_{2}\int _{R_{1}}f_{2} (y) dy

 

贝叶斯分类的目标是找到一个分类法则,使得最小化ECM,这个分类法则与R_{1}R_{2}区域的划分有关,上式当中c(2|1)p_{1}这项和R_{1}的取值是没有关系的,进而:

ECM \propto c(1|2)p_{2}\int _{R_{1}}f_{2} (y) dy -c(2|1)p_{1}\int _{R_{1}}f_{1} (y) dy\Rightarrow \int _{R_{1}}\left \{ f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1} \right \} dy

分类规则问题转化为:找到一个区域R_{1},使得f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1}R_{1}的积分最小。

我们知道积分是曲线下的有向面积,如果f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1}\geq 0,则越积越多,如果f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1} < 0,则越积越少。换句话说,要使得f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1}R_{1}的积分最小,R_{1}应取值所有使得f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1}< 0y值。

定理(贝叶斯分类法则):

y\in R_{1}f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1}< 0

y\in R_{2}f_{2} (y)c(1|2)p_{2} -f_{1} (y)c(2|1)p_{1}\geq 0

化简得:

y\in R_{1}\frac{f_{1}(y)}{f_{2}(y)} \geq (\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })

y\in R_{2}\frac{f_{1}(y)}{f_{2}(y)} < (\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })

特殊情形

(a)当\frac{p_{1}}{p_{2}}=1(先验概率相同)

y\in R_{1}\frac{f_{1}(y)}{f_{2}(y)} \geq \frac{c(1|2)}{c(2|1)}

y\in R_{2}\frac{f_{1}(y)}{f_{2}(y)} < \frac{c(1|2)}{c(2|1)}

(b)当\frac{c(1|2)}{c(2|1)}=1(错分成本相同)

y\in R_{1}\frac{f_{1}(y)}{f_{2}(y)} \geq \frac{p_{2}}{ p_{1} }

y\in R_{2}\frac{f_{1}(y)}{f_{2}(y)}< \frac{p_{2}}{ p_{1} }

(c)当\frac{p_{1}}{p_{2}}=\frac{c(1|2)}{c(2|1)}=1(先验概率相同且错分成本相同)

y\in R_{1}\frac{f_{1}(y)}{f_{2}(y)} \geq 1

y\in R_{2}\frac{f_{1}(y)}{f_{2}(y)} < 1

1.2、与LDA的区别

  LDA分类 贝叶斯分类
是否考虑先验概率
是否考虑误判代价
是否事先假设总体分布 不需要分布假设 需要明确f_{1}(y)f_{2}(y)
是否事先假设总体协方差矩阵 需要同协方差矩阵假设 不需要协方差矩阵假设
是否线性
分类目标 最小化错分率 最小化错分的期望代价

在前面我们讲到《多元统计分析——分类分析——基于Fisher线性判别分析(LDA)的分类》当中,LDA分类完全是基于样本数据来呈现的(找一个投影方向,让两组数据分的最开),没有考虑到任何先验的信息。贝叶斯的优势正好在于考虑了先验的信息。有关先验概率的相关知识可见《统计推断——独立事件、条件概率、贝叶斯定理(先验分布/后验分布/似然估计)》。

例如:通常,一家公司陷入财务困境并最终破产的(先验)概率很小,所以我们应该首先默认一家随机选择的公司不会破产,除非数据压倒性地支持公司将会破产这一事件。所以这时事件发生的先验概率(Prior probability)应该被考虑在内。

另外,我们在LDA分类当中,只考虑了误判的概率,并没有考虑产生误判之后的代价(成本),但是在实际生活当中,从第一类错分到第二类与第二类错分到第一类的代价往往是不一样的。

例如:没有诊断出绝症的“代价”明显大于将病人误诊为绝症,所以这时“误判代价 ”(Misclassification cost)应该被考虑在内。

所以,贝叶斯分类之于Fisher's LDA分类,它的优势在于考虑了这两点:先验概率(Prior probability),误判代价 (Misclassification cost)。

1.3、与LDA的联系

当两群体来自具有相同协方差矩阵的正态分布N_{p}(\mu_{1},\Sigma )N_{p}(\mu_{2},\Sigma )时,贝叶斯法则则可以表示为:

y\in R_{1}(\overline{y}_{1}-\overline{y}_{2})'S_{pl}^{-1}y_{0}-\frac{1}{2}(\overline{y}_{1}-\overline{y}_{2})'S_{pl}^{-1}(\overline{y}_{1}+\overline{y}_{2})\geq ln[(\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })]

回想LDA分类法则为y\in R_{1}(\overline{y}_{1}-\overline{y}_{2})'S_{pl}^{-1}y_{0}-\frac{1}{2}(\overline{y}_{1}-\overline{y}_{2})'S_{pl}^{-1}(\overline{y}_{1}+\overline{y}_{2})\geq 0,即我们可以得出结论:当两群体来自具有相同协方差矩阵的正态分布时,贝叶斯法则的特殊情形——当\frac{p_{1}}{p_{2}}=\frac{c(1|2)}{c(2|1)}=1(先验概率相同且错分成本相同),等价于LDA分类法则。

证明如下:

已知当y\in R_{1}\frac{f_{1}(y)}{f_{2}(y)} \geq (\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })

根据多元正态分布的密度函数公式得:

f_{1}(y)=\frac{1}{(2\pi )^{p/2}\left | \Sigma \right |^{1/2}}e^{-(y-\overline{y}_{1} )'\Sigma ^{-1}(y-\overline{y}_{1} )/2}f_{2}(y)=\frac{1}{(2\pi )^{p/2}\left | \Sigma \right |^{1/2}}e^{-(y-\overline{y}_{2} )'\Sigma ^{-1}(y-\overline{y}_{2} )/2}

将这两个式子代入到\frac{f_{1}(y)}{f_{2}(y)} \geq (\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} }),得:\frac{e^{-(y-\overline{y}_{1} )'\Sigma ^{-1}(y-\overline{y}_{1} )/2}}{e^{-(y-\overline{y}_{2} )'\Sigma ^{-1}(y-\overline{y}_{2} )/2}}\geq (\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })

两个各取对数,得:

\frac{(y-\overline{y}_{2} )'\Sigma ^{-1}(y-\overline{y}_{2} )-(y-\overline{y}_{1} )'\Sigma ^{-1}(y-\overline{y}_{1} )}{2} \geq ln[(\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })]

不等式左边展开,得:

\begin{align}\frac{(y-\overline{y}_{2} )'\Sigma ^{-1}(y-\overline{y}_{2} )-(y-\overline{y}_{1} )'\Sigma ^{-1}(y-\overline{y}_{1} )}{2} &= \frac{(y-\overline{y}_{2} )'\Sigma ^{-1}y-(y-\overline{y}_{2} )'\Sigma ^{-1}\overline{y}_{2}-(y-\overline{y}_{1} )'\Sigma ^{-1}y+(y-\overline{y}_{1} )'\Sigma ^{-1}\overline{y}_{1} }{2}\\&= \frac{[(y-\overline{y}_{2} )'-(y-\overline{y}_{1} )']\Sigma ^{-1}y-(y-\overline{y}_{2} )'\Sigma ^{-1}\overline{y}_{2}+(y-\overline{y}_{1} )'\Sigma ^{-1}\overline{y}_{1} }{2} \\&= \frac{(\overline{y}_{1}- \overline{y}_{2} )'\Sigma ^{-1}y-y'\Sigma ^{-1}\overline{y}_{2}+(\overline{y}_{2})'\Sigma ^{-1}\overline{y}_{2} +y'\Sigma ^{-1}\overline{y}_{1}-(\overline{y}_{1} )'\Sigma ^{-1}\overline{y}_{1} }{2} \\&= \frac{(\overline{y}_{1}- \overline{y}_{2} )'\Sigma ^{-1}y+y'\Sigma ^{-1}(\overline{y}_{1}-\overline{y}_{2})+(\overline{y}_{2})'\Sigma ^{-1}\overline{y}_{2} -(\overline{y}_{1} )'\Sigma ^{-1}\overline{y}_{1} }{2} \end{align}

因为\Sigma ^{-1}协方差矩阵的逆,是对称矩阵,根据矩阵转置的性质,易得:(\overline{y}_{1}- \overline{y}_{2} )'\Sigma ^{-1}y=y'\Sigma ^{-1}(\overline{y}_{1}-\overline{y}_{2}),继续化简(\overline{y}_{1}- \overline{y}_{2} )'\Sigma ^{-1}y+\frac{(\overline{y}_{2})'\Sigma ^{-1}\overline{y}_{2} -(\overline{y}_{1} )'\Sigma ^{-1}\overline{y}_{1} }{2}(\overline{y}_{2})'\Sigma ^{-1}\overline{y}_{2} -(\overline{y}_{1} )'\Sigma ^{-1}\overline{y}_{1}可以改写成:(\overline{y}_{2}-\overline{y}_{1})'\Sigma ^{-1}(\overline{y}_{1} +\overline{y}_{2} ),替换,最终得:(\overline{y}_{1}- \overline{y}_{2} )'\Sigma ^{-1}y-\frac{(\overline{y}_{1}-\overline{y}_{2})'\Sigma ^{-1}(\overline{y}_{1} +\overline{y}_{2} ) }{2},取y=y_{0},协方差矩阵\Sigma我们以样本协方差矩阵S_{pl}代替,即得到:

(\overline{y}_{1}-\overline{y}_{2})'S_{pl}^{-1}y_{0}-\frac{1}{2}(\overline{y}_{1}-\overline{y}_{2})'S_{pl}^{-1}(\overline{y}_{1}+\overline{y}_{2})\geq ln[(\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })]

1.4、案例——LDA算法拓展到贝叶斯

上面我们得到的结论:当两群体来自具有相同协方差矩阵的正态分布时,贝叶斯法则的特殊情形——当\frac{p_{1}}{p_{2}}=\frac{c(1|2)}{c(2|1)}=1(先验概率相同且错分成本相同),等价于LDA分类法则。所以这边我们用Fisher's LDA来做贝叶斯,案例数据集以LDA分类相同。

“今天”和“昨天”的湿度差(Y_{1} )和温度差(Y_{2} )是用来预测“明天”是否会下雨的两个很重要的因素,数据如下;其中label=1表示雨天,label=2表示阴天。

1.4.1、绘制散点图:

plt.scatter(data['Y1'],data['Y2'],c=data['label'])

输出:

1.4.2、假设两群体来自具有相同协方差矩阵的正态分布,用LDA进行贝叶斯分类。

我们基于正态假设,给定一个先验概率priors=[2/3,1/3],然后正常进行LDA分类。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

X=data.iloc[:,:-1]   #特征
Y=data.iloc[:,-1]    #标签

model_lda= LDA(
    priors=[2/3,1/3]  #用于LDA中贝叶斯规则的先验概率,当为None时,每个类priors为该类样本占总样本的比例;当为自定义值时,如果概率之和不为1,会按照自定义值进行归一化
)    

data_tranform=model_lda.fit_transform(X,Y)  #训练模型

#利用模型回测现有样本
Y_predict=model_lda.predict(X)  #利用训练的模型回测现有样本
data['label_predict']=Y_predict  #保存预测分类结果
data['data_tranform']=data_tranform    #降维之后的数据(一维)
data

输出 

多元统计分析——分类分析——贝叶斯分类_第4张图片

 

其中label_predict是模型预测的分类,我们发现,预测错误的样本还是很多的(这和我们指定的先验概率有关,由于我们的先验概率是随便给的,故预测结果不一定好)。

1.4.3、计算总错分率(TPM):

import sklearn.metrics as sm
1-sm.accuracy_score(Y,Y_predict)  #1-准确率

 输出:

0.25

错分率为0.25,整体的分类效果不太好。

1.4.4、预测未来数据

如果我们得知今天的数据是y_{0}=(8.0,2.0)',如何预测明天的天气?

model_lda.predict(pd.DataFrame([[8.0,2.0]]))

输出:

array([1], dtype=int64)

即根据给定先验概率的LDA分类法则,预测明天为雨天。

1.5、案例——贝叶斯算法

1.5.1、高斯分布的朴素贝叶斯

除了基于正态假设的LDA算法之外,sklearn中有专门用于先验为高斯分布的朴素贝叶斯的包:naive_bayes.GaussianNB,我们来看看其分类的效果。

from  sklearn.naive_bayes import GaussianNB   #先验为高斯分布的朴素贝叶斯

X=data.iloc[:,:-1]   #特征
Y=data.iloc[:,-1]    #标签

model_GNB= GaussianNB(
    priors=[2/3,1/3]  #用于LDA中贝叶斯规则的先验概率,当为None时,每个类priors为该类样本占总样本的比例;当为自定义值时,如果概率之和不为1,会按照自定义值进行归一化
)    

model_GNB.fit(X,Y)  #训练模型

#利用模型回测现有样本
Y_predict=model_GNB.predict(X)  #利用训练的模型预测分类
data['label_predict']=Y_predict  #保存预测分类结果
data

输出:

多元统计分析——分类分析——贝叶斯分类_第5张图片

1.5.2、计算总错分率(TPM):

import sklearn.metrics as sm
1-sm.accuracy_score(Y,Y_predict)  #1-准确率

 输出:

0.1

错分率为0.1,在合理的范围之内,可以得出整体的分类效果是不错的。

1.5.3、预测未来数据

如果我们得知今天的数据是y_{0}=(8.0,2.0)',如何预测明天的天气?

model_lda.predict(pd.DataFrame([[8.0,2.0]]))

输出:

array([1], dtype=int64)

即根据贝叶斯分类法则,预测明天为雨天。

二、多分类问题

两样本的贝叶斯分类法则为:

y\in R_{1}\frac{f_{1}(y)}{f_{2}(y)} \geq (\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })

y\in R_{2}\frac{f_{1}(y)}{f_{2}(y)} < (\frac{c(1|2)}{c(2|1)})(\frac{p_{2}}{ p_{1} })

以上分类法则需要考虑误判代价c,多群体的误判代价较为复杂,如果我们有g组,我们需要考虑g(g-1)组代价。为了简便起见,我们假设各组具有相同的误判概率,从而简化分类法则:

y\in R_{1}f_{1}(y) p_{1} \geq f_{2}(y)p_{2}

y\in R_{2}f_{1}(y) p_{1} < f_{2}(y)p_{2}

则推广到多群体贝叶斯分类法则为:y_{0}分到f_{k}(y_{0})p_{k}最大的那个组(其中p_{k}f_{k}(y)是先验概率和密度函数,与两群体情况类似)

案例:研究团队调查了20个品牌的电视机,记录了它们的市场定位(G):1.高端市场,2. 中端市场,3. 低端市场;质量评估得分(Q),功能评估得分(C)和价格(P,单位为每百元人民币)。如果一个全新的品牌被推出,其中Q=8.0,C=7.5,P=65 ,它的市场定位应如何?

1、LDA算法拓展到贝叶斯(前提:假设各群体服从正态分布)

1.1、导入数据

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data=pd.read_excel('D:/CDA/dataset/data_LDA&bayers_2.xlsx')
data

输出:

1.2、两两散点图

sns.pairplot(data,hue="G")

输出:

从图中可以看出,以其中的两个指标来划分群体,分类都不是特别明显。

1.3、Fisher's LDA分类(预设先验概率),并利用训练好的模型回测数据

若我们采用贝叶斯法则,假设总体来自正态分布并且错分成本相同,我们可以设置各个总体的先验概率。在此我们可以采用不同的设置方法:①假设3个群体的发生概率是一样的;②数据驱动的方式,以样本的比例来代替先验概率。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

X=data.iloc[:,:-1]   #特征
Y=data.iloc[:,-1]    #标签

model_lda_1= LDA(priors=[1/3,1/3,1/3])    
model_lda_2= LDA(priors=[5/20,8/20,7/20])    


model_lda_1.fit_transform(X,Y)  #训练模型
model_lda_2.fit_transform(X,Y)  #训练模型

Y_predict_1=model_lda_1.predict(X)  #利用训练的模型回测数据
Y_predict_2=model_lda_2.predict(X)  #利用训练的模型回测数据

data['label_predict1']=Y_predict_1  #保存预测分类结果
data['label_predict2']=Y_predict_2  #保存预测分类结果
data

输出:

多元统计分析——分类分析——贝叶斯分类_第6张图片

1.4、计算总错分率(TPM):

①各组先验概率相同

import sklearn.metrics as sm
1-sm.accuracy_score(Y,Y_predict_1)  #1-准确率

输出:

0.1

②样本比例做先验概率

import sklearn.metrics as sm
1-sm.accuracy_score(Y,Y_predict_2)  #1-准确率

输出:

0.1

错分率都为0.1,即前面预设的不同先验概率,在这个问题的分类当中是没有差别的,整体的分类效果是不错的。

1.5、预测未来数据

model_lda_1.predict(pd.DataFrame([[8.0,7.5,65]]))
model_lda_2.predict(pd.DataFrame([[8.0,7.5,65]]))

输出:

array([2], dtype=int64)
array([2], dtype=int64)

 即根据以上分类法则,预测都为中端市场。

2、高斯分布的朴素贝叶斯算法

2.1、高斯分布的朴素贝叶斯算法分类,并利用训练好的模型回测数据

我们可以设置各个总体的先验概率。在此我们可以采用不同的设置方法:①假设3个群体的发生概率是一样的;②数据驱动的方式,以样本的比例来代替先验概率。

from  sklearn.naive_bayes import GaussianNB   #先验为高斯分布的朴素贝叶斯

X=data.iloc[:,:-1]   #特征
Y=data.iloc[:,-1]    #标签


model_GNB_1= GaussianNB(priors=[1/3,1/3,1/3])    
model_GNB_2= GaussianNB(priors=[5/20,8/20,7/20])    

model_GNB_1.fit(X,Y)  #训练模型
model_GNB_2.fit(X,Y)  #训练模型

#利用模型回测现有样本
Y_predict_1=model_GNB_1.predict(X)  #利用训练的模型预测分类
Y_predict_2=model_GNB_2.predict(X)  #利用训练的模型预测分类

data['label_predict_1']=Y_predict_1  #保存预测分类结果
data['label_predict_2']=Y_predict_2  #保存预测分类结果

data

输出:

多元统计分析——分类分析——贝叶斯分类_第7张图片

2.2、计算总错分率(TPM):

①各组先验概率相同

import sklearn.metrics as sm
1-sm.accuracy_score(Y,Y_predict_1)  #1-准确率

输出:

0.25

②样本比例做先验概率

import sklearn.metrics as sm
1-sm.accuracy_score(Y,Y_predict_2)  #1-准确率

输出:

0.15

错分率分别为0.25和0.15,整体的分类效果不是很好。

1.5、预测未来数据

model_GNB_1.predict(pd.DataFrame([[8.0,7.5,65]]))
model_GNB_2.predict(pd.DataFrame([[8.0,7.5,65]]))

输出:

array([2], dtype=int64)
array([2], dtype=int64)

 即根据以上分类法则,预测都为中端市场。

 

 

 

 

 

你可能感兴趣的:(多元统计分析,有监督分类)