0

我想對由對象名x_coordinate,y_coordinate和相應溫度組成的數據進行聚類。嘗試使用均方聚類算法根據位置和附近的溫度來聚​​類附近的物體,即識別熱區和冷區。以下是代碼和小樣本數據。但它只能通過默認設置給出單個羣集,但不能顯示圖形。我想知道什麼可能是錯誤的下面的代碼:聚類用戶定義數據的均值漂移算法,包含3-4個特徵

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import pandas as pd 
from sklearn.decomposition import PCA  
from sklearn.cluster import MeanShift, estimate_bandwidth 
import matplotlib.pyplot as plt 
from itertools import cycle 

data = pd.read_csv("data.csv") 

centers = [[1, 1, 1], [0,0,0], [0,0,0]] 
X= data._get_numeric_data() 
bandwidth = estimate_bandwidth() 

ms = MeanShift() 
ms.fit(X) 
labels = ms.labels_ 
cluster_centers = ms.cluster_centers_ 

print labels 
print cluster_centers 

fig = plt.figure() 
ax = plt.axes(projection='3d') 
x = data['x_cordinate'] 
y=data['y_cordinate'] 
z=data['tpa'] 
c=labels 
ax.scatter(x,y,z, c=c) 
plt.show() 

Data.csv:

名,x_cordinate,y_cordinate,溫度
Ctrs3,5189200,6859000,0.3998434286
Ctrs4,5173360, 6812800,0.4779542857
Ctrs5,5660440,6812800,0.7044195918
Cstrs3,1935400,5929720,0
Cstrs4,1953880,5929720,0
Cstrs5,491320,2689120,0
Cltrs3,3436240,5884840,0.3998434286
Cltrs4,3296320,5884840,0.4779542857
Cltrs5,5426800,5725120,0.7044195918

回答

0

estimate_bandwidth需要一個自變量(數據)。這段代碼是否運行?無論如何...當這發生在我身上時,我給estimate_bandwidthquantile參數的較小值比默認值0.3(並將該帶寬估計值傳遞給MeanShift構造函數!)。

你也可能知道一個很好的帶寬先驗,並且最好使用它,如果你這樣做。

+0

是的,我也嘗試過使用默認值,並將值改爲0.5,它大概運行了大約20個小時,並且只給出了一個集羣 – Harshad

+0

如何發佈您實際使用的代碼和數據?上述代碼由於語法錯誤而無法運行,因爲estimate_bandwidth可以批量處理500個項目(您提供了9個項目),所以不會運行語法錯誤,並且在向MeanShift構造函數直接提供合理的帶寬之後不會運行(1.5e6),因爲代碼的顯示部分中有一個錯誤的列。我已經用盡了熱情,或者我會指出你的數據嚴重縮放(x和y與溫度尺度)直接用於像meanshift或kmeans – welch

+0

這樣的距離方法,因爲數據文件太大太分享,如果你提供您的電子郵件或雲存儲庫ID或通過任何其他方式分享。關於kmeans數據可以與n個簇聚類,但我也試圖通過均值漂移,kmean和基於密度的算法找到簇的精確差異 – Harshad