【问题标题】:Transforming data for kmeans and PCA为 kmeans 和 PCA 转换数据
【发布时间】:2015-09-17 20:32:57
【问题描述】:

我有一个如下所示的数据集:

search_term = ['computer','usb port', 'phone adaptor']
clicks = [3,2,1]
bounce = [0,0,2]
conversion = [4,1,0]

我想将它输入到 kmeans 模型中,但是我无法将列表转换为矩阵格式,以便它可以被 kmeans 摄取。我还想使用 PCA 减小尺寸,以便可以在 2d 图中对其进行可视化。

这是我的代码的样子:

X = np.array(clicks, bounce, conversion)
y = np.array(search_terms)
num_clusters = 3

pca = PCA(n_components=2, whiten=True).fit(X)
X_pca = pca.transform(X)

km=KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1)
km.fit(X_pca)

print km.labels_[:10]

这是我得到的错误:

TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray'

另外,一旦集群完成,我希望能够看到哪些搜索词属于哪个集群,所以我不确定设置 y = np.array(search_terms) 是否正确?

请指教。

【问题讨论】:

  • 代码的哪一行引发了这个错误?
  • 这一行X_pca = pca.transform(X)

标签: python numpy scipy scikit-learn k-means


【解决方案1】:

你怎么不打这个

>>> X=np.array(clicks,bounce,conversion)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: only 2 non-keyword arguments accepted

错误?

我假设您希望您的数据项按行排列:

X=np.array([clicks,bounce,conversion]).transpose()

如果您希望每列显示它们,请删除 .transpose()

【讨论】:

    【解决方案2】:

    以下代码应该可以工作。如果不是这样,请告诉我。

    import numpy as np
    from sklearn.decomposition import PCA
    from sklearn.cluster import KMeans
    
    search_terms = ['computer','usb port', 'phone adaptor']
    clicks = [3,2,1]
    bounce = [0,0,2]
    conversion = [4,1,0]
    
    X = np.array([clicks, bounce, conversion]).T
    y = np.array(search_terms)
    
    num_clusters = 3
    
    X_pca = PCA(n_components=2, whiten=True).fit_transform(X)
    
    km = KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1)
    km.fit(X_pca)
    

    【讨论】:

    • @jxn encoder.classes_ 将为您提供所有独特的标签
    • @jxn 这里的encoder 实际上并没有多大用处,因为我们正在进行无监督聚类,不需要任何 y-label 输入。您可以简单地忽略这两行。
    • @jxn 您可以通过比较y[:10]km.predict(X_pca)[:10] 来测试算法是否正确进行了聚类
    • y[:10] 给了我一个包含 10 个不同数字的列表(这是数据的索引号吗?)而km.predict(X_pca)[:10] 给了我(我相信集群标签号)?
    • @jxn 你能把这两个结果贴在你的帖子里吗?两者都应该返回一个包含 0、1、2、2、1、1、0 的数组。
    猜你喜欢
    • 2019-11-12
    • 2023-03-22
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2014-11-28
    • 2023-04-04
    • 1970-01-01
    • 2019-12-09
    相关资源
    最近更新 更多