K-means聚類算法、Pandas繪製概率密度圖和TSNE展示聚類結果

2021-03-02 浙商大統計調研學會

# -*- coding: utf-8 -*-

# 使用K-Means算法聚類消費行為特徵數據

import pandas as pd

# 參數初始化

input_path = 'F:/DataMining/chapter5/consumption_data.xls'  # 銷量及其他屬性數據

output_path = 'F:/DataMining/chapter5/tmp/data_type.xls'  # 保存結果的文件名

k = 3  # 聚類的類別

iteration = 500  # 聚類最大迭代次數

data = pd.read_excel(input_path, index_col='Id')  # 讀取數據

print('data: \n', data)

print('means: \n', data.mean())

print('stds: \n', data.std())

data_zs = 1.0*(data - data.mean())/data.std()  # 數據標準化

from sklearn.cluster import KMeans

model = KMeans(n_clusters=k, n_jobs=1, max_iter=iteration)  # 分為k類,n_jobs=1即不並發執行

model.fit(data_zs)  # 開始聚類

print('labels: \n', model.labels_)

print('cluster_centers_: \n', model.cluster_centers_)

# 簡單列印結果

r1 = pd.Series(model.labels_).value_counts()  # 將數組格式的labels轉換為Series格式再統計各個類別的數目

# r1.index = ['a', 'b', 'c']

print('r1: \n', r1)

r2 = pd.DataFrame(model.cluster_centers_)  # 將二維數組格式的cluster_centers_轉換為DataFrame格式

print('r2: \n', r2)

r = pd.concat([r2, r1], axis=1)  # 橫向拼接接(0是縱向),將r1變成一列拼接在r2的最右邊,所有拼接的列的列名默認從0開始

r.columns = data.columns.tolist() + ['類別數目']  # 重命名表頭

print('r: \n', r)

# 詳細輸出原始數據及其類別

output_data = pd.concat([data, pd.Series(model.labels_, index=data.index)], axis=1)   # 詳細輸出每個樣本對應的類別

output_data.columns = list(data.columns) + ['聚類類別']  # 重命名表頭

# output_data.to_excel(output_path)  # 保存結果

# 使用TSNE進行數據降維並展示聚類結果

from sklearn.manifold import TSNE

tsne = TSNE()

tsne.fit_transform(data_zs)  # 進行數據降維

# tsne.embedding_可以獲得降維後的數據

print('tsne.embedding_: \n', tsne.embedding_)

tsn = pd.DataFrame(tsne.embedding_, index=data.index)  # 轉換數據格式

print('tsne: \n', tsne)

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標籤

plt.rcParams['axes.unicode_minus'] = False  # 用來正常顯示負號

# 不同類別用不同顏色和樣式繪圖

color_style = ['r.', 'go', 'b*']

for i in range(k):

    d = tsn[output_data[u'聚類類別'] == i]

    # dataframe格式的數據經過切片之後可以通過d[i]來得到第i列數據

    plt.plot(d[0], d[1], color_style[i], label='聚類' + str(i+1))

plt.legend()

plt.show()

相關焦點

  • k-means聚類算法原理總結
    k-means算法是非監督聚類最常用的一種方法,因其算法簡單和很好的適用於大樣本數據,廣泛應用於不同領域,本文詳細總結了k-means聚類算法原理
  • 聚類算法之Kmeans
    聚類算法之Kmeans聚類算法其實有很多,包括層次聚類,密度聚類,譜聚類等等。另一種即對所有簇進行SSE(即簇中所有非簇心點到簇心點的距離平方和相加所得)計算,選擇SSE最大的簇進行劃分。2、k-means++算法:其核心也是簇心數目從小到大不斷累加上去。
  • python之kmeans數據聚類算法
    一 Kmeans原理kmeans是屬於無監督學習的數據聚類算法,根據點與點之間的距離推測每個點屬於哪個中心,常用計算距離的方式有:餘弦距離、歐式距離、曼哈頓距離等,本文以歐式距離為例。圖3kmeans實現邏輯:需要輸入待聚類的數據和欲聚類簇數k1.隨機生成k個初始點作為質心
  • k-means聚類算法從入門到精通
    k-means算法是非監督聚類最常用的一種方法,因其算法簡單和很好的適用於大樣本數據,廣泛應用於不同領域,本文詳細總結了k-means聚類算法原理 。小批量處理的k-means聚類算法5. k值的選取6. k-means聚類算法不適用的幾個場景7. k-means與knn區別8. 小結聚類算法性能度量的文章提到若簇類相似度好簇間的相似度差,則聚類算法的性能較好。我們基於此定義k-means聚類算法的目標函數: 其中
  • 詳解 kmeans 聚類算法
    也是聚類算法中最簡單的一種了,但是裡面包含的思想卻是不一般。聚類的目的是找到每個樣本x潛在的類別y,並將同類別y的樣本x放在一起。比如上面的星星,聚類後結果是一個個星團,星團裡面的點相互距離比較近,星團間的星星距離就比較遠了。在聚類問題中,給我們的訓練樣本是
  • K-Means聚類算法詳解
    random 的方式則是完全隨機的方式,一般推薦採用優化過的 k-means++ 方式;algorithm:k-means 的實現算法,有「auto」 「full」「elkan」三種。一般來說建議直接用默認的"auto"。簡單說下這三個取值的區別,如果你選擇"full"採用的是傳統的 K-Means 算法,「auto」會根據數據的特點自動選擇是選擇「full」還是「elkan」。
  • K-Means聚類算法
    簡單來說,之前的算法中我們是利用特徵 x 和類別 y 來進行訓練、分類的,而無監督學習是指不需要我們提供具體的類別 y ,而讓數據自己聚在一起,形成 k 個簇,以實現分類的目的。具體方法是通過對給定的樣本進行劃分,分為 k 個簇,使得簇內的點儘量緊密的連在一起,而簇間的距離儘量大,評判的標準就是通過歐氏距離。
  • 聚類算法之PCA與tSNE
    第二單元第六講:聚類算法之PCA與tSNE還是之前文章附件的圖片,其中b圖是選取兩個主成分做的PCA圖,c圖是tSNE圖:: 計算距離介紹過dist()函數,它是按行為操作對象,而聚類是要對樣本聚類,因此要先將我們平時見到的表達矩陣(行為基因,列為樣本)轉置;同樣PCA也是對行/樣本進行操作,也是需要先轉置;另外歸一化的scale()函數雖然是對列進行操作,但它的對象是基因,因此也需要轉置關於PCA
  • 算法雜貨鋪——k均值聚類(K-means)
    本文首先介紹聚類的基礎——距離與相異度,然後介紹一種常見的聚類算法 ——k均值和k中心點聚類,最後會舉一個實例:應用聚類方法試圖解決一個在體育界大家頗具爭議的問題——中國男足近幾年在亞洲到底處於幾流水平。4.2、相異度計算      在正式討論聚類前,我們要先弄清楚一個問題:如何定量計算兩個可比較元素間的相異度。
  • 聚類算法入門:k-means
    比如垃圾分類就是分類算法,你知道豬能吃的是溼垃圾,不能吃的是幹垃圾……;打掃房間時你把雜物都分分類,這是聚類,你事先不知道每個類別的標準。二、劃分聚類方法: K-means:對於給定的樣本集,按照樣本之間的距離(也就是相似程度)大小,將樣本集劃分為K個簇(即類別)。
  • 機器學習十大經典算法之K-Means聚類算法
    聚類與分類算法的最大區別在於, 分類的目標類別已知, 而聚類的目標類別是未知的。K-Means聚類算法步驟K-Means聚類步驟是一個循環迭代的算法,具體·步驟如下:1、先隨機選取K個對象作為初始的聚類中心,隨機選擇K個初始中心點;2、計算每個對象與各個種子聚類中心之間的距離,按照距離初始中心點最小的原則,把每個對象分配給距離它最近的聚類中心。
  • 機器學習之SKlearn(scikit-learn)的K-means聚類算法
    Sklearn 官網提供了一個流程圖, 藍色圓圈內是判斷條件,綠色方框內是可以選擇的算法:從 START 開始,首先看數據的樣本是否 >50,小於則需要收集更多的數據。由圖中,可以看到算法有四類,分類,回歸,聚類,降維。其中 分類和回歸是監督式學習,即每個數據對應一個 label。聚類 是非監督式學習,即沒有 label。
  • 你需要的最全面的K-means聚類指南
    有一種算法試圖通過它們的質心最小化簇中點的距離,那就是K-means聚類技術。K-means是一種基於質心的算法,或基於距離的算法,我們計算將點分配給一個簇的距離。在K-means中,每個聚類都與一個質心相關聯。
  • 直播案例 | K-Means 的 Python 實現及在圖像分割和新聞聚類中的應用
    最後我們還將使用一份中文新聞數據集,用 K-Means 算法進行自動新聞主題聚類,並使用柱狀圖和詞雲圖對聚類結果進行可視化分析。下面我們使用一份隨機生成的二維數據集,使用我們上一小節實現的 k_means 完成聚類,然後使用不同顏色標註不同類的樣本以及類中心。
  • K_means聚類的matlab應用
    如果公眾號文章對您有幫助,別忘了點擊分享和「在看」哦!若您對公眾號有什麼意見或建議,請在公眾號中回復或在任意文章底部留言!本文作者:南海一號在機器學習中,我們往往會遇到很大量的數據的處理,其中有一項就是聚類,即將相似的數據聚到一起,比較基礎的就是K_means聚類算法。聚類是一種無監督學習,不需要訓練樣本有對應的標籤就可以將不同的類分開。
  • K-means 聚類算法及其代碼實現
    K-means算法是非監督學習(unsupervised learning)中最簡單也是最常用的一種聚類算法,具有的特點是:本文章介紹
  • kmeans優化算法:二分Kmeans聚類算法
    BiKmeans只是Kmeans其中一個優化方案,其實還是有很多優化的方案,這裡BiKmeans容易講解和理解,並且容易用numpy, pandas實現。那為什麼二進Kmeans算法可以有效的解決這個問題呢。我們需要從二進Kmeans的基礎看是講起。其實BiKmeans的迭代過程類似於一個決策樹。首先我們看一下Kmeans算法的步驟。
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    K-Means聚類是機器學習領域中最強大的聚類算法之一。他的原因比較簡單,但得出的結果也非常準確。聚類是理解數據集的非常重要的方式,因此在本文中,我們將討論什麼是聚類,為什麼需要聚類以及什麼是k-means聚類。
  • DBSCAN聚類算法原理總結
    DBSCAN是基於密度空間的聚類算法,在機器學習和數據挖掘領域有廣泛的應用,其聚類原理通俗點講是每個簇類的密度高於該簇類周圍的密度,噪聲的密度小於任一簇類的密度
  • 數據科學中必須熟知的5種聚類算法
    今天我們來看看,作為數據科學家需要知道並掌握的五種比較比較流行的聚類算法。K-means 聚類算法K-means 聚類算法 可能是大家最為熟悉的聚類算法。它在許多的工業級數據科學和機器學習課程中都有被講解。並且容易理解和實現相應功能的代碼 。