Python。如何将我自己的数据集导入 "k means" 算法

Python. How to import my own dataset to "k means" algorithm

我想将我自己的数据(位于 .txt 文件中的句子)导入到这个示例算法中,可以在以下位置找到:https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html

问题是这段代码使用了 make_blobs 数据集,我很难理解如何用 .txt 文件中的数据替换它。

我预测我需要在此处替换这段代码:

X, y = make_blobs(n_samples=500,
          n_features=2,
          centers=4,
          cluster_std=1,
          center_box=(-10.0, 10.0),
          shuffle=True,
          random_state=1)  # For reproducibility

我也不明白这些变量 X, y 。我假设 X 是一个数据数组,那么 y 呢?

我是否应该像这样将所有内容都分配给 X,这样示例代码就可以工作了?但是那些 make_blobs 中心、n_features 等特征呢?我需要以不同的方式指定它们吗?

# open and read from the txt file
path = "C:/Users/user/Desktop/sentences.txt"
file = open(path, 'r')
# assign it to the X
X = file.readlines() 

感谢任何帮助!

首先,您需要将单词映射到您的 k-means 算法可以使用的数字。

例如:

I ride a bike and I like it.
1   2  3  4    5  1  6   7  # <- number ids

之后,您的数据集有了新的嵌入,您可以应用 k-means。如果你想要你的样本具有均匀的外观,你必须将它们转换为单热表示(即你为每个样本创建一个 N 长度的数组,其中 N 是你拥有的唯一单词的总数,其中有一个到与样本索引相同的对应位置)。

上面 N = 7 的例子是

1 -> 1000000
2 -> 0100000
...

因此,现在您可以拥有一个包含格式正确的数据的 X 变量。您不需要 y 这是您的样本的相应标签。

clusterer = KMeans(n_clusters=n_clusters, random_state=10)
cluster_labels = clusterer.fit_predict(X)
silhouette_avg = silhouette_score(X, cluster_labels)
...