【机器学习】聚类算法(一)

聚类算法是一种无监督的机器学习方法,它可以将数据集中的对象分成若干个组,使得同一组内的对象相似度高,而不同组内的对象相似度低。聚类算法有很多种,例如K-均值,层次聚类,密度聚类,谱聚类等。聚类算法可以应用于很多领域,例如数据挖掘,图像分割,社交网络分析,市场细分等。

df3434c382178ad115f132ca65d6afcf.png

一、问题定义

聚类问题是指给定一个数据集,如何将其中的对象分成若干个组,使得同一组内的对象相似度高,而不同组内的对象相似度低。聚类问题是一种无监督的机器学习方法,它不需要事先知道对象的类别或标签,而是根据对象的属性或特征来划分簇。聚类问题的目的是发现数据的内在结构和模式,以及数据之间的关系和差异。

簇的定义是聚类算法的核心,不同的聚类算法对簇的定义有不同的侧重点。一般来说,簇是指数据集中的一组对象,这些对象之间的相似度高,而与其他对象的相似度低。相似度的度量可以有多种方式,例如欧氏距离,余弦相似度,概率分布,密度,谱相似度等。

(根据簇的定义不同进行划分)常见聚类算法(连通性聚类,基于质心的聚类,基于概率分布的聚类,基于密度的聚类,基于图的聚类):

26ceb329f582fb232cd351d2bd6291a1.png

二、层次聚类

层次聚类是一种连通性聚类算法,它可以将数据对象分成不同层次的簇,从而形成一个树状图。层次聚类有两种类型,分别是凝聚式和分裂式。凝聚式层次聚类是从下而上的合并小簇,直到达到指定的簇个数或停止条件。分裂式层次聚类是从上而下的划分大簇,直到达到指定的簇个数或停止条件。层次聚类的优点是不需要预先指定簇的个数,可以得到不同层次的簇划分,也可以通过树状图来直观地展示数据对象之间的相似度。层次聚类的缺点是计算复杂度高,对噪声和异常点敏感,一旦合并或划分就不能撤销。

层次聚类算法方案

f62d550898511a0cabfb3cab4c32da57.png

三、基于质心的算法

319f3bcc22020211419d388a4247004e.png

73ff7cee3a947bf7d2a9c15816ab3999.png

ed08962d8811e861fca2678efdf6d4cf.png

四、基于概率分布的算法

fbdffd3cc40bf57cb62d104a2fadba42.png

4.1 高斯混合模型

高斯混合模型(Gaussian Mixture model)是一种基于概率分布的聚类算法,它假设数据集中的对象是由若干个高斯分布生成的,然后通过最大化似然函数或最小化信息准则来估计分布的参数,从而得到聚类结果。高斯混合模型的优点是可以利用多种分布来拟合数据,可以得到软聚类结果,可以处理不同形状和大小的簇,缺点是需要事先给定聚类的个数,对初始参数的选择敏感,计算复杂度高,可能陷入局部最优解。

Gaussian Mixture model的概率密度函数定义

48276cc5e3d6836e454364fdd4d66ecb.png

对数据进行高斯混合模型(GMM)的拟合 得到的GMM参数列表说明

b652db37077253c1e6e71c624515a2e3.png

4.2 EM算法

EM算法是一种迭代的参数估计方法,它可以处理含有隐变量的概率模型。EM算法的基本思想是:在给定观测数据和当前参数的情况下,计算隐变量的期望(E步);然后在给定观测数据和隐变量的期望的情况下,最大化参数的似然函数(M步)。EM算法可以保证每次迭代后,参数的似然函数不会减小,最终收敛到局部最大值。

e12b8ab71ca6d03d2e74642f52b5f67d.png

5e1bac8db8a7bb895e9a383c18e7f6ec.png

EM算法的应用场景

f0279d68ed5e225aad14566c66ff8690.png

4.3 高斯混合回归 GMR

c77c0a867e80f808b000ec86842a2e8d.png

963e835e44ad73a0c34d3eda67750637.png

bf810734efe9bd8df93ebd44eb52d1f9.png

57ef6a9da9a2e4d9df29ec5c5a67d34b.png

示例代高斯混合模型 (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.")

039320d1c24e7e3e8e4b2b6c240e43fe.png

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()

输出结果:

1d0262488f8004156ccb27ec0d2cfca3.png

c986c4f0d534382bb8dd3537d2198ef4.png

示例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

84737b01a4b3c40f0c910add946da369.png

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]]

3501348738063e823945ddc9b83bcf69.png

2e1b1559920514f62bc0a6b9d9d7c8cc.png

高斯混合回归在制造业的应用场景

69fd11e86f5239458b16d9b88a38a3ca.png

22027e517ecbe7bd19813db46ace41ca.png

e411fbdea564005305671deb74ebfbdb.png

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-11 12:16:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-11 12:16:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-11 12:16:04       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-11 12:16:04       20 阅读

热门阅读

  1. 数据结构之红黑树

    2024-01-11 12:16:04       44 阅读
  2. 深入解析 Golang 中的自旋锁

    2024-01-11 12:16:04       40 阅读
  3. Go语言中的Select:深度解析与实战案例

    2024-01-11 12:16:04       36 阅读
  4. jQuery —— ajaxForm和ajaxSubmit的用法与区别

    2024-01-11 12:16:04       39 阅读
  5. c JPEG 中MCU 的理解

    2024-01-11 12:16:04       39 阅读
  6. 探索YOLOv5微服务:gRPC Proto设计与优化策略

    2024-01-11 12:16:04       36 阅读
  7. 排序算法之快速排序

    2024-01-11 12:16:04       46 阅读
  8. Facebook新注册账号频被封?如何预防封号?

    2024-01-11 12:16:04       35 阅读
  9. Golang 中哪些类型可以作为 map 类型的 key?

    2024-01-11 12:16:04       32 阅读
  10. 地震数据的可视化

    2024-01-11 12:16:04       34 阅读