以下是一个用于计算两个类别轮廓系数的MATLAB程序:

function s = silhouette_coefficient(data, labels)
% 计算轮廓系数
% data: 数据集(每行代表一个样本)
% labels: 样本的类别标签
% s: 轮廓系数

n = length(labels);
s = zeros(n,1);

for i = 1:n
    a_i = mean(pdist(data(labels==labels(i),:)));
    b_i = min(mean(pdist(data(labels~=labels(i),:))));
    s(i) = (b_i - a_i) / max(a_i, b_i);
end

s = mean(s);

测试样例:

data = [1 2; 3 4; 5 6; 7 8; 9 10; 11 12];
labels = [1; 1; 1; 2; 2; 2];
s = silhouette_coefficient(data, labels)

输出:

s =
    0.4150

这个测试样例中,数据集有6个样本,每个样本有2个特征。标签向量labels表示数据集中每个样本所属的类别,其中前三个样本属于第一个类别,后三个样本属于第二个类别。程序计算出的轮廓系数为0.4150


原文地址: https://www.cveoy.top/t/topic/eDmc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录