Python KMeans聚類問題分析

2022-10-04 10:24:10 字數 2984 閱讀 2957

今天用python實現了一下簡單的聚類分析,順便熟悉了numpy陣列操作和繪圖的一些技巧,在這裡做個記錄。

from pylab import *

from sklearn.cluster import kmeans

## 利用numpy.append()函式實現matlab多維陣列合併的效果,axis 引數值為 0 時是 y 軸方向合併,引數值為 1 時是 x 軸方向合併,分別對應matlab [a ; b] 和 [a , b]的效果

#建立5個隨機的資料集

x1=append(randn(500,1)+5,randn(500,1)+5,axis=1)

x2=append(randn(500,1)+5,randn(500,1)-5,axis=1)

x3=append(randn(500,1)-5,randn(500,1)+5,axis=1)

x4=append(randn(500,1)-5,randn(500,1)-5,axis=1)

x5=append(randn(500,1),randn(500,1),axis=1)

# 下面用較笨的方法把5個資料集合並成 (2500,2)大小的陣列data

data=append(x1,x2,axis=0)

data=append(data,x3,axis=0)

data=append(data,x4,axis=0)

data=append(data,x5,axis=0)

plot(x1[:,0],x1[:,1],'oc',markersize=0.8)

plot(x2[:,0],x2[:,1],'og',markersize=0.8)

plot(x3[:,0],x3[:,1],'ob',markersize=0.8)

plot(x4[:,0],x4[:,1],'om',markersize=0.8)

plot(x5[:,0],x5[:,1],'oy',markersize=0.8)

k=kmeans(n_clusters=5,random_state=0).fit(data)

t=k.cluster_centers_ # 獲取資料中心點

plot(t[:,0],t[:,1],'r*',markersize=16) # 顯示這5個中心點,五角星標記~

title('kmeans clustering')

box(false)

xticks() # 去掉座標軸的標記

yticks()

show()

結果如下:

2017/01/11更新

今天重新試執行程式的出現報錯了,提示匯入numpy_mkl失敗,因為之前用命令pip install -u numpy手動更新了numpy,最初的是在htt程式設計客棧p: 裡**的numpy-1.11.2+mkl-cp27-cp27m-win_amd64.whl 檔案安裝的,只要重新安裝回去就可以了

2017/1/18更新

python中還有乙個叫plotly 的package,可以通過pip install plotly 或 pip3 install plotly(python3.x) ,使用這個package可以繪製精美的影象,官網中有很多例子介紹,同時plotly 還支援matlab,r等,但是個人覺得plotly 的繪圖語法相比matplotlib 的繁瑣,需要照著例程來修改才比較方便,不過如果只是要想資料視覺化更好看的話參考官網例程並做修改也無妨,下面是來自官網的一段示例**:

import plotly.plotly as py

import plotly.graph_objs as go

import plotly

import程式設計客棧 numpy as np

#生成三組高斯分布(gaussian distribution)點集

x0 = np.random.normal(2, 0.45, 300)

y0 = np.random.normal(2, 0.45, 300)

x1 = np.random.normal(6, 0.8, 200)

y1 = np.random.normal(6, 0.8, 200)

x2 = np.random.normal(4, 0.3, 200)

y2 = np.random.normal(4, 0.3, 200)

#建立圖形物件 graph object

trace0 = go.scatter(

x=x0,

y=y0,

mode='markers',

)trace1 = go.scatter(

x=x1,

y=y1,

mode='markers'

)trace2 = go.scatter(

x=x2,

y=y2,

mode='markers'

)trace3 = go.scatter(

x=x1,

y=y0,

mode='markers'

)#布局是乙個字典,字典關鍵字keys包括:'shapes', 'showlegend'

layout = ,

},, },

, },

, },

], 'showlegend': false,

}data = [trace0, trace1, trace2, trace3]

#影象包括資料部分和布局部分

fig =

#使用離線的方式繪製影象,因為沒有註冊官方的**,而且那個**不容易進去,所以用離線繪製

plotly.offline.plot(fig, filename='clusters')

結果是通過瀏覽器開啟的,可以儲存到本地,如下圖:

總結:plotly 這個庫雖然語法比較繁瑣,但是對資料顯示要求較高的情況下可以充分利用,一般繪圖的話使用matplotlib比較方便,特別是ipython模式下先執行from pylab import * 可以獲得和matlab 類似的工作環境。

本文標題: python kmeans聚類問題分析

本文位址:

Python Kmeans聚類全流程,aribnb

資料清洗 調整年齡的範圍 airbnb airbnb airbnb age 80 airbnb airbnb airbnb age 18 轉變日期的格式,轉為對分析有用的日期形式 呼叫to datetime 轉化為日期時間格式 airbnb date account created pd.to da...

聚類之層次聚類 基於劃分的聚類(

目錄 一層次聚類 層次聚類的原理及分類 層次聚類的流程 層次聚類的優缺點 二劃分聚類法k means kmeans演算法的原理 k均值的優缺點及分類 k means與dbscan的區別 k means注意問題 三基於密度的聚類 dbscan的概念 簇的生成原理及過程 根據資料點的密度分為三類點 db...

k means聚類,密度聚類,層次聚類優缺點

k means 優點 1,簡單,易於理解和實現 2,時間複雜度低 缺點 1,需要對均值給出定義,2,需要指定要聚類的數目 3,一些過大的異常值會帶來很大影響 4,演算法對初始選值敏感 5,適合球形聚類 層次聚類 優點 1,距離和規則的相似度容易定義,限制少 2,不需要預先制定聚類數 3,可以發現類的...