1. 程式人生 > >基於Sklearn原生Kmeans演算法的自動化聚類

基於Sklearn原生Kmeans演算法的自動化聚類

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series
import random
from sklearn.metrics import silhouette_samples, silhouette_score
import time

def pressure_cluster(n_clusters,pressure_array):
    '''
    n_clusters是要聚類的類數
    pressure_array是要進行聚類的壓力資料陣列
    '''
    data_set = np.array(pressure_array).reshape(-1,1)
    clf1 = KMeans(n_clusters=n_clusters) #呼叫KMeans演算法
    y_pred = clf1.fit_predict(data_set) #載入資料集合
    silhouette_avg = silhouette_score(data_set,clf1.labels_ )
    sample_silhouette_values = silhouette_samples(data_set,clf1.labels_)
    # print(silhouette_avg)
    cluster_res_label = clf1.labels_
    data_set_df=Series(pressure_array,index=cluster_res_label)
    pressure_ctr=[]
    pressure_out=[]
    #算出每一個類別的均值和方差,取mean+2*std,作為該類別的值
    for i in range(n_clusters):
        pressure_ctr.append(data_set_df[i].mean()+2*data_set_df[i].std())
    #將原始壓力資料替換成聚類結果,確定壓力控制時間段
    for i in range(len(pressure_array)):
        pressure_out.append(pressure_ctr[clf1.labels_[i]])
    return pressure_out,silhouette_avg

def kmeans_auto(dataset,n):
    start=time.time()
    score_list=[]
    for k in range(2,n,1):
        pressure_out,score=pressure_cluster(k,dataset)
        score_list.append(score)
    best_k=score_list.index(max(score_list))+2
    pressure_out,score=pressure_cluster(best_k,dataset)
    end=time.time()
    print((end-start))
    return pressure_out


if __name__=="__main__":

    num_point = 72*2
    signal1=[]
    for i in range(num_point):
        if i<30:
            signal1.append(15+1.5*random.random())
        elif i<100:
            signal1.append(20+2*random.random())
        elif i<120:
            signal1.append(25+2*random.random())
        else:
            signal1.append(20+3*random.random())

    pressure_cluster_res=kmeans_auto(signal1,10)
    plt.plot(signal1)
    plt.plot(pressure_cluster_res)
    plt.show()


結果圖片原始三類壓力按照大小自動實現時間段聚類

相關推薦

基於Sklearn原生Kmeans演算法自動化

from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt from pandas import Series import random from

基於spark實現kmeans的更新中心的關鍵程式碼

/** * 這個方法作用是返回被給樣本的所屬聚類中心的索引,及其到這個聚類中心的距離, * 其中class VectorWithNorm(val vector: Vector, val norm: Double)這是VectorWithNorm

python資料分析:流量資料化運營(下)——基於自動K值得KMeans廣告效果分析

案例背景 某企業由於投放的廣告渠道比較多,需要對其做廣告效果分析以實現有針對性的廣告效果測量和優化工作。跟以應用為目的的案例不同的是,由於本案例是一個分析型案例,該過程的輸出其實是不固定的,因此需要跟業務運營方具體溝通需求。 以下是在開展研究之前的基本預設條件: 廣告渠道

基於.NET實現資料探勘--分析演算法

http://www.cnblogs.com/captain_ccc/articles/4093615.html 本篇文章主要採用另外一種分析演算法對目標顧客群體的挖掘,同樣的利用微軟案例資料進行簡要總結。 應用場景介紹 通過上一篇中我們採用Microsoft決策

機器學習總結(十):常用演算法Kmeans、密度、層次)及常見問題

任務:將資料集中的樣本劃分成若干個通常不相交的子集。 效能度量:類內相似度高,類間相似度低。兩大類:1.有參考標籤,外部指標;2.無參照,內部指標。 距離計算:非負性,同一性(與自身距離為0),對稱性

分析常用演算法原理:KMeans,DBSCAN, 層次

聚類分析是非監督學習的很重要的領域。所謂非監督學習,就是資料是沒有類別標記的,演算法要從對原始資料的探索中提取出一定的規律。而聚類分析就是試圖將資料集中的樣本劃分為若干個不相交的子集,每個子集稱為一個“簇”。下面是sklearn中對各種聚類演算法的比較。

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

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

CNN autoencoder 先降維再使用kmeans進行影象 是不是也可以降維以後進行iforest處理?

import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Activation, Flatten from keras.layers

演算法和分類

目錄 一、聚類和分類的區別 簡單的說,聚類的分析沒有學習集,而分類有學習集 二、常用聚類演算法 1.動態聚類:K-means方法 演算法步驟: 1.選擇K個點作為初始質心       2.將每個點指派到

SklearnKMeans演算法

K-Means演算法原理 K-means的優缺點 優點: 1.演算法快速、簡單; 2.對大資料集有較高的效率並且是可伸縮性的; 3.時間複雜度近於線性,而且適合挖掘大規模資料集。K-Means聚類演算法的時間複雜度是O(n×k×t) ,其中n代表資料集中物件的數量,t代表著演算

從DBSCAN演算法談談演算法

DBSCAN演算法 前言 DBSCAN DBSCAN 是什麼? DBSCAN演算法是對資料樣本進行劃分的聚類演算法,且我們事先並不知道資料樣本的標籤,是一種非監督的聚類演算法。在wiki pedia的定義中原文是這樣的: Dens

非監督學習演算法、降維、關聯規則挖掘)--機器學習--思維導圖手寫筆記(32)

一、思維導圖(點選圖方法) 二、補充筆記 三、K-means演算法的收斂性 說明: 當聚類中心μ確定時,求得的各個資料的cluster滿足聚類目標函式最小。 當資料cluster確

資料探勘演算法分析(二)canopy演算法

canopy是聚類演算法的一種實現 它是一種快速,簡單,但是不太準確的聚類演算法 canopy通過兩個人為確定的閾值t1,t2來對資料進行計算,可以達到將一堆混亂的資料分類成有一定規則的n個數據堆 由於canopy演算法本身的目的只是將混亂的資料劃分成大概的幾個類別,所以它

Java實現k_means演算法進行分析

實驗描述: 對指定資料集進行聚類分析,選擇適當的聚類演算法,編寫程式實現,提交程式和結果報告。 資料集: Iris Data Set(見附件一) ,根據花的屬性進行聚類。 資料包括四個屬性:sepal length花萼長度,sepal width花萼寬度,petal len

機器學習--K-means演算法,無監督學習)

一、基本思想   聚類屬於無監督學習,以往的迴歸、樸素貝葉斯、SVM等都是有類別標籤y的,也就是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定y,只有特徵x,比如假設宇宙中的星星可以表示成三維空間中的點集。聚類的目的是找到每個樣本x潛在的類別y,並將同類別y的樣本x

利用sklearn.cluster實現k均值

一、k-mean演算法介紹 1.主要思想:在給定聚類簇數(K值)【n_clusters】和K個初始類簇中心(通常從資料集中隨機選取k個數據)的情況下,歷遍資料集中的每個資料點,而資料點距離哪個類簇中心(cluster centers)最近,就把該資

機器學習sklearn19.0演算法——層次(AGNES/DIANA)、密度(DBSCAN/MDCA)、譜

一、層次聚類 BIRCH演算法詳細介紹以及sklearn中的應用如下面部落格連結: http://www.cnblogs.com/pinard/p/6179132.html http://www.cnblogs.com/pinard/p/62

演算法之K-means演算法演算法衡量指標

聚類就是按照某個特定標準(如距離準則)把一個數據集分割成不同的類或簇,使得同一個簇內的資料物件的相似性儘可能大,同時不在同一個簇中的資料物件的差異性也儘可能地大。即聚類後同一類的資料儘可能聚集到一起

演算法---層次

 假設有N個待聚類的樣本,對於層次聚類來說,步驟: 1.(初始化)把每個樣本歸為一類,計算每兩個類之間的距離,也就是樣本與樣本之間的相似度; 2.尋找各個類之間最近的兩個類,把他們歸為一類(這樣類的總數就少了一個); 3.重新計算新生成的這個類和各個舊類之間的相似度; 4.重複2和3直到所

王小草【機器學習】筆記--無監督演算法

標籤(空格分隔): 王小草機器學習筆記 1. 聚類的概述 存在大量未標註的資料集,即只有特徵,沒有標籤的資料。 根據這些特徵資料計算樣本點之間的相似性。 根據相似性將資料劃分到多個類別中。 使得,同一個類別內的資料相似度大,類別之間的資料相似度小。