需要源码和数据集请点赞关注收藏后评论留言私信~~~
模型聚类
模型(Model)聚类假定每个簇符合一个分布模型,通过找到这个分布模型,就可以对样本点进行分簇。
在机器学习领域,这种先假定模型符合某种概率分布(或决策函数),然后在学习过程中学习到概率分布参数(或决策函数参数)的最优值的模型,称为参数学习模型。
模型聚类主要包括概率模型和神经网络模型两大类,前者以高斯混合模型(Gaussian Mixture Models,GMM)为代表,后者以自组织映射网络(Self Organizing Map,SOM)为代表。
高斯混合模型GMM
记随机变量X服从含有未知变量τ=(μ,σ^2)的高斯分布,其概率密度为:
高斯混合模型P(├ x|θ)是多个高斯分布混合的模型:
式中,K是混合的高斯分布的总数,τ_i是第i个高斯分布的未知变量,记τ=(τ_1,τ_2,…,τ_K)。α_i是第i个高斯分布的混合系数,α_i>0,∑▒α_i=1,α_i可看作概率值,记α=(α_1,α_2,…,α_K)。记θ=(α,τ)。
将高斯混合模型用于聚类任务时,认为样本是由P(├ x|θ)产生的,产生的过程是先按概率α选择一个高斯分布f(├ x|τ_j),再由该高斯分布生成样本。
由同一高斯分布产生的样本属于同一簇,即高斯混合模型中的高斯分布与聚类的簇一一对应。
在分簇过程中,算法的任务是从训练集中学习到模型参数θ=(α,τ),在分配过程,模型计算测试样本由每个高斯分布产生的概率,取最大概率对应的高斯分布的簇作为分配的簇。
以(0,0)和(10,10)为中心,以1.2和1.8为标准差,分别生成两个簇。
本次示例中,生成的两个簇是完全间隔开的,观察模型学习到的均值和方差是非常小的,由此可见误差比较小
代码如下
-
X1, y1 = make_blobs(n_samples=
300, n_features=
2, centers=
[[0,0]], cluster_std=[
1.2])
-
X2, y2 = make_blobs(n_samples=
600, n_features=
2, centers=
[[3,3]], cluster_std=[
1.8])
-
plt.scatter(X1[:,
0], X1[:,
1], marker=
'o', color=
'r')
-
plt.scatter(X2[:,
0], X2[:,
1], marker=
'+', color=
'b')
-
plt.show()
下面是将两个簇的一部分重合的效果
这次均值和协方差都变大了很多,由此可见 高斯混合聚类对重合部分的点并不能很好的预测,分簇结果有一条明显的分界线,该分界线是两个模型计算概率值相等的地方
下面对txt文件中的点的坐标进行高斯混合聚类分析的效果如下
代码如下
-
from sklearn.mixture
import GaussianMixture
-
import numpy
as np
-
samples = np.loadtxt(
"kmeansSamples.txt")
-
gm =
GaussianMixture(n_components=
2, random_state=
0).fit(samples)
-
labels = gm.predict(samples)
-
import matplotlib.pyplot
as plt
-
plt.scatter(samples[:,
0],samples[:,
1],c=labels+
1.5,linewidths=np.power(labels+
1.5,
2))
-
plt.show()
创作不易 觉得有帮助请点赞关注收藏~~~
转载:https://blog.csdn.net/jiebaoshayebuhui/article/details/128360033