首页 > 解决方案 > Python。如何将我自己的数据集导入“k 均值”算法

问题描述

我想将我自己的数据(位于 .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 并且示例代码可以工作吗?但是那些像中心、n_features 等make_blob特征呢?我需要以不同的方式指定它们吗?

# 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() 

任何帮助表示赞赏!

标签: pythoncluster-analysissilhouette

解决方案


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

例如:

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

之后,您有一个新的嵌入数据集,您可以应用 k-means。如果您想要样本的同质外观,则必须将它们转换为 one-hot-representation(即为每个样本创建一个 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)
...

推荐阅读