聚类算法是一种无监督的机器学习方法,它可以将数据集中的对象分成若干个组,使得同一组内的对象相似度高,而不同组内的对象相似度低。聚类算法有很多种,例如K-均值,层次聚类,密度聚类,谱聚类等。聚类算法可以应用于很多领域,例如数据挖掘,图像分割,社交网络分析,市场细分等。
一、问题定义
聚类问题是指给定一个数据集,如何将其中的对象分成若干个组,使得同一组内的对象相似度高,而不同组内的对象相似度低。聚类问题是一种无监督的机器学习方法,它不需要事先知道对象的类别或标签,而是根据对象的属性或特征来划分簇。聚类问题的目的是发现数据的内在结构和模式,以及数据之间的关系和差异。
簇的定义是聚类算法的核心,不同的聚类算法对簇的定义有不同的侧重点。一般来说,簇是指数据集中的一组对象,这些对象之间的相似度高,而与其他对象的相似度低。相似度的度量可以有多种方式,例如欧氏距离,余弦相似度,概率分布,密度,谱相似度等。
(根据簇的定义不同进行划分)常见聚类算法(连通性聚类,基于质心的聚类,基于概率分布的聚类,基于密度的聚类,基于图的聚类):
二、层次聚类
层次聚类是一种连通性聚类算法,它可以将数据对象分成不同层次的簇,从而形成一个树状图。层次聚类有两种类型,分别是凝聚式和分裂式。凝聚式层次聚类是从下而上的合并小簇,直到达到指定的簇个数或停止条件。分裂式层次聚类是从上而下的划分大簇,直到达到指定的簇个数或停止条件。层次聚类的优点是不需要预先指定簇的个数,可以得到不同层次的簇划分,也可以通过树状图来直观地展示数据对象之间的相似度。层次聚类的缺点是计算复杂度高,对噪声和异常点敏感,一旦合并或划分就不能撤销。
层次聚类算法方案
三、基于质心的算法
四、基于概率分布的算法
4.1 高斯混合模型
高斯混合模型(Gaussian Mixture model)是一种基于概率分布的聚类算法,它假设数据集中的对象是由若干个高斯分布生成的,然后通过最大化似然函数或最小化信息准则来估计分布的参数,从而得到聚类结果。高斯混合模型的优点是可以利用多种分布来拟合数据,可以得到软聚类结果,可以处理不同形状和大小的簇,缺点是需要事先给定聚类的个数,对初始参数的选择敏感,计算复杂度高,可能陷入局部最优解。
Gaussian Mixture model的概率密度函数定义
对数据进行高斯混合模型(GMM)的拟合 得到的GMM参数列表说明
4.2 EM算法
EM算法是一种迭代的参数估计方法,它可以处理含有隐变量的概率模型。EM算法的基本思想是:在给定观测数据和当前参数的情况下,计算隐变量的期望(E步);然后在给定观测数据和隐变量的期望的情况下,最大化参数的似然函数(M步)。EM算法可以保证每次迭代后,参数的似然函数不会减小,最终收敛到局部最大值。
EM算法的应用场景
4.3 高斯混合回归 GMR
示例代码:高斯混合模型 (GMM) 和高斯混合回归 (GMR) 完全在 numpy 上实现
Python 实现高斯混合回归 (GMR) 和高斯混合模型 (GMM) 算法,附带示例和数据文件。GMM 是一种软聚类算法,它将数据视为具有未知参数的有限高斯分布。当前方法使用期望最大化 (EM) 算法来查找高斯状态参数。EM 是一种迭代算法,它收敛到真实的高斯参数,并通过对数似然阈值或迭代次数限制停止。为了初始化高斯参数,使用了 k 均值聚类算法。在拟合 GMM 后,该模型用于拟合 GMR 以通过时间输入检索输出特征。
EM_init.py 实现 K-均值聚类算法和高斯混合模型的初始化
# 导入 numpy 库,用于进行矩阵运算
import numpy as np
# 定义一个函数,用于实现 K-均值聚类算法
# 输入参数为 X: 数据矩阵,每一行是一个样本,每一列是一个特征
# K: 聚类的个数
# maxIters: 最大迭代次数
# 输出参数为 centroids: 聚类中心的矩阵,每一行是一个中心,每一列是一个特征
# C: 数据的类别标签,是一个一维数组,每个元素表示对应样本的类别
def kMeans(X, K, maxIters = 30):
# 随机从 X 中选择 K 个样本作为初始的聚类中心
centroids = X[np.random.choice(np.arange(len(X)), K), :]
# 进行 maxIters 次迭代
for i in range(maxIters):
# 计算每个样本到每个聚类中心的距离的平方,使用 np.dot 函数进行矩阵乘法
# 然后使用 np.argmin 函数找到最小距离的索引,即样本所属的类别
# 最后将结果存储在一个一维数组 C 中
C = np.array([np.argmin([np.dot(x_i-y_k, x_i-y_k) for y_k in centroids]) for x_i in X])
# 根据 C 的值,重新计算每个类别的样本的均值,作为新的聚类中心
centroids = [X[C == k].mean(axis = 0) for k in range(K)]
# 返回聚类中心和类别标签
return np.array(centroids) , C
# 定义一个函数,用于实现高斯混合模型的初始化
# 输入参数为 Data: 数据矩阵,每一行是一个特征,每一列是一个样本
# nbStates: 高斯分量的个数
# 输出参数为 Priors: 高斯分量的先验概率,是一个一维数组,每个元素表示对应分量的概率
# Mu: 高斯分量的均值矩阵,每一行是一个特征,每一列是一个分量
# Sigma: 高斯分量的协方差矩阵,是一个三维数组,每个二维矩阵表示一个分量的协方差
def EM_init(Data, nbStates):
# 获取数据的维度和个数
nbVar, nbData = np.shape(Data)
# 创建一个空的数组,用于存储高斯分量的先验概率
Priors = np.ndarray(shape = (1, nbStates))
# 创建一个空的数组,用于存储高斯分量的协方差矩阵
Sigma = np.ndarray(shape = (nbVar, nbVar, nbStates))
# 调用 kMeans 函数,对数据进行聚类,得到聚类中心和类别标签
Centers, Data_id = kMeans(np.transpose(Data), nbStates)
# 将聚类中心转置,作为高斯分量的均值矩阵
Mu = np.transpose(Centers)
# 对于每个高斯分量,进行以下操作
for i in range (0,nbStates):
# 找到属于该分量的样本的索引
idtmp = np.nonzero(Data_id==i)
# 将索引转换为列表,并调整形状
idtmp = list(idtmp)
idtmp = np.reshape(idtmp,(np.size(idtmp)))
# 计算该分量的先验概率,等于该分量的样本个数除以总样本个数
Priors[0,i] = np.size(idtmp)
# 将该分量的样本拼接起来,作为一个新的矩阵
a = np.concatenate((Data[:, idtmp],Data[:, idtmp]), axis = 1)
# 计算该矩阵的协方差,作为该分量的协方差矩阵
Sigma[:,:,i] = np.cov(a)
# 为了防止协方差矩阵的奇异性,给对角线元素加上一个很小的数
Sigma[:,:,i] = Sigma[:,:,i] + 0.00001 * np.diag(np.diag(np.ones((nbVar,nbVar))))
# 将先验概率归一化,使其和为 1
Priors = Priors / nbData
# 返回先验概率,均值矩阵和协方差矩阵
return (Priors, Mu, Sigma)
gaussPDF.py 计算高斯分布的概率密度函数
# 导入 numpy 库,用于进行矩阵运算
import numpy as np
# 导入 math 库,用于进行数学运算
import math
# 导入 sys 库,用于获取系统信息
import sys
# 定义一个函数,用于计算高斯分布的概率密度函数
# 输入参数为 Data: 数据矩阵,每一行是一个特征,每一列是一个样本
# Mu: 高斯分布的均值向量,是一个一维数组
# Sigma: 高斯分布的协方差矩阵,是一个二维数组
# 输出参数为 prob: 高斯分布的概率密度值,是一个一维数组,每个元素表示对应样本的概率
def gaussPDF(Data, Mu, Sigma):
# 获取系统的最小浮点数,用于防止除零错误
realmin = sys.float_info[3]
# 获取数据的维度和个数
nbVar, nbData = np.shape(Data)
# 将数据矩阵转置,然后减去均值向量,得到一个新的矩阵
Data = np.transpose(Data) - np.tile(np.transpose(Mu), (nbData, 1))
# 计算新矩阵与协方差矩阵的逆的乘积,再与新矩阵相乘,得到一个一维数组
prob = np.sum(np.dot(Data, np.linalg.inv(Sigma))*Data, 1)
# 对数组中的每个元素,进行指数运算,然后除以一个常数,得到最终的概率密度值
prob = np.exp(-0.5*prob)/np.sqrt((np.power((2*math.pi), nbVar))*np.absolute(np.linalg.det(Sigma))+realmin)
# 返回概率密度值
return prob
EM.py 实现高斯混合模型的参数估计
# 从 gaussPDF.py 文件中导入 gaussPDF 函数,用于后续的计算
from gaussPDF import *
# 导入 numpy 库,用于进行矩阵运算
import numpy as np
# 导入 sys 库,用于获取系统信息
import sys
# 定义一个函数,用于实现高斯混合模型的参数估计
# 输入参数为 Data: 数据矩阵,每一行是一个特征,每一列是一个样本
# Priors0: 高斯分量的初始先验概率,是一个一维数组,每个元素表示对应分量的概率
# Mu0: 高斯分量的初始均值矩阵,每一行是一个特征,每一列是一个分量
# Sigma0: 高斯分量的初始协方差矩阵,是一个三维数组,每个二维矩阵表示一个分量的协方差
# 输出参数为 Priors: 高斯分量的最终先验概率,是一个一维数组,每个元素表示对应分量的概率
# Mu: 高斯分量的最终均值矩阵,每一行是一个特征,每一列是一个分量
# Sigma: 高斯分量的最终协方差矩阵,是一个三维数组,每个二维矩阵表示一个分量的协方差
# Pix: 后验概率矩阵,每一行表示一个分量,每一列表示一个样本,每个元素表示对应样本属于对应分量的概率
def EM(Data, Priors0, Mu0, Sigma0):
# 获取系统的最大浮点数,用于初始化对数似然值
realmax = sys.float_info[0]
# 获取系统的最小浮点数,用于防止除零错误
realmin = sys.float_info[3]
# 设置对数似然值的收敛阈值,当对数似然值的变化小于该值时,停止迭代
loglik_threshold = 1e-10
# 获取数据的维度和个数
nbVar, nbData = np.shape(Data)
# 获取高斯分量的个数
nbStates = np.size(Priors0)
# 初始化对数似然值为一个很小的负数
loglik_old = -realmax
# 初始化迭代次数为 0
nbStep = 0
# 将初始参数赋值给当前参数
Mu = Mu0
Sigma = Sigma0
Priors = Priors0
# 创建一个空的数组,用于存储后验概率矩阵
Pix = np.ndarray(shape = (nbStates, nbData))
# 创建一个空的数组,用于存储高斯分布的概率密度矩阵
Pxi = np.ndarray(shape = (nbData, nbStates))
# 进入一个无限循环,直到满足收敛条件或达到最大迭代次数
while 1:
# 对于每个高斯分量,进行以下操作
for i in range (0,nbStates):
# 调用 gaussPDF 函数,计算每个样本在该分量下的概率密度值,存储在 Pxi 矩阵的第 i 列
Pxi[:,i] = gaussPDF(Data,Mu[:,i],Sigma[:,:,i])
# 将先验概率矩阵复制 nbData 次,得到一个新的矩阵,然后与 Pxi 矩阵相乘,得到一个临时矩阵
Pix_tmp = np.multiply(np.tile(Priors, (nbData, 1)),Pxi)
# 将临时矩阵的每一行求和,得到一个一维数组,然后将其复制 nbStates 次,得到一个新的矩阵
# 将临时矩阵除以新的矩阵,得到后验概率矩阵 Pix
Pix = np.divide(Pix_tmp,np.tile(np.reshape(np.sum(Pix_tmp,1), (nbData, 1)), (1, nbStates)))
# 将后验概率矩阵的每一列求和,得到一个一维数组,表示每个分量的有效样本个数
E = np.sum(Pix, 0)
# 将先验概率矩阵调整为一维数组
Priors = np.reshape(Priors, (nbStates))
# 对于每个高斯分量,进行以下操作
for i in range (0,nbStates):
# 更新该分量的先验概率,等于该分量的有效样本个数除以总样本个数
Priors[i] = E[i]/nbData
# 更新该分量的均值向量,等于数据矩阵与后验概率矩阵的第 i 列的乘积,再除以该分量的有效样本个数
Mu[:,i] = np.dot(Data,Pix[:,i])/E[i]
# 将数据矩阵减去该分量的均值向量,得到一个新的矩阵
Data_tmp1 = Data - np.tile(np.reshape(Mu[:,i], (nbVar, 1)), (1,nbData))
# 将后验概率矩阵的第 i 列转置,然后调整为一维数组
a = np.transpose(Pix[:, i])
# 将该数组复制 nbVar 次,得到一个新的矩阵
b = np.reshape(a, (1, nbData))
c = np.tile(b, (nbVar, 1))
# 将新矩阵与新数据矩阵相乘,得到一个临时矩阵
d = c*Data_tmp1
# 将新数据矩阵转置,然后与临时矩阵相乘,得到该分量的协方差矩阵
e = np.transpose(Data_tmp1)
f = np.dot(d,e)
Sigma[:,:,i] = f/E[i]
# 为了防止协方差矩阵的奇异性,给对角线元素加上一个很小的数
Sigma[:,:,i] = Sigma[:,:,i] + 0.00001 * np.diag(np.diag(np.ones((nbVar,nbVar))))
# 对于每个高斯分量,进行以下操作
for i in range (0,nbStates):
# 调用 gaussPDF 函数,计算每个样本在该分量下的概率密度值,存储在 Pxi 矩阵的第 i 列
Pxi[:,i] = gaussPDF(Data,Mu[:,i],Sigma[:,:,i])
# 将 Pxi 矩阵与先验概率矩阵的转置相乘,得到一个一维数组,表示每个样本的总概率
F = np.dot(Pxi,np.transpose(Priors))
# 找到总概率小于最小浮点数的索引
indexes = np.nonzero(F<realmin)
# 将索引转换为列表,并调整形状
indexes = list(indexes)
indexes = np.reshape(indexes,np.size(indexes))
# 将总概率 F 中小于系统最小浮点数的元素替换为系统最小浮点数,防止对数运算出错
F[indexes] = realmin
# 将 F 调整为一个二维数组,每一行表示一个样本,每一列表示一个分量
F = np.reshape(F, (nbData, 1))
# 计算 F 的对数,然后求平均,得到当前的对数似然值
loglik = np.mean(np.log10(F), 0)
# 如果当前的对数似然值与上一次的对数似然值的比值与 1 的绝对差小于收敛阈值,说明已经达到最优解,退出循环
if np.absolute((loglik/loglik_old)-1)<loglik_threshold:
break
# 否则,将当前的对数似然值赋值给上一次的对数似然值,继续迭代
loglik_old = loglik
# 迭代次数加一
nbStep = nbStep+1
# 返回最终的参数和后验概率矩阵
return(Priors,Mu,Sigma, Pix)
GMM_GMR.py 该类可以使用高斯混合模型(GMM)和高斯混合回归(GMR)对数据进行建模和预测
# 从 EM_init.py 文件中导入 EM_init 函数,用于实现高斯混合模型的初始化
from EM_init import *
# 从 EM.py 文件中导入 EM 函数,用于实现高斯混合模型的参数估计
from EM import *
# 从 plotGMM.py 文件中导入 plotGMM 函数,用于绘制高斯混合模型的图形
from plotGMM import *
# 从 GMR.py 文件中导入 GMR 函数,用于实现高斯混合回归
from GMR import *
# 从 matplotlib 库中导入 pyplot 模块,用于绘制图形
from matplotlib import pyplot as plt
# 导入 numpy 库,用于进行矩阵运算
import numpy as np
# 定义一个类,名为 GMM_GMR
class GMM_GMR(object):
# 定义类的初始化方法,用于设置高斯分量的个数
# 输入参数为 numberOfStates: 高斯分量的个数,是一个整数
def __init__(self, numberOfStates):
# 将高斯分量的个数赋值给类的属性
self.numbefOfStates = numberOfStates
# 定义类的拟合方法,用于对数据进行高斯混合模型的建模
# 输入参数为 data: 数据矩阵,每一行是一个特征,每一列是一个样本
def fit(self, data):
# 将数据矩阵赋值给类的属性
self.data = data
# 调用 EM_init 函数,对数据进行聚类,得到高斯分量的初始先验概率,均值矩阵和协方差矩阵
Priors, Mu, Sigma = EM_init(data, self.numbefOfStates)
# 调用 EM 函数,对数据进行高斯混合模型的参数估计,得到高斯分量的最终先验概率,均值矩阵,协方差矩阵和后验概率矩阵
self.Priors, self.Mu, self.Sigma, self.Pix = EM(data, Priors, Mu, Sigma)
# 定义类的预测方法,用于对输入变量的值进行高斯混合回归,得到输出变量的值和协方差
# 输入参数为 inputMat: 输入变量的值,是一个一维数组,每个元素表示一个样本
def predict(self, inputMat):
# 获取数据的维度和个数
nbVar, nbData = np.shape(self.data)
# 创建一个空的数组,用于存储输出变量的值
self.expData = np.ndarray(shape=(nbVar, np.size(inputMat)))
# 将输入变量的值赋值给输出变量的第一行
self.expData[0, :] = inputMat
# 调用 GMR 函数,对输入变量的值进行高斯混合回归,得到输出变量的值和协方差,赋值给输出变量的其他行和类的属性
self.expData[1:nbVar, :], self.expSigma = GMR(self.Priors, self.Mu, self.Sigma, self.expData[0, :], 0,
np.arange(1, nbVar))
# 定义类的获取预测矩阵的方法,用于返回输出变量的值
# 输出参数为 self.expData: 输出变量的值,是一个二维数组,每一行是一个特征,每一列是一个样本
def getPredictedMatrix(self):
return self.expData
# 定义类的绘图方法,用于绘制数据,高斯混合模型和高斯混合回归的图形
# 输入参数为 xAxis: 横坐标的特征索引,是一个整数,默认为 0
# yAxis: 纵坐标的特征索引,是一个整数,默认为 1
# plotType: 绘图的类型,是一个字符串,可以选择 "Data", "Clusters", "Regression",默认为 "Clusters"
# ax: 绘图的对象,是一个 pyplot 模块,可以使用 plt 或其他自定义的对象,默认为 plt
# dataColor: 数据的颜色,是一个三元素的列表,表示 RGB 的值,范围在 0 到 1 之间,默认为 [0, 0.8, 0.7]
# clusterColor: 高斯混合模型的颜色,是一个三元素的列表,表示 RGB 的值,范围在 0 到 1 之间,默认为 [0, 0.8, 0]
# regressionColor: 高斯混合回归的颜色,是一个三元素的列表,表示 RGB 的值,范围在 0 到 1 之间,默认为 [0,0,0.8]
def plot(self, xAxis = 0, yAxis = 1, plotType = "Clusters", ax = plt, dataColor = [0, 0.8, 0.7],
clusterColor = [0, 0.8, 0], regressionColor = [0,0,0.8]):
# 计算横坐标的范围,为数据的最小值和最大值之间的区间,再扩大 10%
xlim = [self.data[xAxis,:].min() - (self.data[xAxis,:].max() - self.data[xAxis,:].min())*0.1, self.data[xAxis,:].max() + (self.data[xAxis,:].max() - self.data[xAxis,:].min())*0.1]
# 计算纵坐标的范围,为数据的最小值和最大值之间的区间,再加上一定的边距
ylim = [self.data[yAxis,:].min() - (self.data[yAxis,:].max() - self.data[yAxis,:].min())*0.1, self.data[yAxis,:].max() + (self.data[yAxis,:].max() - self.data[yAxis,:].min())*0.1]
# 如果绘图类型为 "Data",则只绘制数据点
if plotType == "Data": # 使用 ax 对象的 plot 方法,绘制数据点,横坐标为 xAxis 特征,纵坐标为 yAxis 特征,颜色为 dataColor,形状为圆点
ax.plot(self.data[xAxis,:], self.data[yAxis,:],'.', color=dataColor)
# 使用 pyplot 的 xlim 方法,设置横坐标的范围
plt.xlim(xlim)
# 使用 pyplot 的 ylim 方法,设置纵坐标的范围
plt.ylim(ylim)
# 如果绘图类型为 "Clusters",则绘制数据点和聚类的结果
elif plotType == "Clusters":
# 创建一个数组,表示要绘制的特征的索引,包括 xAxis 和 yAxis
rows = np.array([xAxis, yAxis])
# 创建一个数组,表示要绘制的分量的索引,从 0 到分量个数
cols = np.arange(0, self.numbefOfStates, 1)
# 调用 plotGMM 函数,绘制高斯混合模型的图形,输入参数为均值矩阵的子矩阵,协方差矩阵的子矩阵,颜色,透明度和绘图对象
plotGMM(self.Mu[np.ix_(rows, cols)], self.Sigma[np.ix_(rows, rows, cols)], [0, 0.8, 0], 1, ax)
# 使用 pyplot 的 xlim 方法,设置横坐标的范围
plt.xlim(xlim)
# 使用 pyplot 的 ylim 方法,设置纵坐标的范围
plt.ylim(ylim)
# 如果绘图类型为 "Regression",则绘制数据点和回归的结果
elif plotType == "Regression":
# 创建一个数组,表示要绘制的特征的索引,包括 xAxis 和 yAxis
rows = np.array([xAxis, yAxis])
# 创建一个数组,表示要绘制的协方差矩阵的索引,为 yAxis 减一
rows2 = np.array([yAxis - 1, yAxis - 1])
# 创建一个数组,表示要绘制的样本的索引,从 0 到样本个数
cols = np.arange(0, self.expData.shape[1], 1)
# 将 cols 数组转换为整数类型
cols = cols.astype(int)
# 调用 plotGMM 函数,绘制高斯混合回归的图形,输入参数为输出变量的值的子矩阵,输出变量的协方差的子矩阵,颜色,透明度和绘图对象
plotGMM(self.expData[np.ix_(rows, cols)], self.expSigma[np.ix_(rows2, rows2, cols)], regressionColor, 2, ax)
# 使用 pyplot 的 xlim 方法,设置横坐标的范围
plt.xlim(xlim)
# 使用 pyplot 的 ylim 方法,设置纵坐标的范围
plt.ylim(ylim)
# 如果绘图类型不是以上三种,则打印错误信息
else:
print("Invalid plot type.\nPossible choices are: Data, Clusters, Regression.")
xAxis = 0, yAxis = 1, plotType = "Clusters", ax = plt, dataColor = [0, 0.8, 0.7], clusterColor = [0, 0.8, 0], regressionColor = [0,0,0.8]
示例1:
读取 data.txt 文件中的数据,只取前两列,并转置,得到一个二维数组,每一行是一个特征,每一列是一个样本。
创建一个 GMM_GMR 类的实例,指定高斯分量的个数为 4,然后调用 fit 方法,对数据进行高斯混合模型的参数估计。
创建一个输入变量的矩阵,从 1 到数据的第 0 行的最大值,均匀地取 100 个值,然后调用 predict 方法,对输入变量进行高斯混合回归,得到输出变量的值和协方差。
创建一个图形对象,然后在其中添加四个子图,分别显示数据点,聚类结果,回归结果,以及聚类和回归的叠加,横坐标为第 0 列,纵坐标为第 1 列。
获取输出变量的值,打印在控制台中,然后显示图形。
data.txt 文件包含了三列数据,每一行表示一个样本,每一列表示一个特征
6.675, 9.6, 1
8.375, 10.8, 1
10.875, 12.75, 1
13.725, 13.3, 1
17.625, 14.1, 1
23.425, 14.2, 1
26.875, 12.15, 1
30.475, 8.75, 1
4.675, 7.8, 1
2.975, 5.85, 1
1.625, 4.05, 1
21.175, 13.7, 1
24.975, 12.85, 1
28.375, 10.7, 1
32.525, 7.25, 1
35.925, 6.65, 1
38.775, 7.9, 1
41.225, 9.45, 1
2.775, 4.15, 1
4.225, 4.95, 1
3.375, 7.2, 1
4.375, 8.65, 1
5.875, 7.6, 1
5.625, 9.9, 1
8.175, 9.5, 1
7.475, 10.95, 1
8.225, 11.65, 1
9.725, 11.75, 1
9.875, 13.4, 1
9.475, 10.9, 1
10.575, 11.2, 1
11.775, 13.6, 1
12.575, 12.1, 1
13.325, 14.35, 1
13.875, 15.7, 1
11.825, 14.55, 1
12.725, 13.5, 1
15.025, 12.6, 1
14.175, 12.6, 1
15.125, 14.2, 1
14.475, 14.3, 1
15.475, 15.5, 1
16.575, 12.65, 1
16.375, 14, 1
17.225, 15.7, 1
17.825, 14.7, 1
18.625, 15.2, 1
19.725, 15.25, 1
20.775, 15.1, 1
19.775, 14.65, 1
18.325, 13, 1
18.425, 14.2, 1
19.525, 13.35, 1
20.575, 14.15, 1
20.425, 13.1, 1
21.775, 13, 1
21.775, 14.8, 1
22.875, 13.15, 1
22.475, 13.55, 1
23.175, 12, 1
23.975, 12.45, 1
23.975, 12.45, 1
24.425, 11.95, 1
25.075, 11.85, 1
25.475, 11.4, 1
26.275, 11.35, 1
26.175, 12.05, 1
26.825, 11.05, 1
24.675, 11.4, 1
26.375, 10.5, 1
27.775, 11.1, 1
27.325, 11.45, 1
27.325, 10.6, 1
28.775, 9.15, 1
30.125, 10.05, 1
31.775, 8.9, 1
34.825, 7.05, 1
33.675, 8, 1
35.275, 7.95, 1
36.925, 7.95, 1
38.925, 8.8, 1
40.125, 9.7, 1
41.075, 10.3, 1
39.975, 8.65, 1
38.125, 6.75, 1
37.325, 7.35, 1
35.975, 7.3, 1
33.725, 7.05, 1
32.575, 8.3, 1
31.825, 8.35, 1
29.625, 9.4, 1
27.875, 10.05, 1
29.225, 10.1, 1
31.075, 9.3, 1
30.925, 7.45, 1
38.575, 8.55, 1
37.925, 8.05, 1
39.775, 7.75, 1
35.775, 14.4, 1
19.575, 6.2, 1
9.075, 7.25, 1
15.925, 10.15, 1
19.575, 12, 1
25.775, 10.05, 1
25.575, 9.3, 1
28.075, 7.6, 1
example1.py
# 从 GMM_GMR.py 文件中导入 GMM_GMR 类,用于实现高斯混合模型和高斯混合回归的类定义
from GMM_GMR import GMM_GMR
# 导入 pyplot 模块,用于绘制图形
from matplotlib import pyplot as plt
# 导入 numpy 库,用于进行矩阵运算
import numpy as np
# 如果当前文件是主程序,而不是被其他文件导入,则执行以下代码
if __name__ == "__main__":
# 从 data.txt 文件中读取数据,使用逗号作为分隔符,存储在 data 矩阵中
data = np.loadtxt("data.txt", delimiter=',')
# 只取 data 矩阵的前两列,然后转置,得到一个二维数组,每一行是一个特征,每一列是一个样本
data = data[:, 0:2].T
# 创建一个 GMM_GMR 类的实例,指定高斯分量的个数为 4
gmr = GMM_GMR(4)
# 调用 fit 方法,对数据进行高斯混合模型的参数估计
gmr.fit(data)
# 创建一个输入变量的矩阵,从 1 到数据的第 0 行的最大值,均匀地取 100 个值
timeInput = np.linspace(1, np.max(data[0, :]), 100)
# 调用 predict 方法,对输入变量进行高斯混合回归,得到输出变量的值和协方差
gmr.predict(timeInput)
# 创建一个图形对象
fig = plt.figure()
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 1 个,存储在 ax1 变量中
ax1 = fig.add_subplot(221)
# 打印 ax1 变量的类型,应该是 AxesSubplot
print(type(ax1))
# 为 ax1 子图设置标题为 "Data"
plt.title("Data")
# 调用 gmr 对象的 plot 方法,绘制数据和聚类的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Data",绘图对象为 ax1
gmr.plot(ax=ax1, plotType="Data")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 2 个,存储在 ax2 变量中
ax2 = fig.add_subplot(222)
# 为 ax2 子图设置标题为 "Gaussian States"
plt.title("Gaussian States")
# 调用 gmr 对象的 plot 方法,绘制数据和聚类的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Clusters",绘图对象为 ax2
gmr.plot(ax=ax2, plotType="Clusters")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 3 个,存储在 ax3 变量中
ax3 = fig.add_subplot(223)
# 为 ax3 子图设置标题为 "Regression"
plt.title("Regression")
# 调用 gmr 对象的 plot 方法,绘制数据和回归的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Regression",绘图对象为 ax3
gmr.plot(ax=ax3, plotType="Regression")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 4 个,存储在 ax4 变量中
ax4 = fig.add_subplot(224)
# 为 ax4 子图设置标题为 "Clusters + Regression"
plt.title("Clusters + Regression")
# 调用 gmr 对象的 plot 方法,绘制数据和聚类的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Clusters",绘图对象为 ax4
gmr.plot(ax=ax4, plotType="Clusters")
# 调用 gmr 对象的 plot 方法,绘制数据和回归的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Regression",绘图对象为 ax4
gmr.plot(ax=ax4, plotType="Regression")
# 调用 gmr 对象的 getPredictedMatrix 方法,获取输出变量的值,存储在 predictedMatrix 变量中
predictedMatrix = gmr.getPredictedMatrix()
# 打印 predictedMatrix 变量,查看预测结果
print(predictedMatrix)
# 显示图形
plt.show()
输出结果:
示例2:
代码是用来从 data2.txt 文件中读取数据,并使用 GMM_GMR 类进行高斯混合模型和高斯混合回归的分析和预测。
data2.txt 文件有三行数据,每一行表示一个特征,每一列表示一个样本。第 0 行是时间特征,第 1 行是位置特征,第 2 行是速度特征。
代码首先创建了一个 GMM_GMR 类的实例,指定高斯分量的个数为 4,然后调用 fit 方法,对数据进行高斯混合模型的参数估计。
然后,代码创建了一个输入变量的矩阵,从 1 到数据的第 0 行的最大值,均匀地取 300 个值,然后调用 predict 方法,对输入变量进行高斯混合回归,得到输出变量的值和协方差。
接着,代码创建了两个图形对象,分别显示了第 1 列和第 0 列,以及第 2 列和第 1 列的关系。每个图形对象中有四个子图,分别显示了数据点,聚类结果,回归结果,以及聚类和回归的叠加。
最后,代码调用 getPredictedMatrix 方法,获取输出变量的值,打印在控制台中,然后显示图形。
data2.txt
example2.py
# 从 GMM_GMR.py 文件中导入 GMM_GMR 类,用于实现高斯混合模型和高斯混合回归的类定义
from GMM_GMR import GMM_GMR
# 导入 pyplot 模块,用于绘制图形
from matplotlib import pyplot as plt
# 导入 numpy 库,用于进行矩阵运算
import numpy as np
# 如果当前文件是主程序,而不是被其他文件导入,则执行以下代码
if __name__ == "__main__":
# 从 data2.txt 文件中读取数据,使用逗号作为分隔符,存储在 data 矩阵中
data = np.loadtxt("data2.txt", delimiter=',')
# 创建一个 GMM_GMR 类的实例,指定高斯分量的个数为 4
gmr = GMM_GMR(4)
# 调用 fit 方法,对数据进行高斯混合模型的参数估计
gmr.fit(data)
# 创建一个输入变量的矩阵,从 1 到数据的第 0 行的最大值,均匀地取 300 个值
timeInput = np.linspace(1, np.max(data[0, :]), 300)
# 调用 predict 方法,对输入变量进行高斯混合回归,得到输出变量的值和协方差
gmr.predict(timeInput)
# 创建一个图形对象
fig = plt.figure()
# 为图形对象设置总标题为 "Axis 1 vs axis 0"
fig.suptitle("Axis 1 vs axis 0")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 1 个,存储在 ax1 变量中
ax1 = fig.add_subplot(221)
# 为 ax1 子图设置标题为 "Data"
plt.title("Data")
# 调用 gmr 对象的 plot 方法,绘制数据点,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Data",绘图对象为 ax1
gmr.plot(ax=ax1, plotType="Data")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 2 个,存储在 ax2 变量中
ax2 = fig.add_subplot(222)
# 为 ax2 子图设置标题为 "Gaussian States"
plt.title("Gaussian States")
# 调用 gmr 对象的 plot 方法,绘制数据和聚类的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Clusters",绘图对象为 ax2
gmr.plot(ax=ax2, plotType="Clusters")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 3 个,存储在 ax3 变量中
ax3 = fig.add_subplot(223)
# 为 ax3 子图设置标题为 "Regression"
plt.title("Regression")
# 调用 gmr 对象的 plot 方法,绘制数据和回归的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Regression",绘图对象为 ax3
gmr.plot(ax=ax3, plotType="Regression")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 4 个,存储在 ax4 变量中
ax4 = fig.add_subplot(224)
# 为 ax4 子图设置标题为 "Clusters + Regression"
plt.title("Clusters + Regression")
# 调用 gmr 对象的 plot 方法,绘制数据和聚类的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Clusters",绘图对象为 ax4
gmr.plot(ax=ax4, plotType="Clusters")
# 调用 gmr 对象的 plot 方法,绘制数据和回归的结果,横坐标为第 0 列,纵坐标为第 1 列,绘图类型为 "Regression",绘图对象为 ax4
gmr.plot(ax=ax4, plotType="Regression")
# 创建一个新的图形对象
fig = plt.figure()
# 为图形对象设置总标题为 "Axis 2 vs axis 1"
fig.suptitle("Axis 2 vs axis 1")
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 1 个,存储在 ax1 变量中
ax1 = fig.add_subplot(221)
# 为 ax1 子图设置标题为 "Data"
plt.title("Data")
# 调用 gmr 对象的 plot 方法,绘制数据点,横坐标为第 1 列,纵坐标为第 2 列,绘图类型为 "Data",绘图对象为 ax1
gmr.plot(ax=ax1, plotType="Data", xAxis=1, yAxis=2)
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 2 个,存储在 ax2 变量中
ax2 = fig.add_subplot(222)
# 为 ax2 子图设置标题为 "Gaussian States"
plt.title("Gaussian States")
# 调用 gmr 对象的 plot 方法,绘制数据和聚类的结果,横坐标为第 1 列,纵坐标为第 2 列,绘图类型为 "Clusters",绘图对象为 ax2
gmr.plot(ax=ax2, plotType="Clusters", xAxis=1, yAxis=2)
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 3 个,存储在 ax3 变量中
ax3 = fig.add_subplot(223)
# 为 ax3 子图设置标题为 "Regression"
plt.title("Regression")
# 调用 gmr 对象的 plot 方法,绘制数据和回归的结果,横坐标为第 1 列,纵坐标为第 2 列,绘图类型为 "Regression",绘图对象为 ax3
gmr.plot(ax=ax3, plotType="Regression", xAxis=1, yAxis=2)
# 在图形对象中添加一个子图,位置为 2 行 2 列的第 4 个,存储在 ax4 变量中
ax4 = fig.add_subplot(224)
# 为 ax4 子图设置标题为 "Clusters + Regression"
plt.title("Clusters + Regression")
# 调用 gmr 对象的 plot 方法,绘制数据和聚类的结果,横坐标为第 1 列,纵坐标为第 2 列,绘图类型为 "Clusters",绘图对象为 ax4
gmr.plot(ax=ax4, plotType="Clusters", xAxis=1, yAxis=2)
# 调用 gmr 对象的 plot 方法,绘制数据和回归的结果,横坐标为第 1 列,纵坐标为第 2 列,绘图类型为 "Regression",绘图对象为 ax4
gmr.plot(ax=ax4, plotType="Regression", xAxis=1, yAxis=2)
# 调用 gmr 对象的 getPredictedMatrix 方法,获取输出变量的值,存储在 predictedMatrix 变量中
predictedMatrix = gmr.getPredictedMatrix()
# 打印 predictedMatrix 变量,查看预测结果
print(predictedMatrix)
# 显示图形
plt.show()
输出结果:
[[ 1.00000000e+00 1.33110368e+00 1.66220736e+00 1.99331104e+00
2.32441472e+00 2.65551839e+00 2.98662207e+00 3.31772575e+00
3.64882943e+00 3.97993311e+00 4.31103679e+00 4.64214047e+00
4.97324415e+00 5.30434783e+00 5.63545151e+00 5.96655518e+00
6.29765886e+00 6.62876254e+00 6.95986622e+00 7.29096990e+00
7.62207358e+00 7.95317726e+00 8.28428094e+00 8.61538462e+00
8.94648829e+00 9.27759197e+00 9.60869565e+00 9.93979933e+00
1.02709030e+01 1.06020067e+01 1.09331104e+01 1.12642140e+01
1.15953177e+01 1.19264214e+01 1.22575251e+01 1.25886288e+01
1.29197324e+01 1.32508361e+01 1.35819398e+01 1.39130435e+01
1.42441472e+01 1.45752508e+01 1.49063545e+01 1.52374582e+01
1.55685619e+01 1.58996656e+01 1.62307692e+01 1.65618729e+01
1.68929766e+01 1.72240803e+01 1.75551839e+01 1.78862876e+01
1.82173913e+01 1.85484950e+01 1.88795987e+01 1.92107023e+01
1.95418060e+01 1.98729097e+01 2.02040134e+01 2.05351171e+01
2.08662207e+01 2.11973244e+01 2.15284281e+01 2.18595318e+01
2.21906355e+01 2.25217391e+01 2.28528428e+01 2.31839465e+01
2.35150502e+01 2.38461538e+01 2.41772575e+01 2.45083612e+01
2.48394649e+01 2.51705686e+01 2.55016722e+01 2.58327759e+01
2.61638796e+01 2.64949833e+01 2.68260870e+01 2.71571906e+01
2.74882943e+01 2.78193980e+01 2.81505017e+01 2.84816054e+01
2.88127090e+01 2.91438127e+01 2.94749164e+01 2.98060201e+01
3.01371237e+01 3.04682274e+01 3.07993311e+01 3.11304348e+01
3.14615385e+01 3.17926421e+01 3.21237458e+01 3.24548495e+01
3.27859532e+01 3.31170569e+01 3.34481605e+01 3.37792642e+01
3.41103679e+01 3.44414716e+01 3.47725753e+01 3.51036789e+01
3.54347826e+01 3.57658863e+01 3.60969900e+01 3.64280936e+01
3.67591973e+01 3.70903010e+01 3.74214047e+01 3.77525084e+01
3.80836120e+01 3.84147157e+01 3.87458194e+01 3.90769231e+01
3.94080268e+01 3.97391304e+01 4.00702341e+01 4.04013378e+01
4.07324415e+01 4.10635452e+01 4.13946488e+01 4.17257525e+01
4.20568562e+01 4.23879599e+01 4.27190635e+01 4.30501672e+01
4.33812709e+01 4.37123746e+01 4.40434783e+01 4.43745819e+01
4.47056856e+01 4.50367893e+01 4.53678930e+01 4.56989967e+01
4.60301003e+01 4.63612040e+01 4.66923077e+01 4.70234114e+01
4.73545151e+01 4.76856187e+01 4.80167224e+01 4.83478261e+01
4.86789298e+01 4.90100334e+01 4.93411371e+01 4.96722408e+01
5.00033445e+01 5.03344482e+01 5.06655518e+01 5.09966555e+01
5.13277592e+01 5.16588629e+01 5.19899666e+01 5.23210702e+01
5.26521739e+01 5.29832776e+01 5.33143813e+01 5.36454849e+01
5.39765886e+01 5.43076923e+01 5.46387960e+01 5.49698997e+01
5.53010033e+01 5.56321070e+01 5.59632107e+01 5.62943144e+01
5.66254181e+01 5.69565217e+01 5.72876254e+01 5.76187291e+01
5.79498328e+01 5.82809365e+01 5.86120401e+01 5.89431438e+01
5.92742475e+01 5.96053512e+01 5.99364548e+01 6.02675585e+01
6.05986622e+01 6.09297659e+01 6.12608696e+01 6.15919732e+01
6.19230769e+01 6.22541806e+01 6.25852843e+01 6.29163880e+01
6.32474916e+01 6.35785953e+01 6.39096990e+01 6.42408027e+01
6.45719064e+01 6.49030100e+01 6.52341137e+01 6.55652174e+01
6.58963211e+01 6.62274247e+01 6.65585284e+01 6.68896321e+01
6.72207358e+01 6.75518395e+01 6.78829431e+01 6.82140468e+01
6.85451505e+01 6.88762542e+01 6.92073579e+01 6.95384615e+01
6.98695652e+01 7.02006689e+01 7.05317726e+01 7.08628763e+01
7.11939799e+01 7.15250836e+01 7.18561873e+01 7.21872910e+01
7.25183946e+01 7.28494983e+01 7.31806020e+01 7.35117057e+01
7.38428094e+01 7.41739130e+01 7.45050167e+01 7.48361204e+01
7.51672241e+01 7.54983278e+01 7.58294314e+01 7.61605351e+01
7.64916388e+01 7.68227425e+01 7.71538462e+01 7.74849498e+01
7.78160535e+01 7.81471572e+01 7.84782609e+01 7.88093645e+01
7.91404682e+01 7.94715719e+01 7.98026756e+01 8.01337793e+01
8.04648829e+01 8.07959866e+01 8.11270903e+01 8.14581940e+01
8.17892977e+01 8.21204013e+01 8.24515050e+01 8.27826087e+01
8.31137124e+01 8.34448161e+01 8.37759197e+01 8.41070234e+01
8.44381271e+01 8.47692308e+01 8.51003344e+01 8.54314381e+01
8.57625418e+01 8.60936455e+01 8.64247492e+01 8.67558528e+01
8.70869565e+01 8.74180602e+01 8.77491639e+01 8.80802676e+01
8.84113712e+01 8.87424749e+01 8.90735786e+01 8.94046823e+01
8.97357860e+01 9.00668896e+01 9.03979933e+01 9.07290970e+01
9.10602007e+01 9.13913043e+01 9.17224080e+01 9.20535117e+01
9.23846154e+01 9.27157191e+01 9.30468227e+01 9.33779264e+01
9.37090301e+01 9.40401338e+01 9.43712375e+01 9.47023411e+01
9.50334448e+01 9.53645485e+01 9.56956522e+01 9.60267559e+01
9.63578595e+01 9.66889632e+01 9.70200669e+01 9.73511706e+01
9.76822742e+01 9.80133779e+01 9.83444816e+01 9.86755853e+01
9.90066890e+01 9.93377926e+01 9.96688963e+01 1.00000000e+02]
[ 8.21442059e-02 8.06371753e-02 7.91298699e-02 7.76222683e-02
7.61143471e-02 7.46060809e-02 7.30974422e-02 7.15884010e-02
7.00789248e-02 6.85689780e-02 6.70585223e-02 6.55475158e-02
6.40359132e-02 6.25236652e-02 6.10107184e-02 5.94970147e-02
5.79824913e-02 5.64670802e-02 5.49507078e-02 5.34332944e-02
5.19147542e-02 5.03949949e-02 4.88739168e-02 4.73514134e-02
4.58273706e-02 4.43016666e-02 4.27741722e-02 4.12447507e-02
3.97132582e-02 3.81795447e-02 3.66434544e-02 3.51048277e-02
3.35635028e-02 3.20193190e-02 3.04721194e-02 2.89217565e-02
2.73680973e-02 2.58110315e-02 2.42504807e-02 2.26864102e-02
2.11188432e-02 1.95478784e-02 1.79737115e-02 1.63966592e-02
1.48171896e-02 1.32359555e-02 1.16538332e-02 1.00719656e-02
8.49180885e-03 6.91518145e-03 5.34431372e-03 3.78189415e-03
2.23110877e-03 6.95667724e-04 -8.20187365e-04 -2.31170287e-03
-3.77366701e-03 -5.20050498e-03 -6.58642005e-03 -7.92558161e-03
-9.21235601e-03 -1.04415693e-02 -1.16087847e-02 -1.27105710e-02
-1.37447366e-02 -1.47105004e-02 -1.56085806e-02 -1.64411860e-02
-1.72119091e-02 -1.79255309e-02 -1.85877595e-02 -1.92049274e-02
-1.97836799e-02 -2.03306811e-02 -2.08523578e-02 -2.13546973e-02
-2.18431029e-02 -2.23223078e-02 -2.27963390e-02 -2.32685243e-02
-2.37415298e-02 -2.42174196e-02 -2.46977268e-02 -2.51835300e-02
-2.56755291e-02 -2.61741168e-02 -2.66794436e-02 -2.71914741e-02
-2.77100367e-02 -2.82348632e-02 -2.87656229e-02 -2.93019490e-02
-2.98434595e-02 -3.03897729e-02 -3.09405210e-02 -3.14953568e-02
-3.20539608e-02 -3.26160451e-02 -3.31813555e-02 -3.37496729e-02
-3.43208130e-02 -3.48946265e-02 -3.54709974e-02 -3.60498427e-02
-3.66311099e-02 -3.72147763e-02 -3.78008470e-02 -3.83893530e-02
-3.89803496e-02 -3.95739147e-02 -4.01701462e-02 -4.07691606e-02
-4.13710902e-02 -4.19760802e-02 -4.25842859e-02 -4.31958689e-02
-4.38109927e-02 -4.44298174e-02 -4.50524939e-02 -4.56791560e-02
-4.63099116e-02 -4.69448328e-02 -4.75839429e-02 -4.82272018e-02
-4.88744894e-02 -4.95255859e-02 -5.01801486e-02 -5.08376868e-02
-5.14975328e-02 -5.21588096e-02 -5.28203961e-02 -5.34808895e-02
-5.41385662e-02 -5.47913415e-02 -5.54367304e-02 -5.60718114e-02
-5.66931954e-02 -5.72970031e-02 -5.78788544e-02 -5.84338742e-02
-5.89567177e-02 -5.94416198e-02 -5.98824719e-02 -6.02729281e-02
-6.06065405e-02 -6.08769227e-02 -6.10779370e-02 -6.12038967e-02
-6.12497745e-02 -6.12114044e-02 -6.10856631e-02 -6.08706184e-02
-6.05656314e-02 -6.01714045e-02 -5.96899708e-02 -5.91246238e-02
-5.84797934e-02 -5.77608768e-02 -5.69740383e-02 -5.61259895e-02
-5.52237667e-02 -5.42745173e-02 -5.32853062e-02 -5.22629493e-02
-5.12138794e-02 -5.01440463e-02 -4.90588484e-02 -4.79630957e-02
-4.68609975e-02 -4.57561720e-02 -4.46516719e-02 -4.35500218e-02
-4.24532636e-02 -4.13630054e-02 -4.02804728e-02 -3.92065584e-02
-3.81418696e-02 -3.70867729e-02 -3.60414343e-02 -3.50058550e-02
-3.39799031e-02 -3.29633408e-02 -3.19558478e-02 -3.09570407e-02
-2.99664893e-02 -2.89837293e-02 -2.80082730e-02 -2.70396170e-02
-2.60772485e-02 -2.51206488e-02 -2.41692963e-02 -2.32226673e-02
-2.22802358e-02 -2.13414729e-02 -2.04058440e-02 -1.94728065e-02
-1.85418060e-02 -1.76122723e-02 -1.66836146e-02 -1.57552165e-02
-1.48264311e-02 -1.38965753e-02 -1.29649248e-02 -1.20307095e-02
-1.10931089e-02 -1.01512497e-02 -9.20420436e-03 -8.25099206e-03
-7.29058305e-03 -6.32190696e-03 -5.34386667e-03 -4.35535891e-03
-3.35530345e-03 -2.34268272e-03 -1.31659394e-03 -2.76316030e-04
7.78606801e-04 1.84826278e-03 2.93225070e-03 4.02953840e-03
5.13830359e-03 6.25576126e-03 7.37798564e-03 8.49973823e-03
9.61431841e-03 1.07134573e-02 1.17872790e-02 1.28243554e-02
1.38118771e-02 1.47359595e-02 1.55820872e-02 1.63356868e-02
1.69827971e-02 1.75107850e-02 1.79090427e-02 1.81695937e-02
1.82875412e-02 1.82613093e-02 1.80926521e-02 1.77864383e-02
1.73502442e-02 1.67938093e-02 1.61284186e-02 1.53662752e-02
1.45199155e-02 1.36017061e-02 1.26234430e-02 1.15960613e-02
1.05294486e-02 9.43234930e-03 8.31234266e-03 7.17587684e-03
6.02834095e-03 4.87416102e-03 3.71690803e-03 2.55940890e-03
1.40385449e-03 2.51900350e-04 -8.95241961e-04 -2.03672415e-03
-3.17199109e-03 -4.30072098e-03 -5.42277498e-03 -6.53815527e-03
-7.64697057e-03 -8.74940813e-03 -9.84571107e-03 -1.09361604e-02
-1.20210609e-02 -1.31007297e-02 -1.41754884e-02 -1.52456560e-02
-1.63115445e-02 -1.73734555e-02 -1.84316778e-02 -1.94864857e-02
-2.05381383e-02 -2.15868790e-02 -2.26329355e-02 -2.36765202e-02
-2.47178303e-02 -2.57570488e-02 -2.67943447e-02 -2.78298745e-02
-2.88637819e-02 -2.98961997e-02 -3.09272498e-02 -3.19570441e-02
-3.29856854e-02 -3.40132683e-02 -3.50398790e-02 -3.60655970e-02
-3.70904949e-02 -3.81146392e-02 -3.91380909e-02 -4.01609058e-02
-4.11831350e-02 -4.22048254e-02 -4.32260199e-02 -4.42467576e-02]
[ 3.77991022e-02 3.84928484e-02 3.91870424e-02 3.98817196e-02
4.05769185e-02 4.12726809e-02 4.19690522e-02 4.26660820e-02
4.33638241e-02 4.40623372e-02 4.47616850e-02 4.54619368e-02
4.61631683e-02 4.68654613e-02 4.75689052e-02 4.82735968e-02
4.89796413e-02 4.96871531e-02 5.03962561e-02 5.11070843e-02
5.18197831e-02 5.25345095e-02 5.32514326e-02 5.39707350e-02
5.46926125e-02 5.54172750e-02 5.61449468e-02 5.68758665e-02
5.76102869e-02 5.83484742e-02 5.90907073e-02 5.98372756e-02
6.05884766e-02 6.13446122e-02 6.21059838e-02 6.28728857e-02
6.36455965e-02 6.44243680e-02 6.52094113e-02 6.60008794e-02
6.67988451e-02 6.76032748e-02 6.84139960e-02 6.92306587e-02
7.00526894e-02 7.08792382e-02 7.17091170e-02 7.25407313e-02
7.33720041e-02 7.42002954e-02 7.50223208e-02 7.58340711e-02
7.66307434e-02 7.74066890e-02 7.81553900e-02 7.88694766e-02
7.95407972e-02 8.01605530e-02 8.07195057e-02 8.12082617e-02
8.16176272e-02 8.19390188e-02 8.21649049e-02 8.22892408e-02
8.23078559e-02 8.22187518e-02 8.20222722e-02 8.17211247e-02
8.13202459e-02 8.08265241e-02 8.02484093e-02 7.95954535e-02
7.88778255e-02 7.81058455e-02 7.72895743e-02 7.64384796e-02
7.55611925e-02 7.46653523e-02 7.37575329e-02 7.28432358e-02
-4.88434618e-03 -5.67960488e-03 -6.47612384e-03 -7.27377410e-03
-8.07244138e-03 -8.87202531e-03 -9.67243866e-03 -1.04736067e-02
-1.12754666e-02 -1.20779670e-02 -1.28810678e-02 -1.36847400e-02
-1.44889655e-02 -1.52937377e-02 -1.60990616e-02 -1.69049546e-02
-1.77114475e-02 -1.85185852e-02 -1.93264287e-02 -2.01350563e-02
-2.09445659e-02 -2.17550773e-02 -2.25667350e-02 -2.33797114e-02
-2.41942103e-02 -2.50104708e-02 -2.58287716e-02 -2.66494361e-02
-2.74728368e-02 -2.82994011e-02 -2.91296160e-02 -2.99640337e-02
-3.08032754e-02 -3.16480356e-02 -3.24990834e-02 -3.33572627e-02
-3.42234884e-02 -3.50987389e-02 -3.59840427e-02 -3.68804583e-02
-3.77890456e-02 -3.87108280e-02 -3.96467434e-02 -4.05975851e-02
-4.15639324e-02 -4.25460725e-02 -4.35439199e-02 -4.45569364e-02
-4.55840621e-02 -4.66236645e-02 -4.76735180e-02 -4.87308195e-02
-4.97922491e-02 -5.08540747e-02 -5.19122976e-02 -5.29628285e-02
-5.40016770e-02 -5.50251382e-02 -5.60299573e-02 -5.70134570e-02
-5.79736181e-02 -5.89091108e-02 -5.98192788e-02 -6.07040848e-02
-6.15640282e-02 -6.24000462e-02 -6.32134102e-02 -6.40056245e-02
-6.47783356e-02 -6.55332541e-02 -6.62720921e-02 -6.69965147e-02
-6.77081052e-02 -6.84083428e-02 -6.90985887e-02 -6.97800805e-02
-7.04539324e-02 -7.11211386e-02 -7.17825805e-02 -7.24390343e-02
-7.30911806e-02 -7.37396134e-02 -7.43848496e-02 -7.50273372e-02
-7.56674640e-02 -7.63055646e-02 -7.69419276e-02 -7.75768012e-02
-7.82103989e-02 -7.88429039e-02 -7.94744735e-02 -8.01052426e-02
-8.07353269e-02 -8.13648255e-02 -8.19938231e-02 -8.26223926e-02
-8.32505961e-02 -8.38784870e-02 -8.45061109e-02 -8.51335069e-02
-8.57607083e-02 -8.63877439e-02 -8.70146381e-02 -8.76414120e-02
-8.82680834e-02 -8.88946678e-02 -8.95211783e-02 -9.01476262e-02
-9.07740210e-02 -9.14003711e-02 -9.20266834e-02 -9.26529640e-02
-9.32792180e-02 -9.39054498e-02 -9.45316632e-02 -9.51578614e-02
-9.57840470e-02 -9.64102224e-02 -9.70363895e-02 -9.76625501e-02]]
高斯混合回归在制造业的应用场景
文章来源:https://www.toymoban.com/news/detail-822232.html
文章来源地址https://www.toymoban.com/news/detail-822232.html
到了这里,关于【机器学习】聚类算法(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!