How to apply Silhouette Score for optimal K in MATLAB

68 次查看(过去 30 天)
Hello,I Hope you are doing well. I have the following dataset i want to apply Silhouette Score from scrath.
I have the Python Script for that. Can anybody help me in implmenting it into MATLAB
The following code is in Python
costs = []
for p in range(10):
kmeans = K_Means(k=p,data = data[0],centeriod_init='random')
centroids, cluster_assignments, iters, orig_centroids = kmeans.fit(data[0])
X = data[0]
dist_ji = 0
a = 0
s=0
for i in range(len(data[0])):
for j in range(p):
dist_ji += euclidean_dist(centroids[j,:],X[i,:])
#print(dist_ji)
dist_ji -= sum(cluster_assignments[:,1])/len(data[0])
a = sum(cluster_assignments[:,1])/(len(data[0])-1)
s = (dist_ji - a)/max(dist_ji,a)
s = np.array(s)
s = s.item()
costs.append(s)
x = np.arange(10)
plt.plot(x,costs)
plt.title("Silhoutte Score")
plt.xlabel("K -->")
plt.ylabel("Dispersion")

回答(1 个)

Walter Roberson
Walter Roberson 2023-1-11
I do not know enough python to know how to convert this code.
I suspect: call kmeans() with p as the number of centroids, getting back indices and centroid locations. Then take
nearest_center = CentroidLocations(CentroidIdx,:);
a = mean((data - nearest_center).^2,2);
or something like that.
  4 个评论
Walter Roberson
Walter Roberson 2023-1-12
N = 10;
s = zeros(size(data,1), N);
for p = 1 : N
[CentroidIdx, CentroidLocations] = kmeans(data, p); %random initialization is default
nearest_center = CentroidLocations(CentroidIdx,:);
dist_ji = sum((data - nearest_center).^2,2);
a = mean(dist_ji);
s(:,p) = (dist_ji - a)./max(dist_ji,a);
end
plot(s)

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Call Python from MATLAB 的更多信息

产品


版本

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by