python3 高斯混合模型GMM

2021-08-13 19:20:00 字數 2868 閱讀 6002

預備知識:

em演算法原理

gmm演算法原理

本文分為一元高斯分布的em演算法以及多元高斯分布的em演算法,分別採用兩本書上的資料《統計學習方法》和《機器學習》。

python未完成,可以看r實現的。 r || 高斯混合模型gmm

多元高斯混合模型採用的是《機器學習》中的西瓜資料集。

多元高斯分布中的密度值python中沒有直接函式,需要自己編寫

import numpy as np

# 高斯分布的概率密度函式

defdnorm

(x,u,sigma2):

""" x:樣本

u:均值

sigma2:方差或協差陣

"""ifnot isinstance(sigma2,np.matrix):

sigma2 = np.mat(sigma2)

ifnot isinstance(x,np.matrix):

x=np.mat(x)

n = np.shape(x)[1]

expon = float(-0.5 * (x-u) * sigma2.i * (x-u).t)

#python中一維矩陣預設為行向量,所以和書上公式有差異

divby = np.sqrt(pow(2*np.pi,n)) * pow(np.linalg.det(sigma2),0.5)

return pow(np.e,expon) / divby

接下來可以直接編寫聚類的函式。

def

gausscluster

(data,k,a,u,sigma2):

""" #data:資料集,向量或資料框

#k:聚類的個數,或高斯分布的個數

#a0:高斯分布的先驗概率,選擇各個高斯分布的概率,向量

#u0:高斯分布的初始均值

#sigma2:一元高斯分布即為方差,多元即為協方差,sigma為標準差,

"""ifnot isinstance(data,np.matrix):

data = np.mat(data)

n = np.shape(data)[0]

col = np.shape(data)[1]

covlist = [sigma2 for x in range(k)]

count = 0

while

true:

#u0 = u

p = np.zeros([n,k])

for i in range(n):

for j in range(k):

p[i,j] = dnorm(data[i,],u[j,],covlist[j])

aarray = np.tile(a,(n,1))

r = (p * aarray) / np.tile(np.sum(p * aarray,axis = 1),(3,1)).t #p * aarray 兩個array相乘,為對應元素相乘

u = np.array(r.t * data) / np.tile(np.sum(r,axis = 0),(2,1)).t

for j in range(k):

sigma = np.zeros([col,col])

for i in range(n):

sigma += r[i,j] * (data[i,] - u[j,]).t * (data[i,] - u[j,])

covlist[j] = sigma/sum(r[:,j])

a = np.sum(r,axis = 0) / n

count += 1

if count == 100:

break

cluster = np.vstack((np.array(range(n)),np.argmax(r,axis = 1))).t

return u,covlist,a,clusterv('watermelon.csv')

data = as.matrix(wamellondata[,2:3])

a = c(1/3,1/3,1/3)

u = rbind(data[6,],data[22,],data[27,])

cov0

list=mulgausscluster(data,k=3,a,u,cov0)

cluster = list$cluster

下一步,設定初始值,進行函式呼叫

data = np.loadtxt(open("watermelon.csv","rb"),delimiter=",",skiprows = 0)

a=np.array([1/3,1/3,1/3])

u = np.vstack((data[5,],data[21,],data[26,]))

sigma2 = np.array([[0.1,0],[0,0.1]])

u,covlist,a,cluster = gausscluster(data,k,a,u,sigma2)

結果:

參考**:

r || 高斯混合模型gmm

r實現一維高斯分布混合模型

python實現多維高斯分布模型

高斯混合模型

本文就高斯混合模型 gmm,gaussian mixture model 引數如何確立這個問題,詳細講解期望最大化 em,expectation maximization 演算法的實施過程。多維變數x服從高斯分布時,它的概率密度函式pdf為 x是維度為d的列向量,u是模型期望,是模型方差。在實際應用...

高斯混合模型

高斯混合模型 本文就高斯混合模型 gmm,gaussian mixture model 引數如何確立這個問題,詳細講解期望最大化 em,expectation maximization 演算法的實施過程。多維變數x服從高斯分布時,它的概率密度函式pdf為 x是維度為d的列向量,u是模型期望,是模型方...

高斯混合模型

本文就高斯混合模型 gmm,gaussian mixture model 引數如何確立這個問題,詳細講解期望最大化 em,expectation maximization 演算法的實施過程。多維變數x服從高斯分布時,它的概率密度函式pdf為 x是維度為d的列向量,u是模型期望,是模型方差。在實際應用...