高斯混合模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,它是一个将事物分解为若干的基于高斯概率密度函数形成的模型。
混合高斯模型使用K(基本为3到5个)个高斯模型来表征图像中各个像素点的特征,在新一帧图像获得后更新混合高斯模型,用当前图像中的每个像素点与混合高斯模型匹配,如果成功则判定该点为背景点,否则为前景点。通观整个高斯模型,它主要是有方差和均值两个参数决定,对均值和方差的学习,采取不同的学习机制,将直接影响到模型的稳定性、精确性和收敛性。
(1)首先初始化预先定义的几个高斯模型,对高斯模型中的参数进行初始化,并求出之后将要用到的参数;
(2)其次,对于每一帧中的每一个像素进行处理,看其是否匹配某个模型,若匹配,则将其归入该模型中,并对该模型根据新的像素值进行更新;若不匹配,则以该像素建立一个高斯模型,初始化参数,带入原有模型中最不可能的模型;
(3)最后,选择前面几个最有可能的模型作为背景模型,为背景目标提取做铺垫。
高斯过程回归(GPR)是使用高斯过程(GP)先验对数据进行回归的非参数模型。
GPR的模型假设包括噪声(回归残差)和高斯过程先验两部分,其求解按贝叶斯推断进行。若不限制函数的形式,GPR在理论上是紧致空间内任意连续函数的通用近似。此外,GPR可提供预测结果的后验,且在似然为正态分布时,该后验具有解析形式。因此,GPR是一个具有泛用性和可解析性的概率模型。
·正态似然
·极大似然估计(MLE)
非线性优化算法可以求解GPR的MLE问题,常见的选择有:共轭梯度法、拟牛顿法
使用梯度优化方法:随机梯度下降、遗传算法、粒子群算法求解
·极大伪似然估计(MPLE)
使用MPLE求解GPR的过程也被称为交叉验证,相比于MLE,其改变就是对样本学习使用留一法(LOO)计算其伪似然的负自然对数。
(1)封装高斯过程(WGP)
WSP首先在特征空间选择一个单调封装函数,将学习样本变换至封装函数指定的潜空间后再求解包含封装函数超参数的极大似然。
(2)半参数高斯过程(SGP)
SGP是在回归问题中将高斯过程模型与参数模型线性结合以获得两者优点——GPR的灵活性和参数模型在高维问题中利用数据有效性的算法。
(3)深度高斯过程(DGP)
高斯过程可以视为一个拥有单隐含层和无限个隐含层节点的多层感知器(MLP),DGP是MLP由单隐含层推广至多隐含层时得到的高斯过程,即拥有多个隐含层和无限宽度的MLP。
(4)可加高斯过程(AGP)
AGP利用核函数性质,在构建高斯过程先验时对核函数进行了组合和结构优化。
高斯过程分类(GPC):GPC是使用高斯过程作为先验的分类器,在二元分类中,GPC在对潜函数进行估计后将其作为Sigmoid函数的输入得到分类概率;在多元分类中,则将Sigmoid函数替换为归一化指数函数。
克里金法(Kriging):克里金法是与GPR相近的非参数模型,常见于随机场的插值问题。若协方差函数的形式等价,简单克里金(simple Kriging)和普通克里金(ordinary Kriging)的输出与GPR在正态似然下输出的数学期望相同,若克里金法使用高斯随机场假设,则给出的置信区间也与GPR相同。
(1)使用特定核函数时,GPR是一个通用近似
(2)作为非参数高斯过程模型的性质:避免了过拟合问题
(3)作为贝叶斯方法的性质:GPR是一个包含全贝叶斯特性的回归模型
(4)与核学习方法的比较:GPR与适用于回归问题的核学习方法,例如核岭回归、支持向量回归等都使用了核函数与核方法,且可以通过相同的方式简化核矩阵求逆计算,但对后者,其核函数是输入空间向高维特征空间的映射,而GPR中的核函数是高斯过程协方差函数的模型,表示随机变量间的相关性。
(5)与人工神经网络的关系:ANN是参数模型,在理论和结构上与GPR有较大差异,但二者在应用中有重叠,例子包括时间序列分析和计算机视觉问题。若学习样本充足,ANN由于使用随机梯度下降方法进行学习,在求解效率上优势明显;但在要求给出概率输出时,GPR是更合适的方法。
GPR可用于一般意义上的低维回归模型,尤其是时间序列数据的预测。
在自动控制方面:GPR被用于机械臂数据的实时学习
在图像处理方面:用于图像去噪、生成超分辨率图像
使用高斯过程分类对肌电信号的不同通道进行多分类(8分类)测试。其中主成分分析为通道1和通道2,相关性热力图为通道1和通道5,支持向量机特征消除法为通道2和通道8。
使用到的为sklearn.gaussian_process库中的GaussianProcessClassifier()函数
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import ConstantKernel,RBF
from sklearn.metrics import accuracy_score
# 数据集(六万多条数据)
raw_data = pd.read_csv('1_raw_data_13-12_22.03.16.txt',sep='\t',header=0) # 读取csv数据,并将第一行视为表头,返回DataFrame类型
data = raw_data.values
# 前5000个数据
random_data = data[np.random.choice(data.shape[0],size=5000,replace=False),:]
times=random_data[::,0]
features = random_data[::, 1:3] # 主成分分析法PCA
# features_data = raw_data[['channel1', 'channel5']] # 相关性热力图
#features_data = random_data[['channel2', 'channel8']] # SVM_RFE递归特征消除法
# features = features_data.values
labels = np.array(random_data[::,-1].astype(int)) # 最后一列为特征值
#选取33%数据作为测试集,剩余为训练集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
train_features = np.array(train_features)
train_labels = np.array(train_labels)
test_features = np.array(test_features)
test_labels = np.array(test_labels)
# kernel=1.0*RBF(length_scale=1.0) max_iter_predict=15
gpc = GaussianProcessClassifier(kernel=1.0*RBF(length_scale=1.0),max_iter_predict=20)
gpc.fit(train_features,train_labels)
pred_test = gpc.predict(test_features)
accuracy_score = accuracy_score(test_labels,pred_test)
print(accuracy_score)
运行后相关结果如下表所示:
max_iter_predict的值 | 主成分分析法 | 相关性热力图 | 支持向量机特征消除法 |
---|---|---|---|
20 | 64.61% | 62.61% | 65.45% |
15 | 66.18% | 65.40% | 64.79% |
25 | 65.03% | 64.30% | 67.58% |
由于max_iter_predict值的不同,最终的结果也会有所不同,本文没有对max_iter_predict寻找最优,后续可添加实验找出最优的max_iter_predict值。
有什么问题大家可以在评论区讨论哦,看到会跟大家交流的