我需要类型错误的解决方案:不支持的操作数类型 -: 'str' 和'str'编程



下面有问题

Q) K-Means有几种距离度量,如欧几里得、平方欧几里得和曼哈顿。比较k-means聚类在不同距离度量下的纯度得分,选择最佳距离矩阵

这是我的代码

#separating the class and feature matrix
y = df2.num
X = df2.iloc[:,:-1]

from pyclustering.samples.definitions import FCPS_SAMPLES
from pyclustering.cluster.center_initializer import kmeans_plusplus_initializer
from pyclustering.cluster.kmeans import kmeans, kmeans_visualizer
from pyclustering.utils.metric import distance_metric, type_metric
def purity_score(clusters_label):
clustering_classes_2 ={
0: [0,0,0,0,0],
1: [0,0,0,0,0],
2: [0,0,0,0,0]
}
for cluster in range(ln(y)):
for i in clusters_label[cluster]:
clustering_class_2[cluster][y[i]] += 1
purity = (max(clustering_classes_2[0])+max(clustering_classes_2[1])+max(clustering_classes_2[2]))/len(y)
return purity

#Preparing initial centroids using K-Means++ method.
initial_centroids = kmeans_plusplus_initializer(X, 5).initialize()
print(initial_centroids)
#K-mean with the Euclidean metric
euclidean_metric = distance_metric(type_metric.EUCLIDEAN)
kmeans_instance_euclidean = kmeans(X, initial_centroids, metric=euclidean_metric)
kmeans_instance_euclidean.process()
clusters_euclidean = kmeans_instance_euclidean.get_clusters()
final_centroids_euclidean = kmeans_instance_euclidean.get_centers()
print(f"Purity score of k-means with EUCLIDEAN metric is{round(purity_score(clusters_euclidean)*100, 2)}%")

但是我得到了这个错误

TypeError                                 Traceback (most recent call last)
~AppDataLocalTemp/ipykernel_30352/1303550090.py in <module>
17 
18 #Preparing initial centroids using K-Means++ method.
---> 19 initial_centroids = kmeans_plusplus_initializer(X, 5).initialize()
20 print(initial_centroids)
21 
TypeError: unsupported operand type(s) for -: 'str' and 'str'

有人能建议解决这个问题吗?谢谢你

根据https://pyclustering.github.io/docs/0.8.2/html/db/de0/classpyclustering_1_1cluster_1_1center__initializer_1_1kmeans__plusplus__initializer.html中的文档,类kmeans_plusplus_initializer将点列表作为构造函数的第一个参数。给变量X。它可能有字符串而不是预期的数据类型。

我找不到这个变量是如何在您的代码示例中定义的。但我敢打赌,这是你的问题。

在文档中生成预期数据的示例如下:

# Read data 'SampleSimple3' from Simple Sample collection.
sample = read_sample(SIMPLE_SAMPLES.SAMPLE_SIMPLE3);
# Calculate initial centers using K-Means++ method.
centers = kmeans_plusplus_initializer(sample, 4).initialize();

read_sample方法似乎是从文本文件中读取示例数据。

最新更新