sklearn MeanShift 不同的预测输出
sklearn MeanShift different prediction output
为什么我从第
print ms.fit_predict(val), p_all[idx]
行得到不同的输出
ms.fit_predict(val) 的输出都是 0。
import numpy as np
from sklearn.cluster import MeanShift, estimate_bandwidth
X = 100*np.random.random_sample((500,15))-100
X = np.array(X, dtype=np.float)
bandwidth = estimate_bandwidth(X, quantile=0.01)
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
ms.fit(X)
p_all = ms.fit_predict(X)
for idx, val in enumerate(X):
print val
print X[idx]
print ms.fit_predict(val), p_all[idx]
您正在循环内重新拟合到单个数据点。 p_all
是对X
中所有数据的拟合聚类分配。循环运行后,如果你打印出ms.cluster_centers_
,它会和val
一样,因为它适合only到val
。因此,将只有一个集群,其索引为 0
.
我猜您对 MeanShift
的界面感到困惑。它不在线改装。每次你调用 fit()
或 fit_predict()
,它只适合你传递给它的数据,而忽略旧的解决方案。
为什么我从第
print ms.fit_predict(val), p_all[idx]行得到不同的输出
ms.fit_predict(val) 的输出都是 0。
import numpy as np from sklearn.cluster import MeanShift, estimate_bandwidth X = 100*np.random.random_sample((500,15))-100 X = np.array(X, dtype=np.float) bandwidth = estimate_bandwidth(X, quantile=0.01) ms = MeanShift(bandwidth=bandwidth, bin_seeding=True) ms.fit(X) p_all = ms.fit_predict(X) for idx, val in enumerate(X): print val print X[idx] print ms.fit_predict(val), p_all[idx]
您正在循环内重新拟合到单个数据点。 p_all
是对X
中所有数据的拟合聚类分配。循环运行后,如果你打印出ms.cluster_centers_
,它会和val
一样,因为它适合only到val
。因此,将只有一个集群,其索引为 0
.
我猜您对 MeanShift
的界面感到困惑。它不在线改装。每次你调用 fit()
或 fit_predict()
,它只适合你传递给它的数据,而忽略旧的解决方案。