我想對由對象名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.5,它大概運行了大約20個小時,並且只給出了一個集羣 – Harshad
如何發佈您實際使用的代碼和數據?上述代碼由於語法錯誤而無法運行,因爲estimate_bandwidth可以批量處理500個項目(您提供了9個項目),所以不會運行語法錯誤,並且在向MeanShift構造函數直接提供合理的帶寬之後不會運行(1.5e6),因爲代碼的顯示部分中有一個錯誤的列。我已經用盡了熱情,或者我會指出你的數據嚴重縮放(x和y與溫度尺度)直接用於像meanshift或kmeans – welch
這樣的距離方法,因爲數據文件太大太分享,如果你提供您的電子郵件或雲存儲庫ID或通過任何其他方式分享。關於kmeans數據可以與n個簇聚類,但我也試圖通過均值漂移,kmean和基於密度的算法找到簇的精確差異 – Harshad