matlab 怎么规定聚类初始点,MATLAB实例:聚类初始化方法与数据归一化方法

MATLAB实例:聚类初始化方法与数据归一化方法

1. 聚类初始化方法:init_methods.m

function label=init_methods(data, K, choose)

% 输入:无标签数据,聚类数,选择方法

% 输出:聚类标签

if choose==1

%随机初始化,随机选K行做为聚类中心,并用欧氏距离计算其余点到其聚类,将数据集分为K类,输出每一个样例的类标签

[X_num, ~]=size(data);

rand_array=randperm(X_num); %产生1~X_num之间整数的随机排列

para_miu=data(rand_array(1:K), :); %随机排列取前K个数,在X矩阵中取这K行做为初始聚类中心

%欧氏距离,计算(X-para_miu)^2=X^2+para_miu^2-2*X*para_miu',矩阵大小为X_num*K

distant=repmat(sum(data.*data,2),1,K)+repmat(sum(para_miu.*para_miu,2)',X_num,1)-2*data*para_miu';

%返回distant每行最小值所在的下标

[~,label]=min(distant,[],2);

elseif choose==2

%用kmeans进行初始化聚类,将数据集聚为K类,输出每一个样例的类标签

label=kmeans(data, K);

elseif choose==3

%用FCM算法进行初始化

options=[NaN, NaN, NaN, 0];

[~, responsivity]=fcm(data, K, options); %用FCM算法求出隶属度矩阵

[~, label]=max(responsivity', [], 2);

end

2. 数据归一化方法:normlization.m

function data = normlization(data, choose)

% 数据归一化

if choose==0

% 不归一化

data = data;

elseif choose==1

% Z-score归一化

data = bsxfun(@minus, data, mean(data));

data = bsxfun(@rdivide, data, std(data));

elseif choose==2

% 最大-最小归一化处理

[data_num,~]=size(data);

data=(data-ones(data_num,1)*min(data))./(ones(data_num,1)*(max(data)-min(data)));

end

注意:能够在elseif后面添加本身的方法。ide

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值