熊猫数据帧对象是否与 sklearn kmeans 聚类一起工作



dataset是pandas数据帧。这是sklearn.cluster.KMeans

 km = KMeans(n_clusters = n_Clusters)
 km.fit(dataset)
 prediction = km.predict(dataset)

这是我决定哪个实体属于哪个集群的方式:

 for i in range(len(prediction)):
     cluster_fit_dict[dataset.index[i]] = prediction[i]

数据集的外观如下:

 A 1 2 3 4 5 6
 B 2 3 4 5 6 7
 C 1 4 2 7 8 1
 ...

其中 A,B,C 是索引

这是使用 k 均值的正确方法吗?

假设数据帧中的所有值都是数字,

# Convert DataFrame to matrix
mat = dataset.values
# Using sklearn
km = sklearn.cluster.KMeans(n_clusters=5)
km.fit(mat)
# Get cluster assignment labels
labels = km.labels_
# Format results as a DataFrame
results = pandas.DataFrame([dataset.index,labels]).T

或者,您可以尝试 KMeans++ for Pandas。

要知道您的数据帧dataset是否具有合适的内容,您可以显式转换为 numpy 数组:

dataset_array = dataset.values
print(dataset_array.dtype)
print(dataset_array)

如果数组具有齐次数值dtype(通常为 numpy.float64),那么对于 scikit-learn 0.15.2 及更高版本应该没问题。例如,您可能仍需要使用sklearn.preprocessing.StandardScaler规范化数据。

如果你的数据框是异构类型的,则相应的numpy数组的dtype将被object,这不适合scikit-learn。您需要提取所有相关特征的数值表示(例如,通过提取分类特征的虚拟变量)并删除不适合特征的列(例如样本标识符)。

最新更新