聚類算法是一種無監(jiān)督的機(jī)器學(xué)習(xí)方法,它可以將數(shù)據(jù)集中的對(duì)象分成若干個(gè)組,使得同一組內(nèi)的對(duì)象相似度高,而不同組內(nèi)的對(duì)象相似度低。聚類算法有很多種,例如K-均值,層次聚類,密度聚類,譜聚類等。聚類算法可以應(yīng)用于很多領(lǐng)域,例如數(shù)據(jù)挖掘,圖像分割,社交網(wǎng)絡(luò)分析,市場(chǎng)細(xì)分等。
一、問題定義
聚類問題是指給定一個(gè)數(shù)據(jù)集,如何將其中的對(duì)象分成若干個(gè)組,使得同一組內(nèi)的對(duì)象相似度高,而不同組內(nèi)的對(duì)象相似度低。聚類問題是一種無監(jiān)督的機(jī)器學(xué)習(xí)方法,它不需要事先知道對(duì)象的類別或標(biāo)簽,而是根據(jù)對(duì)象的屬性或特征來劃分簇。聚類問題的目的是發(fā)現(xiàn)數(shù)據(jù)的內(nèi)在結(jié)構(gòu)和模式,以及數(shù)據(jù)之間的關(guān)系和差異。
簇的定義是聚類算法的核心,不同的聚類算法對(duì)簇的定義有不同的側(cè)重點(diǎn)。一般來說,簇是指數(shù)據(jù)集中的一組對(duì)象,這些對(duì)象之間的相似度高,而與其他對(duì)象的相似度低。相似度的度量可以有多種方式,例如歐氏距離,余弦相似度,概率分布,密度,譜相似度等。
(根據(jù)簇的定義不同進(jìn)行劃分)常見聚類算法(連通性聚類,基于質(zhì)心的聚類,基于概率分布的聚類,基于密度的聚類,基于圖的聚類):
二、層次聚類
層次聚類是一種連通性聚類算法,它可以將數(shù)據(jù)對(duì)象分成不同層次的簇,從而形成一個(gè)樹狀圖。層次聚類有兩種類型,分別是凝聚式和分裂式。凝聚式層次聚類是從下而上的合并小簇,直到達(dá)到指定的簇個(gè)數(shù)或停止條件。分裂式層次聚類是從上而下的劃分大簇,直到達(dá)到指定的簇個(gè)數(shù)或停止條件。層次聚類的優(yōu)點(diǎn)是不需要預(yù)先指定簇的個(gè)數(shù),可以得到不同層次的簇劃分,也可以通過樹狀圖來直觀地展示數(shù)據(jù)對(duì)象之間的相似度。層次聚類的缺點(diǎn)是計(jì)算復(fù)雜度高,對(duì)噪聲和異常點(diǎn)敏感,一旦合并或劃分就不能撤銷。
層次聚類算法方案
三、基于質(zhì)心的算法
四、基于概率分布的算法
4.1 高斯混合模型
高斯混合模型(Gaussian Mixture model)是一種基于概率分布的聚類算法,它假設(shè)數(shù)據(jù)集中的對(duì)象是由若干個(gè)高斯分布生成的,然后通過最大化似然函數(shù)或最小化信息準(zhǔn)則來估計(jì)分布的參數(shù),從而得到聚類結(jié)果。高斯混合模型的優(yōu)點(diǎn)是可以利用多種分布來擬合數(shù)據(jù),可以得到軟聚類結(jié)果,可以處理不同形狀和大小的簇,缺點(diǎn)是需要事先給定聚類的個(gè)數(shù),對(duì)初始參數(shù)的選擇敏感,計(jì)算復(fù)雜度高,可能陷入局部最優(yōu)解。
Gaussian Mixture model的概率密度函數(shù)定義
對(duì)數(shù)據(jù)進(jìn)行高斯混合模型(GMM)的擬合 得到的GMM參數(shù)列表說明
4.2 EM算法
EM算法是一種迭代的參數(shù)估計(jì)方法,它可以處理含有隱變量的概率模型。EM算法的基本思想是:在給定觀測(cè)數(shù)據(jù)和當(dāng)前參數(shù)的情況下,計(jì)算隱變量的期望(E步);然后在給定觀測(cè)數(shù)據(jù)和隱變量的期望的情況下,最大化參數(shù)的似然函數(shù)(M步)。EM算法可以保證每次迭代后,參數(shù)的似然函數(shù)不會(huì)減小,最終收斂到局部最大值。
EM算法的應(yīng)用場(chǎng)景
4.3 高斯混合回歸 GMR
示例代碼:高斯混合模型 (GMM) 和高斯混合回歸 (GMR) 完全在 numpy 上實(shí)現(xiàn)
Python 實(shí)現(xiàn)高斯混合回歸 (GMR) 和高斯混合模型 (GMM) 算法,附帶示例和數(shù)據(jù)文件。GMM 是一種軟聚類算法,它將數(shù)據(jù)視為具有未知參數(shù)的有限高斯分布。當(dāng)前方法使用期望最大化 (EM) 算法來查找高斯?fàn)顟B(tài)參數(shù)。EM 是一種迭代算法,它收斂到真實(shí)的高斯參數(shù),并通過對(duì)數(shù)似然閾值或迭代次數(shù)限制停止。為了初始化高斯參數(shù),使用了 k 均值聚類算法。在擬合 GMM 后,該模型用于擬合 GMR 以通過時(shí)間輸入檢索輸出特征。
EM_init.py 實(shí)現(xiàn) K-均值聚類算法和高斯混合模型的初始化
# 導(dǎo)入 numpy 庫(kù),用于進(jìn)行矩陣運(yùn)算
import numpy as np
# 定義一個(gè)函數(shù),用于實(shí)現(xiàn) K-均值聚類算法
# 輸入?yún)?shù)為 X: 數(shù)據(jù)矩陣,每一行是一個(gè)樣本,每一列是一個(gè)特征
# K: 聚類的個(gè)數(shù)
# maxIters: 最大迭代次數(shù)
# 輸出參數(shù)為 centroids: 聚類中心的矩陣,每一行是一個(gè)中心,每一列是一個(gè)特征
# C: 數(shù)據(jù)的類別標(biāo)簽,是一個(gè)一維數(shù)組,每個(gè)元素表示對(duì)應(yīng)樣本的類別
def kMeans(X, K, maxIters = 30):
# 隨機(jī)從 X 中選擇 K 個(gè)樣本作為初始的聚類中心
centroids = X[np.random.choice(np.arange(len(X)), K), :]
# 進(jìn)行 maxIters 次迭代
for i in range(maxIters):
# 計(jì)算每個(gè)樣本到每個(gè)聚類中心的距離的平方,使用 np.dot 函數(shù)進(jìn)行矩陣乘法
# 然后使用 np.argmin 函數(shù)找到最小距離的索引,即樣本所屬的類別
# 最后將結(jié)果存儲(chǔ)在一個(gè)一維數(shù)組 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])
# 根據(jù) C 的值,重新計(jì)算每個(gè)類別的樣本的均值,作為新的聚類中心
centroids = [X[C == k].mean(axis = 0) for k in range(K)]
# 返回聚類中心和類別標(biāo)簽
return np.array(centroids) , C
# 定義一個(gè)函數(shù),用于實(shí)現(xiàn)高斯混合模型的初始化
# 輸入?yún)?shù)為 Data: 數(shù)據(jù)矩陣,每一行是一個(gè)特征,每一列是一個(gè)樣本
# nbStates: 高斯分量的個(gè)數(shù)
# 輸出參數(shù)為 Priors: 高斯分量的先驗(yàn)概率,是一個(gè)一維數(shù)組,每個(gè)元素表示對(duì)應(yīng)分量的概率
# Mu: 高斯分量的均值矩陣,每一行是一個(gè)特征,每一列是一個(gè)分量
# Sigma: 高斯分量的協(xié)方差矩陣,是一個(gè)三維數(shù)組,每個(gè)二維矩陣表示一個(gè)分量的協(xié)方差
def EM_init(Data, nbStates):
# 獲取數(shù)據(jù)的維度和個(gè)數(shù)
nbVar, nbData = np.shape(Data)
# 創(chuàng)建一個(gè)空的數(shù)組,用于存儲(chǔ)高斯分量的先驗(yàn)概率
Priors = np.ndarray(shape = (1, nbStates))
# 創(chuàng)建一個(gè)空的數(shù)組,用于存儲(chǔ)高斯分量的協(xié)方差矩陣
Sigma = np.ndarray(shape = (nbVar, nbVar, nbStates))
# 調(diào)用 kMeans 函數(shù),對(duì)數(shù)據(jù)進(jìn)行聚類,得到聚類中心和類別標(biāo)簽
Centers, Data_id = kMeans(np.transpose(Data), nbStates)
# 將聚類中心轉(zhuǎn)置,作為高斯分量的均值矩陣
Mu = np.transpose(Centers)
# 對(duì)于每個(gè)高斯分量,進(jìn)行以下操作
for i in range (0,nbStates):
# 找到屬于該分量的樣本的索引
idtmp = np.nonzero(Data_id==i)
# 將索引轉(zhuǎn)換為列表,并調(diào)整形狀
idtmp = list(idtmp)
idtmp = np.reshape(idtmp,(np.size(idtmp)))
# 計(jì)算該分量的先驗(yàn)概率,等于該分量的樣本個(gè)數(shù)除以總樣本個(gè)數(shù)
Priors[0,i] = np.size(idtmp)
# 將該分量的樣本拼接起來,作為一個(gè)新的矩陣
a = np.concatenate((Data[:, idtmp],Data[:, idtmp]), axis = 1)
# 計(jì)算該矩陣的協(xié)方差,作為該分量的協(xié)方差矩陣
Sigma[:,:,i] = np.cov(a)
# 為了防止協(xié)方差矩陣的奇異性,給對(duì)角線元素加上一個(gè)很小的數(shù)
Sigma[:,:,i] = Sigma[:,:,i] + 0.00001 * np.diag(np.diag(np.ones((nbVar,nbVar))))
# 將先驗(yàn)概率歸一化,使其和為 1
Priors = Priors / nbData
# 返回先驗(yàn)概率,均值矩陣和協(xié)方差矩陣
????return?(Priors,?Mu,?Sigma)
gaussPDF.py??計(jì)算高斯分布的概率密度函數(shù)
# 導(dǎo)入 numpy 庫(kù),用于進(jìn)行矩陣運(yùn)算
import numpy as np
# 導(dǎo)入 math 庫(kù),用于進(jìn)行數(shù)學(xué)運(yùn)算
import math
# 導(dǎo)入 sys 庫(kù),用于獲取系統(tǒng)信息
import sys
# 定義一個(gè)函數(shù),用于計(jì)算高斯分布的概率密度函數(shù)
# 輸入?yún)?shù)為 Data: 數(shù)據(jù)矩陣,每一行是一個(gè)特征,每一列是一個(gè)樣本
# Mu: 高斯分布的均值向量,是一個(gè)一維數(shù)組
# Sigma: 高斯分布的協(xié)方差矩陣,是一個(gè)二維數(shù)組
# 輸出參數(shù)為 prob: 高斯分布的概率密度值,是一個(gè)一維數(shù)組,每個(gè)元素表示對(duì)應(yīng)樣本的概率
def gaussPDF(Data, Mu, Sigma):
# 獲取系統(tǒng)的最小浮點(diǎn)數(shù),用于防止除零錯(cuò)誤
realmin = sys.float_info[3]
# 獲取數(shù)據(jù)的維度和個(gè)數(shù)
nbVar, nbData = np.shape(Data)
# 將數(shù)據(jù)矩陣轉(zhuǎn)置,然后減去均值向量,得到一個(gè)新的矩陣
Data = np.transpose(Data) - np.tile(np.transpose(Mu), (nbData, 1))
# 計(jì)算新矩陣與協(xié)方差矩陣的逆的乘積,再與新矩陣相乘,得到一個(gè)一維數(shù)組
prob = np.sum(np.dot(Data, np.linalg.inv(Sigma))*Data, 1)
# 對(duì)數(shù)組中的每個(gè)元素,進(jìn)行指數(shù)運(yùn)算,然后除以一個(gè)常數(shù),得到最終的概率密度值
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 實(shí)現(xiàn)高斯混合模型的參數(shù)估計(jì)
# 從 gaussPDF.py 文件中導(dǎo)入 gaussPDF 函數(shù),用于后續(xù)的計(jì)算
from gaussPDF import *
# 導(dǎo)入 numpy 庫(kù),用于進(jìn)行矩陣運(yùn)算
import numpy as np
# 導(dǎo)入 sys 庫(kù),用于獲取系統(tǒng)信息
import sys
# 定義一個(gè)函數(shù),用于實(shí)現(xiàn)高斯混合模型的參數(shù)估計(jì)
# 輸入?yún)?shù)為 Data: 數(shù)據(jù)矩陣,每一行是一個(gè)特征,每一列是一個(gè)樣本
# Priors0: 高斯分量的初始先驗(yàn)概率,是一個(gè)一維數(shù)組,每個(gè)元素表示對(duì)應(yīng)分量的概率
# Mu0: 高斯分量的初始均值矩陣,每一行是一個(gè)特征,每一列是一個(gè)分量
# Sigma0: 高斯分量的初始協(xié)方差矩陣,是一個(gè)三維數(shù)組,每個(gè)二維矩陣表示一個(gè)分量的協(xié)方差
# 輸出參數(shù)為 Priors: 高斯分量的最終先驗(yàn)概率,是一個(gè)一維數(shù)組,每個(gè)元素表示對(duì)應(yīng)分量的概率
# Mu: 高斯分量的最終均值矩陣,每一行是一個(gè)特征,每一列是一個(gè)分量
# Sigma: 高斯分量的最終協(xié)方差矩陣,是一個(gè)三維數(shù)組,每個(gè)二維矩陣表示一個(gè)分量的協(xié)方差
# Pix: 后驗(yàn)概率矩陣,每一行表示一個(gè)分量,每一列表示一個(gè)樣本,每個(gè)元素表示對(duì)應(yīng)樣本屬于對(duì)應(yīng)分量的概率
def EM(Data, Priors0, Mu0, Sigma0):
# 獲取系統(tǒng)的最大浮點(diǎn)數(shù),用于初始化對(duì)數(shù)似然值
realmax = sys.float_info[0]
# 獲取系統(tǒng)的最小浮點(diǎn)數(shù),用于防止除零錯(cuò)誤
realmin = sys.float_info[3]
# 設(shè)置對(duì)數(shù)似然值的收斂閾值,當(dāng)對(duì)數(shù)似然值的變化小于該值時(shí),停止迭代
loglik_threshold = 1e-10
# 獲取數(shù)據(jù)的維度和個(gè)數(shù)
nbVar, nbData = np.shape(Data)
# 獲取高斯分量的個(gè)數(shù)
nbStates = np.size(Priors0)
# 初始化對(duì)數(shù)似然值為一個(gè)很小的負(fù)數(shù)
loglik_old = -realmax
# 初始化迭代次數(shù)為 0
nbStep = 0
# 將初始參數(shù)賦值給當(dāng)前參數(shù)
Mu = Mu0
Sigma = Sigma0
Priors = Priors0
# 創(chuàng)建一個(gè)空的數(shù)組,用于存儲(chǔ)后驗(yàn)概率矩陣
Pix = np.ndarray(shape = (nbStates, nbData))
# 創(chuàng)建一個(gè)空的數(shù)組,用于存儲(chǔ)高斯分布的概率密度矩陣
Pxi = np.ndarray(shape = (nbData, nbStates))
# 進(jìn)入一個(gè)無限循環(huán),直到滿足收斂條件或達(dá)到最大迭代次數(shù)
while 1:
# 對(duì)于每個(gè)高斯分量,進(jìn)行以下操作
for i in range (0,nbStates):
# 調(diào)用 gaussPDF 函數(shù),計(jì)算每個(gè)樣本在該分量下的概率密度值,存儲(chǔ)在 Pxi 矩陣的第 i 列
Pxi[:,i] = gaussPDF(Data,Mu[:,i],Sigma[:,:,i])
# 將先驗(yàn)概率矩陣復(fù)制 nbData 次,得到一個(gè)新的矩陣,然后與 Pxi 矩陣相乘,得到一個(gè)臨時(shí)矩陣
Pix_tmp = np.multiply(np.tile(Priors, (nbData, 1)),Pxi)
# 將臨時(shí)矩陣的每一行求和,得到一個(gè)一維數(shù)組,然后將其復(fù)制 nbStates 次,得到一個(gè)新的矩陣
# 將臨時(shí)矩陣除以新的矩陣,得到后驗(yàn)概率矩陣 Pix
Pix = np.divide(Pix_tmp,np.tile(np.reshape(np.sum(Pix_tmp,1), (nbData, 1)), (1, nbStates)))
# 將后驗(yàn)概率矩陣的每一列求和,得到一個(gè)一維數(shù)組,表示每個(gè)分量的有效樣本個(gè)數(shù)
E = np.sum(Pix, 0)
# 將先驗(yàn)概率矩陣調(diào)整為一維數(shù)組
Priors = np.reshape(Priors, (nbStates))
# 對(duì)于每個(gè)高斯分量,進(jìn)行以下操作
for i in range (0,nbStates):
# 更新該分量的先驗(yàn)概率,等于該分量的有效樣本個(gè)數(shù)除以總樣本個(gè)數(shù)
Priors[i] = E[i]/nbData
# 更新該分量的均值向量,等于數(shù)據(jù)矩陣與后驗(yàn)概率矩陣的第 i 列的乘積,再除以該分量的有效樣本個(gè)數(shù)
Mu[:,i] = np.dot(Data,Pix[:,i])/E[i]
# 將數(shù)據(jù)矩陣減去該分量的均值向量,得到一個(gè)新的矩陣
Data_tmp1 = Data - np.tile(np.reshape(Mu[:,i], (nbVar, 1)), (1,nbData))
# 將后驗(yàn)概率矩陣的第 i 列轉(zhuǎn)置,然后調(diào)整為一維數(shù)組
a = np.transpose(Pix[:, i])
# 將該數(shù)組復(fù)制 nbVar 次,得到一個(gè)新的矩陣
b = np.reshape(a, (1, nbData))
c = np.tile(b, (nbVar, 1))
# 將新矩陣與新數(shù)據(jù)矩陣相乘,得到一個(gè)臨時(shí)矩陣
d = c*Data_tmp1
# 將新數(shù)據(jù)矩陣轉(zhuǎn)置,然后與臨時(shí)矩陣相乘,得到該分量的協(xié)方差矩陣
e = np.transpose(Data_tmp1)
f = np.dot(d,e)
Sigma[:,:,i] = f/E[i]
# 為了防止協(xié)方差矩陣的奇異性,給對(duì)角線元素加上一個(gè)很小的數(shù)
Sigma[:,:,i] = Sigma[:,:,i] + 0.00001 * np.diag(np.diag(np.ones((nbVar,nbVar))))
# 對(duì)于每個(gè)高斯分量,進(jìn)行以下操作
for i in range (0,nbStates):
# 調(diào)用 gaussPDF 函數(shù),計(jì)算每個(gè)樣本在該分量下的概率密度值,存儲(chǔ)在 Pxi 矩陣的第 i 列
Pxi[:,i] = gaussPDF(Data,Mu[:,i],Sigma[:,:,i])
# 將 Pxi 矩陣與先驗(yàn)概率矩陣的轉(zhuǎn)置相乘,得到一個(gè)一維數(shù)組,表示每個(gè)樣本的總概率
F = np.dot(Pxi,np.transpose(Priors))
# 找到總概率小于最小浮點(diǎn)數(shù)的索引
indexes = np.nonzero(F<realmin)
# 將索引轉(zhuǎn)換為列表,并調(diào)整形狀
indexes = list(indexes)
indexes = np.reshape(indexes,np.size(indexes))
????????#?將總概率?F?中小于系統(tǒng)最小浮點(diǎn)數(shù)的元素替換為系統(tǒng)最小浮點(diǎn)數(shù),防止對(duì)數(shù)運(yùn)算出錯(cuò)
F[indexes] = realmin
# 將 F 調(diào)整為一個(gè)二維數(shù)組,每一行表示一個(gè)樣本,每一列表示一個(gè)分量
F = np.reshape(F, (nbData, 1))
# 計(jì)算 F 的對(duì)數(shù),然后求平均,得到當(dāng)前的對(duì)數(shù)似然值
loglik = np.mean(np.log10(F), 0)
# 如果當(dāng)前的對(duì)數(shù)似然值與上一次的對(duì)數(shù)似然值的比值與 1 的絕對(duì)差小于收斂閾值,說明已經(jīng)達(dá)到最優(yōu)解,退出循環(huán)
if np.absolute((loglik/loglik_old)-1)<loglik_threshold:
break
# 否則,將當(dāng)前的對(duì)數(shù)似然值賦值給上一次的對(duì)數(shù)似然值,繼續(xù)迭代
loglik_old = loglik
# 迭代次數(shù)加一
nbStep = nbStep+1
# 返回最終的參數(shù)和后驗(yàn)概率矩陣
return(Priors,Mu,Sigma, Pix)
GMM_GMR.py 該類可以使用高斯混合模型(GMM)和高斯混合回歸(GMR)對(duì)數(shù)據(jù)進(jìn)行建模和預(yù)測(cè)
# 從 EM_init.py 文件中導(dǎo)入 EM_init 函數(shù),用于實(shí)現(xiàn)高斯混合模型的初始化
from EM_init import *
# 從 EM.py 文件中導(dǎo)入 EM 函數(shù),用于實(shí)現(xiàn)高斯混合模型的參數(shù)估計(jì)
from EM import *
# 從 plotGMM.py 文件中導(dǎo)入 plotGMM 函數(shù),用于繪制高斯混合模型的圖形
from plotGMM import *
# 從 GMR.py 文件中導(dǎo)入 GMR 函數(shù),用于實(shí)現(xiàn)高斯混合回歸
from GMR import *
# 從 matplotlib 庫(kù)中導(dǎo)入 pyplot 模塊,用于繪制圖形
from matplotlib import pyplot as plt
# 導(dǎo)入 numpy 庫(kù),用于進(jìn)行矩陣運(yùn)算
import numpy as np
# 定義一個(gè)類,名為 GMM_GMR
class?GMM_GMR(object):
# 定義類的初始化方法,用于設(shè)置高斯分量的個(gè)數(shù)
# 輸入?yún)?shù)為 numberOfStates: 高斯分量的個(gè)數(shù),是一個(gè)整數(shù)
def __init__(self, numberOfStates):
# 將高斯分量的個(gè)數(shù)賦值給類的屬性
self.numbefOfStates = numberOfStates
# 定義類的擬合方法,用于對(duì)數(shù)據(jù)進(jìn)行高斯混合模型的建模
# 輸入?yún)?shù)為 data: 數(shù)據(jù)矩陣,每一行是一個(gè)特征,每一列是一個(gè)樣本
def fit(self, data):
# 將數(shù)據(jù)矩陣賦值給類的屬性
self.data = data
# 調(diào)用 EM_init 函數(shù),對(duì)數(shù)據(jù)進(jìn)行聚類,得到高斯分量的初始先驗(yàn)概率,均值矩陣和協(xié)方差矩陣
Priors, Mu, Sigma = EM_init(data, self.numbefOfStates)
# 調(diào)用 EM 函數(shù),對(duì)數(shù)據(jù)進(jìn)行高斯混合模型的參數(shù)估計(jì),得到高斯分量的最終先驗(yàn)概率,均值矩陣,協(xié)方差矩陣和后驗(yàn)概率矩陣
self.Priors, self.Mu, self.Sigma, self.Pix = EM(data, Priors, Mu, Sigma)
# 定義類的預(yù)測(cè)方法,用于對(duì)輸入變量的值進(jìn)行高斯混合回歸,得到輸出變量的值和協(xié)方差
# 輸入?yún)?shù)為 inputMat: 輸入變量的值,是一個(gè)一維數(shù)組,每個(gè)元素表示一個(gè)樣本
def predict(self, inputMat):
# 獲取數(shù)據(jù)的維度和個(gè)數(shù)
nbVar, nbData = np.shape(self.data)
# 創(chuàng)建一個(gè)空的數(shù)組,用于存儲(chǔ)輸出變量的值
self.expData = np.ndarray(shape=(nbVar, np.size(inputMat)))
# 將輸入變量的值賦值給輸出變量的第一行
self.expData[0, :] = inputMat
# 調(diào)用 GMR 函數(shù),對(duì)輸入變量的值進(jìn)行高斯混合回歸,得到輸出變量的值和協(xié)方差,賦值給輸出變量的其他行和類的屬性
self.expData[1:nbVar, :], self.expSigma = GMR(self.Priors, self.Mu, self.Sigma, self.expData[0, :], 0,
np.arange(1, nbVar))
# 定義類的獲取預(yù)測(cè)矩陣的方法,用于返回輸出變量的值
# 輸出參數(shù)為 self.expData: 輸出變量的值,是一個(gè)二維數(shù)組,每一行是一個(gè)特征,每一列是一個(gè)樣本
def getPredictedMatrix(self):
return self.expData
# 定義類的繪圖方法,用于繪制數(shù)據(jù),高斯混合模型和高斯混合回歸的圖形
# 輸入?yún)?shù)為 xAxis: 橫坐標(biāo)的特征索引,是一個(gè)整數(shù),默認(rèn)為 0
# yAxis: 縱坐標(biāo)的特征索引,是一個(gè)整數(shù),默認(rèn)為 1
# plotType: 繪圖的類型,是一個(gè)字符串,可以選擇 "Data", "Clusters", "Regression",默認(rèn)為 "Clusters"
# ax: 繪圖的對(duì)象,是一個(gè) pyplot 模塊,可以使用 plt 或其他自定義的對(duì)象,默認(rèn)為 plt
# dataColor: 數(shù)據(jù)的顏色,是一個(gè)三元素的列表,表示 RGB 的值,范圍在 0 到 1 之間,默認(rèn)為 [0, 0.8, 0.7]
# clusterColor: 高斯混合模型的顏色,是一個(gè)三元素的列表,表示 RGB 的值,范圍在 0 到 1 之間,默認(rèn)為 [0, 0.8, 0]
# regressionColor: 高斯混合回歸的顏色,是一個(gè)三元素的列表,表示 RGB 的值,范圍在 0 到 1 之間,默認(rèn)為 [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]):
# 計(jì)算橫坐標(biāo)的范圍,為數(shù)據(jù)的最小值和最大值之間的區(qū)間,再擴(kuò)大 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]
# 計(jì)算縱坐標(biāo)的范圍,為數(shù)據(jù)的最小值和最大值之間的區(qū)間,再加上一定的邊距
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",則只繪制數(shù)據(jù)點(diǎn)
if plotType == "Data": # 使用 ax 對(duì)象的 plot 方法,繪制數(shù)據(jù)點(diǎn),橫坐標(biāo)為 xAxis 特征,縱坐標(biāo)為 yAxis 特征,顏色為 dataColor,形狀為圓點(diǎn)
ax.plot(self.data[xAxis,:], self.data[yAxis,:],'.', color=dataColor)
# 使用 pyplot 的 xlim 方法,設(shè)置橫坐標(biāo)的范圍
plt.xlim(xlim)
# 使用 pyplot 的 ylim 方法,設(shè)置縱坐標(biāo)的范圍
plt.ylim(ylim)
# 如果繪圖類型為 "Clusters",則繪制數(shù)據(jù)點(diǎn)和聚類的結(jié)果
elif plotType == "Clusters":
# 創(chuàng)建一個(gè)數(shù)組,表示要繪制的特征的索引,包括 xAxis 和 yAxis
rows = np.array([xAxis, yAxis])
# 創(chuàng)建一個(gè)數(shù)組,表示要繪制的分量的索引,從 0 到分量個(gè)數(shù)
cols = np.arange(0, self.numbefOfStates, 1)
# 調(diào)用 plotGMM 函數(shù),繪制高斯混合模型的圖形,輸入?yún)?shù)為均值矩陣的子矩陣,協(xié)方差矩陣的子矩陣,顏色,透明度和繪圖對(duì)象
plotGMM(self.Mu[np.ix_(rows, cols)], self.Sigma[np.ix_(rows, rows, cols)], [0, 0.8, 0], 1, ax)
# 使用 pyplot 的 xlim 方法,設(shè)置橫坐標(biāo)的范圍
plt.xlim(xlim)
# 使用 pyplot 的 ylim 方法,設(shè)置縱坐標(biāo)的范圍
plt.ylim(ylim)
# 如果繪圖類型為 "Regression",則繪制數(shù)據(jù)點(diǎn)和回歸的結(jié)果
elif plotType == "Regression":
# 創(chuàng)建一個(gè)數(shù)組,表示要繪制的特征的索引,包括 xAxis 和 yAxis
rows = np.array([xAxis, yAxis])
# 創(chuàng)建一個(gè)數(shù)組,表示要繪制的協(xié)方差矩陣的索引,為 yAxis 減一
rows2 = np.array([yAxis - 1, yAxis - 1])
# 創(chuàng)建一個(gè)數(shù)組,表示要繪制的樣本的索引,從 0 到樣本個(gè)數(shù)
cols = np.arange(0, self.expData.shape[1], 1)
# 將 cols 數(shù)組轉(zhuǎn)換為整數(shù)類型
cols = cols.astype(int)
# 調(diào)用 plotGMM 函數(shù),繪制高斯混合回歸的圖形,輸入?yún)?shù)為輸出變量的值的子矩陣,輸出變量的協(xié)方差的子矩陣,顏色,透明度和繪圖對(duì)象
plotGMM(self.expData[np.ix_(rows, cols)], self.expSigma[np.ix_(rows2, rows2, cols)], regressionColor, 2, ax)
# 使用 pyplot 的 xlim 方法,設(shè)置橫坐標(biāo)的范圍
plt.xlim(xlim)
# 使用 pyplot 的 ylim 方法,設(shè)置縱坐標(biāo)的范圍
plt.ylim(ylim)
# 如果繪圖類型不是以上三種,則打印錯(cuò)誤信息
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 文件中的數(shù)據(jù),只取前兩列,并轉(zhuǎn)置,得到一個(gè)二維數(shù)組,每一行是一個(gè)特征,每一列是一個(gè)樣本。
創(chuàng)建一個(gè) GMM_GMR 類的實(shí)例,指定高斯分量的個(gè)數(shù)為 4,然后調(diào)用 fit 方法,對(duì)數(shù)據(jù)進(jìn)行高斯混合模型的參數(shù)估計(jì)。
創(chuàng)建一個(gè)輸入變量的矩陣,從 1 到數(shù)據(jù)的第 0 行的最大值,均勻地取 100 個(gè)值,然后調(diào)用 predict 方法,對(duì)輸入變量進(jìn)行高斯混合回歸,得到輸出變量的值和協(xié)方差。
創(chuàng)建一個(gè)圖形對(duì)象,然后在其中添加四個(gè)子圖,分別顯示數(shù)據(jù)點(diǎn),聚類結(jié)果,回歸結(jié)果,以及聚類和回歸的疊加,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列。
獲取輸出變量的值,打印在控制臺(tái)中,然后顯示圖形。
?data.txt 文件包含了三列數(shù)據(jù),每一行表示一個(gè)樣本,每一列表示一個(gè)特征
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 文件中導(dǎo)入 GMM_GMR 類,用于實(shí)現(xiàn)高斯混合模型和高斯混合回歸的類定義
from GMM_GMR import GMM_GMR
# 導(dǎo)入 pyplot 模塊,用于繪制圖形
from matplotlib import pyplot as plt
# 導(dǎo)入 numpy 庫(kù),用于進(jìn)行矩陣運(yùn)算
import numpy as np
# 如果當(dāng)前文件是主程序,而不是被其他文件導(dǎo)入,則執(zhí)行以下代碼
if __name__ == "__main__":
# 從 data.txt 文件中讀取數(shù)據(jù),使用逗號(hào)作為分隔符,存儲(chǔ)在 data 矩陣中
data = np.loadtxt("data.txt", delimiter=',')
# 只取 data 矩陣的前兩列,然后轉(zhuǎn)置,得到一個(gè)二維數(shù)組,每一行是一個(gè)特征,每一列是一個(gè)樣本
data = data[:, 0:2].T
# 創(chuàng)建一個(gè) GMM_GMR 類的實(shí)例,指定高斯分量的個(gè)數(shù)為 4
gmr = GMM_GMR(4)
# 調(diào)用 fit 方法,對(duì)數(shù)據(jù)進(jìn)行高斯混合模型的參數(shù)估計(jì)
gmr.fit(data)
# 創(chuàng)建一個(gè)輸入變量的矩陣,從 1 到數(shù)據(jù)的第 0 行的最大值,均勻地取 100 個(gè)值
timeInput = np.linspace(1, np.max(data[0, :]), 100)
# 調(diào)用 predict 方法,對(duì)輸入變量進(jìn)行高斯混合回歸,得到輸出變量的值和協(xié)方差
gmr.predict(timeInput)
# 創(chuàng)建一個(gè)圖形對(duì)象
fig = plt.figure()
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 1 個(gè),存儲(chǔ)在 ax1 變量中
ax1 = fig.add_subplot(221)
# 打印 ax1 變量的類型,應(yīng)該是 AxesSubplot
print(type(ax1))
# 為 ax1 子圖設(shè)置標(biāo)題為 "Data"
plt.title("Data")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和聚類的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Data",繪圖對(duì)象為 ax1
gmr.plot(ax=ax1, plotType="Data")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 2 個(gè),存儲(chǔ)在 ax2 變量中
ax2 = fig.add_subplot(222)
# 為 ax2 子圖設(shè)置標(biāo)題為 "Gaussian States"
plt.title("Gaussian States")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和聚類的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Clusters",繪圖對(duì)象為 ax2
gmr.plot(ax=ax2, plotType="Clusters")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 3 個(gè),存儲(chǔ)在 ax3 變量中
ax3 = fig.add_subplot(223)
# 為 ax3 子圖設(shè)置標(biāo)題為 "Regression"
plt.title("Regression")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和回歸的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Regression",繪圖對(duì)象為 ax3
gmr.plot(ax=ax3, plotType="Regression")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 4 個(gè),存儲(chǔ)在 ax4 變量中
ax4 = fig.add_subplot(224)
# 為 ax4 子圖設(shè)置標(biāo)題為 "Clusters + Regression"
plt.title("Clusters + Regression")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和聚類的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Clusters",繪圖對(duì)象為 ax4
gmr.plot(ax=ax4, plotType="Clusters")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和回歸的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Regression",繪圖對(duì)象為 ax4
gmr.plot(ax=ax4, plotType="Regression")
# 調(diào)用 gmr 對(duì)象的 getPredictedMatrix 方法,獲取輸出變量的值,存儲(chǔ)在 predictedMatrix 變量中
predictedMatrix = gmr.getPredictedMatrix()
# 打印 predictedMatrix 變量,查看預(yù)測(cè)結(jié)果
print(predictedMatrix)
# 顯示圖形
????plt.show()
輸出結(jié)果:
示例2:
代碼是用來從 data2.txt 文件中讀取數(shù)據(jù),并使用 GMM_GMR 類進(jìn)行高斯混合模型和高斯混合回歸的分析和預(yù)測(cè)。
data2.txt 文件有三行數(shù)據(jù),每一行表示一個(gè)特征,每一列表示一個(gè)樣本。第 0 行是時(shí)間特征,第 1 行是位置特征,第 2 行是速度特征。
代碼首先創(chuàng)建了一個(gè) GMM_GMR 類的實(shí)例,指定高斯分量的個(gè)數(shù)為 4,然后調(diào)用 fit 方法,對(duì)數(shù)據(jù)進(jìn)行高斯混合模型的參數(shù)估計(jì)。
然后,代碼創(chuàng)建了一個(gè)輸入變量的矩陣,從 1 到數(shù)據(jù)的第 0 行的最大值,均勻地取 300 個(gè)值,然后調(diào)用 predict 方法,對(duì)輸入變量進(jìn)行高斯混合回歸,得到輸出變量的值和協(xié)方差。
接著,代碼創(chuàng)建了兩個(gè)圖形對(duì)象,分別顯示了第 1 列和第 0 列,以及第 2 列和第 1 列的關(guān)系。每個(gè)圖形對(duì)象中有四個(gè)子圖,分別顯示了數(shù)據(jù)點(diǎn),聚類結(jié)果,回歸結(jié)果,以及聚類和回歸的疊加。
最后,代碼調(diào)用 getPredictedMatrix 方法,獲取輸出變量的值,打印在控制臺(tái)中,然后顯示圖形。
data2.txt
example2.py
# 從 GMM_GMR.py 文件中導(dǎo)入 GMM_GMR 類,用于實(shí)現(xiàn)高斯混合模型和高斯混合回歸的類定義
from GMM_GMR import GMM_GMR
# 導(dǎo)入 pyplot 模塊,用于繪制圖形
from matplotlib import pyplot as plt
# 導(dǎo)入 numpy 庫(kù),用于進(jìn)行矩陣運(yùn)算
import numpy as np
# 如果當(dāng)前文件是主程序,而不是被其他文件導(dǎo)入,則執(zhí)行以下代碼
if __name__ == "__main__":
# 從 data2.txt 文件中讀取數(shù)據(jù),使用逗號(hào)作為分隔符,存儲(chǔ)在 data 矩陣中
data = np.loadtxt("data2.txt", delimiter=',')
# 創(chuàng)建一個(gè) GMM_GMR 類的實(shí)例,指定高斯分量的個(gè)數(shù)為 4
gmr = GMM_GMR(4)
# 調(diào)用 fit 方法,對(duì)數(shù)據(jù)進(jìn)行高斯混合模型的參數(shù)估計(jì)
gmr.fit(data)
# 創(chuàng)建一個(gè)輸入變量的矩陣,從 1 到數(shù)據(jù)的第 0 行的最大值,均勻地取 300 個(gè)值
timeInput = np.linspace(1, np.max(data[0, :]), 300)
# 調(diào)用 predict 方法,對(duì)輸入變量進(jìn)行高斯混合回歸,得到輸出變量的值和協(xié)方差
gmr.predict(timeInput)
# 創(chuàng)建一個(gè)圖形對(duì)象
fig = plt.figure()
# 為圖形對(duì)象設(shè)置總標(biāo)題為 "Axis 1 vs axis 0"
fig.suptitle("Axis 1 vs axis 0")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 1 個(gè),存儲(chǔ)在 ax1 變量中
ax1 = fig.add_subplot(221)
# 為 ax1 子圖設(shè)置標(biāo)題為 "Data"
plt.title("Data")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)點(diǎn),橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Data",繪圖對(duì)象為 ax1
gmr.plot(ax=ax1, plotType="Data")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 2 個(gè),存儲(chǔ)在 ax2 變量中
ax2 = fig.add_subplot(222)
# 為 ax2 子圖設(shè)置標(biāo)題為 "Gaussian States"
plt.title("Gaussian States")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和聚類的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Clusters",繪圖對(duì)象為 ax2
gmr.plot(ax=ax2, plotType="Clusters")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 3 個(gè),存儲(chǔ)在 ax3 變量中
ax3 = fig.add_subplot(223)
# 為 ax3 子圖設(shè)置標(biāo)題為 "Regression"
plt.title("Regression")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和回歸的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Regression",繪圖對(duì)象為 ax3
gmr.plot(ax=ax3, plotType="Regression")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 4 個(gè),存儲(chǔ)在 ax4 變量中
ax4 = fig.add_subplot(224)
# 為 ax4 子圖設(shè)置標(biāo)題為 "Clusters + Regression"
plt.title("Clusters + Regression")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和聚類的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Clusters",繪圖對(duì)象為 ax4
gmr.plot(ax=ax4, plotType="Clusters")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和回歸的結(jié)果,橫坐標(biāo)為第 0 列,縱坐標(biāo)為第 1 列,繪圖類型為 "Regression",繪圖對(duì)象為 ax4
gmr.plot(ax=ax4, plotType="Regression")
# 創(chuàng)建一個(gè)新的圖形對(duì)象
fig = plt.figure()
# 為圖形對(duì)象設(shè)置總標(biāo)題為 "Axis 2 vs axis 1"
fig.suptitle("Axis 2 vs axis 1")
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 1 個(gè),存儲(chǔ)在 ax1 變量中
ax1 = fig.add_subplot(221)
# 為 ax1 子圖設(shè)置標(biāo)題為 "Data"
plt.title("Data")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)點(diǎn),橫坐標(biāo)為第 1 列,縱坐標(biāo)為第 2 列,繪圖類型為 "Data",繪圖對(duì)象為 ax1
gmr.plot(ax=ax1, plotType="Data", xAxis=1, yAxis=2)
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 2 個(gè),存儲(chǔ)在 ax2 變量中
ax2 = fig.add_subplot(222)
# 為 ax2 子圖設(shè)置標(biāo)題為 "Gaussian States"
plt.title("Gaussian States")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和聚類的結(jié)果,橫坐標(biāo)為第 1 列,縱坐標(biāo)為第 2 列,繪圖類型為 "Clusters",繪圖對(duì)象為 ax2
gmr.plot(ax=ax2, plotType="Clusters", xAxis=1, yAxis=2)
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 3 個(gè),存儲(chǔ)在 ax3 變量中
ax3 = fig.add_subplot(223)
# 為 ax3 子圖設(shè)置標(biāo)題為 "Regression"
plt.title("Regression")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和回歸的結(jié)果,橫坐標(biāo)為第 1 列,縱坐標(biāo)為第 2 列,繪圖類型為 "Regression",繪圖對(duì)象為 ax3
gmr.plot(ax=ax3, plotType="Regression", xAxis=1, yAxis=2)
# 在圖形對(duì)象中添加一個(gè)子圖,位置為 2 行 2 列的第 4 個(gè),存儲(chǔ)在 ax4 變量中
ax4 = fig.add_subplot(224)
# 為 ax4 子圖設(shè)置標(biāo)題為 "Clusters + Regression"
plt.title("Clusters + Regression")
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和聚類的結(jié)果,橫坐標(biāo)為第 1 列,縱坐標(biāo)為第 2 列,繪圖類型為 "Clusters",繪圖對(duì)象為 ax4
gmr.plot(ax=ax4, plotType="Clusters", xAxis=1, yAxis=2)
# 調(diào)用 gmr 對(duì)象的 plot 方法,繪制數(shù)據(jù)和回歸的結(jié)果,橫坐標(biāo)為第 1 列,縱坐標(biāo)為第 2 列,繪圖類型為 "Regression",繪圖對(duì)象為 ax4
gmr.plot(ax=ax4, plotType="Regression", xAxis=1, yAxis=2)
# 調(diào)用 gmr 對(duì)象的 getPredictedMatrix 方法,獲取輸出變量的值,存儲(chǔ)在 predictedMatrix 變量中
predictedMatrix = gmr.getPredictedMatrix()
# 打印 predictedMatrix 變量,查看預(yù)測(cè)結(jié)果
print(predictedMatrix)
# 顯示圖形
plt.show()
輸出結(jié)果:
[[ 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]]
高斯混合回歸在制造業(yè)的應(yīng)用場(chǎng)景
文章來源:http://www.zghlxwxcb.cn/news/detail-822232.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-822232.html
到了這里,關(guān)于【機(jī)器學(xué)習(xí)】聚類算法(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!