Python Scikit学习:为什么我的k均值聚类散点图如此丑陋? def get_名词(文本): tagger=MeCab.tagger() 单词=[] 对于tagger.parse(text.splitlines()[:-1]中的c: 如果len(c.split('\t'))

Python Scikit学习:为什么我的k均值聚类散点图如此丑陋? def get_名词(文本): tagger=MeCab.tagger() 单词=[] 对于tagger.parse(text.splitlines()[:-1]中的c: 如果len(c.split('\t')),python,scikit-learn,k-means,Python,Scikit Learn,K Means,我有一个代码,将人们的教育历史分为10组。我的散点图是这样的。 如您所见,散点图并没有真正按组排序,不同的颜色相互混合。如何更改此代码以使分组更精确?好的,这就是算法如何找到簇的方法。可视化只是一个工具,可以看到你的算法发现了什么。我在互联网上看到其他人得到了非常清晰的聚类,我看着他们的代码,无法安静地找出我做错了什么。我应该接受这个结果吗?根据我看到的代码(howmany=10),您有10个集群,您试图以二维显示它们。一件可能有帮助的事情是将绘图尺寸增加到3D,您可能会开始看到更多的分离查看

我有一个代码,将人们的教育历史分为10组。我的散点图是这样的。


如您所见,散点图并没有真正按组排序,不同的颜色相互混合。如何更改此代码以使分组更精确?

好的,这就是算法如何找到簇的方法。可视化只是一个工具,可以看到你的算法发现了什么。我在互联网上看到其他人得到了非常清晰的聚类,我看着他们的代码,无法安静地找出我做错了什么。我应该接受这个结果吗?根据我看到的代码(
howmany=10
),您有10个集群,您试图以二维显示它们。一件可能有帮助的事情是将绘图尺寸增加到3D,您可能会开始看到更多的分离查看绘图我假设数据的尺寸比绘图中显示的尺寸更多/不同。如果你有两个维度的数据,你在这两个维度上运行k-均值,然后绘制这两个维度,你将得到每个颜色的清晰区域。你也可以考虑10是否是k的最佳值。可视化只是一个工具,可以看到你的算法发现了什么。我在互联网上看到其他人得到了非常清晰的聚类,我看着他们的代码,无法安静地找出我做错了什么。我应该接受这个结果吗?根据我看到的代码(
howmany=10
),您有10个集群,您试图以二维显示它们。一件可能有帮助的事情是将绘图尺寸增加到3D,您可能会开始看到更多的分离查看绘图我假设数据的尺寸比绘图中显示的尺寸更多/不同。如果你有两个维度的数据,你在这两个维度上运行k-均值,然后绘制这两个维度,你将得到每个颜色的清晰区域。你也可以考虑10是否是k的最佳值。
def get_nouns (text):
    tagger = MeCab.Tagger()
    words = []

    for c in tagger.parse(text).splitlines()[:-1]:
        if len(c.split('\t')) < 2:
            continue
        surface, feature = c.split('\t')
        pos = feature.split(',')[0]
        if pos == '名詞':  # noun 
            words.append(surface)
    return ' '.join(words)


def bio():
    biolist =[]
    howmany = 10
    for giin in read:
        if len(giin["education"]) < 1:
            continue
        biolist.append(get_nouns(" ".join(giin["education"])))
    ######################################################
    nparray = np.array (biolist)
    cv = CountVectorizer()
    bags = cv.fit_transform(nparray)
    tfidf=TfidfTransformer(norm='l2', sublinear_tf=True).fit_transform(bags)
    km_model = KMeans(n_clusters=howmany, init='k-means++')
    km_model.fit_transform(tfidf)
    lsa2 = TruncatedSVD(2)
    compressed_text_list = lsa2.fit_transform(tfidf)
    compressed_center_list = lsa2.fit_transform(km_model.cluster_centers_)

    X = []
    Y = []
    X_cent = []
    Y_cent = []

    for x, y in compressed_text_list:
        X.append(x)
        Y.append(y)
    for x, y in compressed_center_list:
        X_cent.append(x)
        Y_cent.append(y)

    clus_list = []
    for i in range (howmany):
        clus_list.append([])
        for a in biolist:
            if km_model.labels_[biolist.index(a)] == i:
                clus_list[i].append(a)

    for a in clus_list:
        print (a)
        print ("   ")

    plt.scatter(X, Y,  c = km_model.labels_)
    plt.scatter(X_cent, Y_cent, c="r", marker = "+")

    plt.show()