Pyspark聚类--GaussianMixture

GaussianMixture

class pyspark.ml.clustering.GaussianMixture(featuresCol=‘features’, predictionCol=‘prediction’, k=2, probabilityCol=‘probability’, tol=0.01, maxIter=100, seed=None)

GaussianMixture 聚类。 此类执行多元高斯混合模型 (GMM) 的期望最大化。 GMM 表示独立高斯分布的复合分布,具有相关的“混合”权重,指定每个对复合的贡献。 给定一组样本点,此类将最大化 k 高斯混合的对数似然,迭代直到对数似然变化小于收敛Tol,或者直到它达到最大迭代次数。 虽然这个过程通常可以保证收敛,但不能保证找到全局最优值。

对于高维数据(具有许多特征),该算法可能表现不佳。 这是由于高维数据 (a) 使其难以聚类(基于统计/理论认证)和高斯分布的数值问题

k = Param(parent=‘undefined’, name=‘k’, doc=‘混合模型中独立高斯的数量。必须> 1。’)

probabilityCol = Param(parent=‘undefined’, name=‘probabilityCol’, doc=‘预测类条件概率的列名。注意:并非所有模型都输出经过良好校准的概率估计!这些概率应该被视为置信度,而不是精确概率 .’)

model.weights:混合中每个高斯分布的权重。这是 k 个高斯分布的多项式概率分布,其中 weights[i] 是高斯 i 的权重,权重总和为 1。

model.gaussiansDF:检索高斯分布作为 DataFrame。每行代表一个高斯分布。 DataFrame 有两列:mean(向量)和 cov(矩阵)

model.summary.logLikelihood:该模型在给定数据上的总对数似然。

**model.summary.probability **:每个训练数据点的每个集群的概率的 DataFrame。

model.summary.clusterSizes:每个聚类的大小(数据点的数量)。

01.创建数据集

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.driver.host","192.168.1.10")\
    .config("spark.ui.showConsoleProgress","false").appName("GaussianMixture")\
    .master("local[*]").getOrCreate()
from pyspark.ml.linalg import Vectors
data = [(Vectors.dense([-0.1, -0.05 ]),),
        (Vectors.dense([-0.01, -0.1]),),
        (Vectors.dense([0.9, 0.8]),),
        (Vectors.dense([0.75, 0.935]),),
        (Vectors.dense([-0.83, -0.68]),),
        (Vectors.dense([-0.91, -0.76]),)]
df = spark.createDataFrame(data, ["features"])
df.show()
df.printSchema()

​ 输出结果:

+-------------+
|     features|
+-------------+
| [-0.1,-0.05]|
| [-0.01,-0.1]|
|    [0.9,0.8]|
| [0.75,0.935]|
|[-0.83,-0.68]|
|[-0.91,-0.76]|
+-------------+

root
 |-- features: vector (nullable = true)

02.构建高斯混合聚类模型,转换原数据查看结果

from pyspark.ml.clustering import GaussianMixture
gaussianMixture = GaussianMixture(k=3,maxIter=10,tol=0.0001,seed=10)
model = gaussianMixture.fit(df)
print(model.transform(df).collect())

​ 输出结果:

[Row(features=DenseVector([-0.1, -0.05]), prediction=0, probability=DenseVector([0.9855, 0.0094, 0.0051])),  Row(features=DenseVector([-0.01, -0.1]), prediction=1, probability=DenseVector([0.0, 0.6484, 0.3516])), Row(features=DenseVector([0.9, 0.8]), prediction=1, probability=DenseVector([0.0, 0.6509, 0.3491])), Row(features=DenseVector([0.75, 0.935]), prediction=1, probability=DenseVector([0.0, 0.6672, 0.3328])), Row(features=DenseVector([-0.83, -0.68]), prediction=0, probability=DenseVector([1.0, 0.0, 0.0])), Row(features=DenseVector([-0.91, -0.76]), prediction=0, probability=DenseVector([1.0, 0.0, 0.0]))]

03.查看模型的相关属性

print(model.hasSummary)
print(model.weights)
print(model.summary.k)

​ 输出结果:

True
[0.49760344861768196, 0.32931251892752, 0.1730840324547981]
3

04.检索高斯分布作为 DataFrame

model.gaussiansDF.show()
print(model.gaussiansDF.head(6))

​ 输出结果:

+--------------------+--------------------+
|                mean|                 cov|
+--------------------+--------------------+
|[-0.6158006194417...|0.132188091748508...|
|[0.54523101952700...|0.159129291449328...|
|[0.54042985246699...|0.161430620150746...|
+--------------------+--------------------+

[Row(mean=DenseVector([-0.6158, -0.4988]), cov=DenseMatrix(2, 2, [0.1322, 0.1152, 0.1152, 0.1003], False)), Row(mean=DenseVector([0.5452, 0.5449]), cov=DenseMatrix(2, 2, [0.1591, 0.1764, 0.1764, 0.2112], False)), Row(mean=DenseVector([0.5404, 0.5369]), cov=DenseMatrix(2, 2, [0.1614, 0.1785, 0.1785, 0.2126], False))]

05.查看模型汇总摘要的相关信息

print(model.summary.clusterSizes)
print(model.summary.logLikelihood

​ 输出结果:

[3, 3, 0]
7.266248915058737

你可能感兴趣的:(ML基础,聚类,机器学习)