Borrar filtros
Borrar filtros

How to apply Silhouette Score for optimal K in MATLAB

8 visualizaciones (últimos 30 días)
Med Future
Med Future el 10 de En. de 2023
Comentada: Walter Roberson el 12 de En. de 2023
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 =[0])
X = data[0]
dist_ji = 0
a = 0
for i in range(len(data[0])):
for j in range(p):
dist_ji += euclidean_dist(centroids[j,:],X[i,:])
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()
x = np.arange(10)
plt.title("Silhoutte Score")
plt.xlabel("K -->")

Respuestas (1)

Walter Roberson
Walter Roberson el 11 de En. de 2023
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 comentarios
Med Future
Med Future el 11 de En. de 2023
@Walter Roberson CentroidLocations is not any command in MATLAB
Walter Roberson
Walter Roberson el 12 de En. de 2023
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);

Iniciar sesión para comentar.




Community Treasure Hunt

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

Start Hunting!

Translated by