How to apply Silhouette Score for optimal K in MATLAB
68 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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")
Antworten (1)
Walter Roberson
am 11 Jan. 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 Kommentare
Walter Roberson
am 12 Jan. 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);
end
plot(s)
Siehe auch
Kategorien
Mehr zu Call Python from MATLAB finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!