1. 程式人生 > >SparkMllib GMM聚類演算法的理解以及例子

SparkMllib GMM聚類演算法的理解以及例子

在完成sparkMllib GMM演算法例子之前需要知道幾個概念。1、高斯分佈、2、多維高斯分佈。3、高斯混合分佈。4、協方差

GMM稱為混合高斯分佈,它在單高斯分佈(又稱正太分佈,一維正太分佈)的基礎上針對多元變數發展出來的。(以下參考了百度詞條內容)

1)單高斯分佈公式:

,該公式的推導以及意義大家可以自行百度,這裡只講一下各個引數在公式中的意義:

μ是正態分佈的位置引數,描述正態分佈的集中趨勢位置。概率規律為取與μ鄰近的值的概率大,而取離μ越遠的值的概率越小。正態分佈以X=μ為對稱軸,左右完全對稱。正態分佈的期望、均數中位數、眾數相同,均等於μ。

σ描述正態分佈資料資料分佈的離散程度,σ越大,資料分佈越分散,σ越小,資料分佈越集中。也稱為是正態分佈的形狀引數,σ越大,曲線越扁平,反之,σ越小,曲線越瘦高。


2)多維單高斯分佈公式:



由上面的定義可知,多維單高斯分佈的方差其實是協方差矩陣。

3)高斯混合分佈:就是多個高斯分佈(可能是單高斯也可能是多維高斯)的組合。下面是李航老師在《統計學習方法》


由上圖公式可知,高斯混合分佈多了一個引數,該引數就是每單高斯分佈在高斯混合分佈裡面的權重。

4)協方差矩陣的含義可以參考該篇博文:http://blog.csdn.net/yangdashi888/article/details/52397990

sparkMllib GMM演算法就是根據一批給定的隨機變數,每個隨機變數肯能是一維的,也可能是多維的,然後求出高斯混合分佈中的三個引數:

    1、a權重。2、μ(如果是多維就是一個數組)3、方差(一維)/協方差矩陣(多維)

以下是sparkMllib GMM的例子。

1、資料gmm_data.txt中是二維資料,部分資料展示如下:

 2.59470454e+00 2.12298217e+00
 1.15807024e+00 -1.46498723e-01
 2.46206638e+00 6.19556894e-01
 -5.54845070e-01 -7.24700066e-01
 -3.23111426e+00 -1.42579084e+00

2、資料gmm_data1.txt中是二維資料,部分資料展示如下:

 2.59470454e+00 
 2.12298217e+00
 1.15807024e+00 
 -1.46498723e-01

案例程式碼如下:

package spark;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;

// $example on$
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.mllib.clustering.GaussianMixture;
import org.apache.spark.mllib.clustering.GaussianMixtureModel;
import org.apache.spark.mllib.linalg.Vector;
import org.apache.spark.mllib.linalg.Vectors;


public class JavaGaussianMixtureExample {

	public static void main(String[] args) {
		Logger logger = Logger.getLogger(JavaGaussianMixtureExample.class);
		Logger.getLogger("org.apache.spark").setLevel(Level.WARN);
		Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF);
		SparkConf conf = new SparkConf().setMaster("local[2]").setAppName("JavaGaussianMixtureExample");
		JavaSparkContext jsc = new JavaSparkContext(conf);

		String path = "F:/spark-2.1.0-bin-hadoop2.6/data/mllib/gmm_data1.txt";
		JavaRDD<String> data = jsc.textFile(path);
		JavaRDD<Vector> parsedData = data.map(f->{
			return Vectors.dense(Double.parseDouble(f.trim()));
		});
		
		parsedData.cache();
		/**
		 * k指定了高斯混合分佈中的高斯分佈個數。
		 */
		GaussianMixtureModel gmm = new GaussianMixture().setK(2).run(parsedData.rdd());
		for (int j = 0; j < gmm.k(); j++) {
			System.out.printf("一維混合高斯分佈得到的資料如下:\nweight=%f\nmu=%s\nsigma=\n%s\n", gmm.weights()[j], gmm.gaussians()[j].mu(),
					gmm.gaussians()[j].sigma());
		}
		
		logger.info("split line =====================================");
		String path2 = "F:/spark-2.1.0-bin-hadoop2.6/data/mllib/gmm_data.txt";
		JavaRDD<String> data2 = jsc.textFile(path2);
		JavaRDD<Vector> parsedData2 = data2.map(s -> {
			String[] sarray = s.trim().split(" ");
			double[] values = new double[sarray.length];
			for (int i = 0; i < sarray.length; i++) {
				values[i] = Double.parseDouble(sarray[i]);
			}
			return Vectors.dense(values);
		});
		parsedData2.cache();
		GaussianMixtureModel gmm2 = new GaussianMixture().setK(2).run(parsedData2.rdd());
		for (int j = 0; j < gmm2.k(); j++) {
			System.out.printf("二維混合高斯分佈得到的資料如下:\nweight=%f\nmu=%s\nsigma=\n%s\n", gmm2.weights()[j], gmm2.gaussians()[j].mu(),
					gmm2.gaussians()[j].sigma());
		}
		

		jsc.stop();
	}
}


執行結果如下:


相關推薦

SparkMllib GMM演算法理解以及例子

在完成sparkMllib GMM演算法例子之前需要知道幾個概念。1、高斯分佈、2、多維高斯分佈。3、高斯混合分佈。4、協方差 GMM稱為混合高斯分佈,它在單高斯分佈(又稱正太分佈,一維正太分佈)的基礎上針對多元變數發展出來的。(以下參考了百度詞條內容) 1)單高斯分佈公式

KMeans演算法分析以及實現

KMeans KMeans是一種無監督學習聚類方法, 目的是發現數據中資料物件之間的關係,將資料進行分組,組內的相似性越大,組間的差別越大,則聚類效果越好。 無監督學習,也就是沒有對應的標籤,只有資料記錄.通過KMeans聚類,可以將資料劃分成一個簇,進而發現數據之間的關係.

機器學習 (十二)讓你輕鬆理解K-means 演算法

前言        你還記得菜市場賣菜的嗎?書店賣書的或者是平時去超市買東西時的物品,它們是不是都根據相似性擺放在一起了呢,飲料、啤酒、零食分佈在各自區域,像這樣各級事物的相似特點或特性組織在一起的方法,在機器學習裡面即成為

吳恩達機器學習之演算法的引數選擇以及優化

對於K(k<樣本量的)均值聚類,一般引數的自定義主要有兩個,一個是聚類中心初始位置的選擇,二是K值的選擇 優化目標:每個樣本點到該點聚類中心的平方的累加 解決聚類中心的初始化問題: 隨機挑選樣本點作為聚類中心,這個過程重複50-1000次,選出J值最低的(通常K值為2-10的時候

深入理解K-Means演算法

概述 什麼是聚類分析 聚類分析是在資料中發現數據物件之間的關係,將資料進行分組,組內的相似性越大,組間的差別越大,則聚類效果越好。 不同的簇型別 聚類旨在發現有用的物件簇,在現實中我們用到很多的簇的型別,使用不同的簇型別劃分資料的結果是不同的,如下的

【無監督學習】DBSCAN演算法原理介紹,以及程式碼實現

前言:無監督學習想快一點複習完,就轉入有監督學習 聚類演算法主要包括哪些演算法?主要包括:K-m

演算法(四)、基於高斯混合分佈 GMM方法(補充閱讀)

      基於高斯混合分佈的聚類,我看了很多資料,,寫的千篇一律,一律到讓人看不明白。直到認真看了幾遍周志華寫的,每看一遍,都對 GMM 聚類有一個進一步的認識。所以,如果你想了解這一塊,別看亂七八糟的部落格了,直接去看周志華的《機器學習》 P206頁。 下面是我額外看的

——譜演算法以及Python實現

譜聚類(spectral cluster)可以視為一種改進的Kmeans的聚類演算法。常用來進行影象分割。缺點是需要指定簇的個數,難以構建合適的相似度矩陣。優點是簡單易實現。相比Kmeans而言,處理高維資料更合適。 核心思想 構建樣本點的相似度矩陣(圖

EM演算法GMM

    以下為GMM聚類程式 import pandas as pd import matplotlib.pyplot as plt import numpy as np data=pd.read_csv('Fremont.csv',index_col='Date'

spark LDA演算法例子

LDA是狄利克雷分佈演算法,一般用於海量文件主題聚類。一般每個文件都有一個隱藏的主題,LDA演算法就是找出可能性最高的幾個主題。在找出主題的同時,也就找到了文件中每個單詞在主題中的分佈概概率。可以參考http://blog.csdn.net/qq_34531825/arti

python演算法以及影象顯示結果--python學習筆記23

資料:     http://download.csdn.net/detail/qq_26948675/9683350    開啟後,點選藍色的名稱,檢視資源,就可以下載了 程式碼: #-*- coding: utf-8 -*- #使用K-Means演算法聚類消費行為特徵資

K-Means演算法以及擴充套件演算法K-Modes、K-Prototype

k-means聚類演算法是一種簡單易行,時間複雜度低的聚類演算法,特別是針對大規模的資料集。但其只能處理數值屬性限制了他的應用範圍,它的具體演算法步驟如下:1.確立最終聚類處理得到簇的個數,如果有先驗知識,如知道一個數據集為有3類,則可設k=3。如果不清楚,有一些指導性方法

機器學習-KMeans K值以及初始簇中心點的選取

src 常用 趨勢 試圖 重復執行 很大的 一個點 3.4 選擇 【轉】http://www.cnblogs.com/kemaswill/archive/2013/01/26/2877434.html 本文主要基於Anand Rajaraman和Jeffrey David

【神經網路】自編碼演算法--DEC (Deep Embedded Clustering)

1.演算法描述      最近在做AutoEncoder的一些探索,看到2016年的一篇論文,雖然不是最新的,但是思路和方法值得學習。論文原文連結 http://proceedings.mlr.press/v48/xieb16.pdf,論文有感於t-SNE演算法的t-

演算法之DBSCAN演算法之二:高維資料剪枝應用NQ-DBSCAN

一、經典DBSCAN的不足 1.由於“維度災難”問題,應用高維資料效果不佳 2.執行時間在尋找每個點的最近鄰和密度計算,複雜度是O(n2)。當d>=3時,由於BCP等數學問題出現,時間複雜度會急劇上升到Ω(n的四分之三次方)。 二、DBSCAN在高維資料的改進 目前的研究有

演算法之DBSCAN演算法之一:經典DBSCAN

DBSCAN是基於密度空間的聚類演算法,與KMeans演算法不同,它不需要確定聚類的數量,而是基於資料推測聚類的數目,它能夠針對任意形狀產生聚類。 1.epsilon-neighborhood epsoiln-neighborhood(簡稱e-nbhd)可理解為密度空間,表示半徑為e

機器學習——K-means演算法演算法

聚類 在說K-means聚類演算法之前必須要先理解聚類和分類的區別。 分類其實是從特定的資料中挖掘模式,作出判斷的過程。比如Gmail郵箱裡有垃圾郵件分類器,一開始的時候可能什麼都不過濾,在日常使用過程中,我人工對於每一封郵件點選“垃圾”或“不是垃圾”,過一段時間,Gmail就體現出

演算法(1)

一聚類演算法簡介 1.聚類和分類的區別 聚類 - 利用演算法將相似或者相近的樣本聚成一簇,這些樣本都是無標籤的,是一種無監督學習演算法。 分類 - 首先需要從有標籤樣本學習出打標籤邏輯,再利用學習出的邏輯對無標籤樣本進行分類,是一種有監督學習演算法。 2.聚類的使用 聚類演

機器學習筆記之(7)——演算法

對於監督學習,訓練資料都是事先已知預測結果的,即訓練資料中已提供了資料的類標。無監督學習則是在事先不知道正確結果(即無類標資訊或預期輸出值)的情況下,發現數據本身所蘊含的結構等資訊。 無監督學習通過對無標記訓練樣本的學習來尋找這些資料的內在性質。 聚類的目標是發現數據中自然形成的分組,使得每

K均值理解和實現

目錄 1. 距離的測度 1.1 歐式距離 1.2 馬氏距離 1.2.1 利用馬氏距離對資料進行歸一化 1.2.2 利用馬氏距離進行分類 2. K均值的基本理論 2.1 K均值的原理和實現 2.2 K均值的缺點 2.3 K均值改進 3. 演算法實現 3.1