【发布时间】:2015-09-18 00:00:16
【问题描述】:
在对我的数据进行 PCA 并绘制 kmeans 聚类之后,我的图看起来真的很奇怪。集群的中心和点的散点图对我来说没有意义。这是我的代码:
#clicks, conversion, bounce and search are lists of values.
clicks=[2,0,0,8,7,...]
conversion = [1,0,0,6,0...]
bounce = [2,4,5,0,1....]
X = np.array([clicks,conversion, bounce]).T
y = np.array(search)
num_clusters = 5
pca=PCA(n_components=2, whiten=True)
data2D = pca.fit_transform(X)
print data2D
>>> [[-0.07187948 -0.17784291]
[-0.07173769 -0.26868727]
[-0.07173789 -0.26867958]
...,
[-0.06942414 -0.25040886]
[-0.06950897 -0.19591147]
[-0.07172973 -0.2687937 ]]
km = KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1)
km.fit_transform(X)
labels=km.labels_
centers2D = pca.fit_transform(km.cluster_centers_)
colors=['#000000','#FFFFFF','#FF0000','#00FF00','#0000FF']
col_map=dict(zip(set(labels),colors))
label_color = [col_map[l] for l in labels]
plt.scatter( data2D[:,0], data2D[:,1], c=label_color)
plt.hold(True)
plt.scatter(centers2D[:,0], centers2D[:,1], marker='x', c='r')
plt.show()
红十字是集群的中心。任何帮助都会很棒。
【问题讨论】:
-
制作——或查找——你知道输出应该是什么的示例数据,看看使用你的代码是否有效。
-
如果不是专有的,您能否提供一个链接来访问您的数据?例如,您的 csv 文件的 Dropbox 共享链接。
-
@jxn 只是为了与您再次核对原始数据:我看到总共 289804 条
clicks记录中有 225875 条记录是Null和总共 289804 条bounce_cnt记录中的 288926 条记录是 @ 987654326@。它是否正确?由于缺失值的百分比如此之高,这两个功能几乎没有用处。 -
是的,我尝试不将它们包含在模型中,只是尝试使用频率、中值和其他,但我仍然得到了奇怪的形状。
-
@jxn 另一个观察结果是其他两个功能
freq和conversion_cnt缺乏变化。我的意思是freq上的 213773/289804 记录是 1.0,conversion_cnt上的 268124/289804 记录是 0.0。PCA依赖于有效的协方差估计,由于数据缺乏足够的变异性,我怀疑PCA的有用性。让我想想如何解决这个问题,之后会更新你。
标签: python matplotlib scipy scikit-learn pca