日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习 K-means算法_0(Matlab实现)

發(fā)布時(shí)間:2024/4/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习 K-means算法_0(Matlab实现) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、解析
  • 二、效果
    • 1、數(shù)據(jù)展示
    • 2、聚點(diǎn)迭代路徑
  • 三、代碼
    • 1、mian
    • 2、K_means
    • 3、Dist_Func
    • 4、A_Rand
    • 5、Show

一、解析

K_means:
接收數(shù)據(jù)集以及聚點(diǎn)信息
返回聚點(diǎn)軌跡,聚點(diǎn)簇,迭代次數(shù),偏差以及偏差和

Dis_Func:
接收兩點(diǎn)的坐標(biāo)
返回兩點(diǎn)距離
此處為歐式距離(可根據(jù)需求修改)

A_Rand:
接收數(shù)據(jù)集大小,分組數(shù)量,每組數(shù)量以及離散程度
返回隨機(jī)生成有規(guī)律分布的數(shù)據(jù)集

Show:
接收聚點(diǎn)簇軌跡,并作出聚點(diǎn)移動(dòng)軌跡

二、效果

1、數(shù)據(jù)展示

2、聚點(diǎn)迭代路徑

‘+’表示數(shù)據(jù)集分布
‘*’表示聚點(diǎn)起點(diǎn)
直線表示聚點(diǎn)迭代軌跡

三、代碼

1、mian

%A:數(shù)據(jù)集 %size_A:數(shù)據(jù)集大小 %Points:聚點(diǎn)集 %nums_Points:聚點(diǎn)數(shù)量 %Error:誤差和 %Max_Iteration:最大迭代次數(shù)size_A=[20,2]; A=A_Rand(size_A,4,5,2); %A=Temp; plot(A(:,1),A(:,2),'+') hold on; nums_Points=4; Points=50+5.*rand(nums_Points,size_A(2)); plot(Points(:,1),Points(:,2),'*') Error=9; Max_Iteration=20;%Points:聚點(diǎn)軌跡 %Points_A:聚點(diǎn)簇 %flag:迭代次數(shù) %Points_Centre_Variance:聚點(diǎn)簇偏差 %Points_Centre_Variance_Sum:聚點(diǎn)簇偏差和 [Track_Points,Points_A,flag, Points_Centre_Variance,Points_Centre_Variance_Sum]=K_means(A,size_A,Points,nums_Points,Error,Max_Iteration); %聚點(diǎn)軌跡作圖 Show(A,size_A,Track_Points, nums_Points,flag+1);disp("最終聚點(diǎn):"); disp(Track_Points((1+flag*nums_Points):(flag+1)*nums_Points,:)); disp("聚點(diǎn)簇:"); disp(Points_A); disp("迭代次數(shù):"); disp(flag); disp("聚點(diǎn)簇偏差:"); disp(Points_Centre_Variance); disp("聚點(diǎn)簇偏差和:"); disp(Points_Centre_Variance_Sum);

2、K_means

function [Track_Points,Points_A,flag, Points_Centre_Variance,Points_Centre_Variance_Sum] = K_means(A,size_A,Points,nums_Points,Error,Max_Iteration) %A:���?� %size_A:���?���С %Points:�?? %nums_Points:�?��� %Error:���?�������%聚點(diǎn)軌跡記錄 Track_Points=[]; Track_Points=[Track_Points;Points];%�������� flag=0;%���?�?������ ���� Dist_A_P=zeros(size_A(1),1+nums_Points); Dist_A_P(:,1)=(1:size_A(1))'; for i=1:size_A(1)for j=1:nums_PointsDist_A_P(i,j+1)=Dist_Func(A(i,:),Points(j,:),nums_Points);end end%�?����� ���� �� Points_A=zeros(nums_Points,2+size_A(1)); Points_A(:,1)=(1:nums_Points)'; Points_A(:,2)=0; for i=1:size_A(1)temp=find(Dist_A_P(i,2:1+nums_Points)==min(Dist_A_P(i,2:1+nums_Points)));Points_A(temp(1),2)=Points_A(temp(1),2)+1;Points_A(temp(1),2+Points_A(temp(1),2))=i; end%���?����� ���� �������?����� Points_Centre=zeros(nums_Points,1+size_A(2)); Points_Centre(:,1)=(1:nums_Points)'; for i=1:nums_PointsSum=zeros(1,size_A(2));for j=1:Points_A(i,2)Sum=Sum+A(Points_A(i,2+j),:);endif(Points_A(i,2)~=0)Points_Centre(i,2:1+size_A(2))=Sum./Points_A(i,2);end end%?������ ���� ?�� Points_Centre_Variance=zeros(nums_Points,2); Points_Centre_Variance(:,1)=(1:nums_Points)'; Points_Centre_Variance_Sum=0; for i=1:nums_PointsSum=0;for j=1:Points_A(i,2)Sum=Sum+Dist_Func(Points(i,:),A(Points_A(i,2+j),:),nums_Points);endif(Points_A(i,2)~=0)Points_Centre_Variance(i,2)=Sum./Points_A(i,2);endPoints_Centre_Variance_Sum=Points_Centre_Variance_Sum+Points_Centre_Variance(i,2); endwhile(Points_Centre_Variance_Sum>Error && flag<Max_Iteration)%����������1flag=flag+1;%����Pointsfor i=1:nums_Pointsif(Points_A(i,2)~=0)Points(i,:)=Points_Centre(i,2:1+size_A(2));endend%聚點(diǎn)軌跡記錄Track_Points=[Track_Points;Points];%���?�?������ ���� for i=1:size_A(1)for j=1:nums_PointsDist_A_P(i,j+1)=Dist_Func(A(i,:),Points(j,:),nums_Points);endend%�?����� ���� ��Points_A(:,2)=0;for i=1:size_A(1)temp=find(Dist_A_P(i,2:1+nums_Points)==min(Dist_A_P(i,2:1+nums_Points)));Points_A(temp(1),2)=Points_A(temp(1),2)+1;Points_A(temp(1),2+Points_A(temp(1),2))=i;end%���?����� ���� �������?�����for i=1:nums_PointsSum=zeros(1,size_A(2));for j=1:Points_A(i,2)Sum=Sum+A(Points_A(i,2+j),:);endif(Points_A(i,2)~=0)Points_Centre(i,2:1+size_A(2))=Sum./Points_A(i,2);endend%?������ ���� ?��Points_Centre_Variance_Sum=0;for i=1:nums_PointsSum=0;for j=1:Points_A(i,2)Sum=Sum+Dist_Func(Points(i,:),A(Points_A(i,2+j),:),nums_Points);endif(Points_A(i,2)~=0)Points_Centre_Variance(i,2)=Sum./Points_A(i,2);endPoints_Centre_Variance_Sum=Points_Centre_Variance_Sum+Points_Centre_Variance(i,2);end end end

3、Dist_Func

function [ret] = Dist_Func(A,B,nums_Points) ret=round(sqrt(sum((A-B).^2)),3); end

4、A_Rand

function [Ret_A] = A_Rand(size_A,nums1,nums2,Dispersion) %size_A:數(shù)據(jù)集大小 %nums1:分組數(shù)量 %nums2:每組數(shù)量 %Dispersion:每組離散程度temp=100.*rand(nums1,size_A(2)); Ret_A=Dispersion.*rand(size_A);for i=1:nums1Ret_A((nums2*(i-1)+1):(nums2*i),:)=Ret_A((nums2*(i-1)+1):(nums2*i),:)+temp(i,:); end end

5、Show

function [Ret_A] = Show(A,size_A,Track_Points,nums_Point,nums) %A:數(shù)據(jù)集 %size_A:數(shù)據(jù)集大小 %Track_Points:聚點(diǎn)軌跡 %nums_Point:聚點(diǎn)數(shù)量 %nums:聚點(diǎn)規(guī)模 for i=1:nums_Pointtemp1= Track_Points(nums_Point*[0:nums-1]+i,1);temp2= Track_Points(nums_Point*[0:nums-1]+i,2);plot(temp1,temp2);end

總結(jié)

以上是生活随笔為你收集整理的机器学习 K-means算法_0(Matlab实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。