【问题标题】:Clustering vectors with similar patterns聚类具有相似模式的向量
【发布时间】:2020-09-27 08:25:36
【问题描述】:

假设我有很多向量,其中一些是:

a: [1,2,3,4,3,2,1,0,0,0,0,0]
b: [5,5,5,5,5,10,20,30,5,10]
c: [1,2,3,2,1,0,0,0,0,0,0,0]

我们可以看到向量 a 和 c 之间的相似模式。 我的问题是是否可以将这两个分类到同一个集群并将 b 分类到另一个集群。 我宁愿不使用 KMeans 之类的算法,因为这些值并不有趣,只有模式才有意义。 欢迎任何建议,尤其是 Phyton 中的解决方案。 谢谢

【问题讨论】:

    标签: python cluster-analysis


    【解决方案1】:

    您可能希望使用支持向量分类器,因为它根据集群中点之间的模式(广义方向)生成集群之间的边界,而不是点之间的简单距离(如 KMeans 和光谱聚类会这样做)。但是,您必须自己构建标签Y,因为 SVC 是一种监督方法。这是一个例子:

    import numpy as np
    from sklearn.svm import SVC
    from sklearn.pipeline import make_pipeline
    from sklearn.preprocessing import StandardScaler
    
    a = [1,2,3,4,3,2,1,0,0,0,0,0]
    b = [5,5,5,5,5,10,20,30,5,10]
    c = [1,2,3,2,1,0,0,0,0,0,0,0]
    
    d = [100,2,300,4,100,0,0,0,0,0,0,0]
    
    vectors = [a, b, c]
    
    # Vectors have different lengths. Append them to get equal dimensions.
    L = max(len(elem) for elem in vectors)
    imputed = []
    for elem in vectors:
      l = len(elem)
      imputed.append(elem + [0]*(L-l))
    
    print(imputed)
    
    X = np.array(imputed)
    print(X)
    Y = np.array([0, 1, 0])
    
    clf = make_pipeline(StandardScaler(), SVC(gamma='auto'))
    clf.fit(X, Y)
    
    print(clf.predict(np.array([d])))
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 2013-08-26
      • 2021-12-30
      • 2012-09-30
      • 2012-04-22
      • 2013-03-22
      • 2022-12-12
      • 2023-03-12
      • 2018-02-15
      相关资源
      最近更新 更多