作业帮 > 综合 > 作业

使用K-Means 算法进行聚类分析程序

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/29 22:49:46
使用K-Means 算法进行聚类分析程序
编程对以下数据(150 个样本)使用K-Means 算法进行聚类分析.
(4.8,3.1,1.6,0.2),
(5.4,3.4,1.5,0.4),
(5.2,4.1,1.5,0.1),
(5.5,4.2,1.4,0.2),
(4.9,3.1,1.5,0.2),
(5.0,3.2,1.2,0.2),
(5.5,3.5,1.3,0.2),
(4.9,3.6,1.4,0.1),
(4.4,3.0,1.3,0.2),
(5.1,3.4,1.5,0.2),
(5.0,3.5,1.3,0.3),
(4.5,2.3,1.3,0.3),
(4.4,3.2,1.3,0.2),
(5.0,3.5,1.6,0.6),
(5.1,3.8,1.9,0.4),
(4.8,3.0,1.4,0.3),
(5.1,3.8,1.6,0.2),
(4.6,3.2,1.4,0.2),
(5.3,3.7,1.5,0.2),
(5.0,3.3,1.4,0.2),
(7.0,3.2,4.7,1.4),
(6.4,3.2,4.5,1.5),
(6.9,3.1,4.9,1.5),
(5.5,2.3,4.0,1.3),
(6.5,2.8,4.6,1.5),
(5.7,2.8,4.5,1.3),
(6.3,3.3,4.7,1.6),
(4.9,2.4,3.3,1.0),
(6.6,2.9,4.6,1.3),
(5.2,2.7,3.9,1.4),
(5.0,2.0,3.5,1.0),
(5.9,3.0,4.2,1.5),
(6.0,2.2,4.0,1.0),
(6.1,2.9,4.7,1.4),
(5.6,2.9,3.9,1.3),
(6.7,3.1,4.4,1.4),
(5.6,3.0,4.5,1.5),
(5.8,2.7,4.1,1.0),
(6.2,2.2,4.5,1.5),
(5.6,2.5,3.9,1.1),
(5.9,3.2,4.8,1.8),
(6.1,2.8,4.0,1.3),
(6.3,2.5,4.9,1.5),
(6.1,2.8,4.7,1.2),
(6.4,2.9,4.3,1.3),
(6.6,3.0,4.4,1.4),
(6.8,2.8,4.8,1.4),
(6.7,3.0,5.0,1.7),
(6.0,2.9,4.5,1.5),
(5.7,2.6,3.5,1.0),
(5.5,2.4,3.8,1.1),
(5.5,2.4,3.7,1.0),
(5.8,2.7,3.9,1.2),
(6.0,2.7,5.1,1.6),
(5.4,3.0,4.5,1.5),
(6.0,3.4,4.5,1.6),
(6.7,3.1,4.7,1.5),
(6.3,2.3,4.4,1.3),
(5.6,3.0,4.1,1.3),
(5.5,2.5,5.0,1.3),
(5.5,2.6,4.4,1.2),
(6.1,3.0,4.6,1.4),
(5.8,2.6,4.0,1.2),
(5.0,2.3,3.3,1.0),
(5.6,2.7,4.2,1.3),
(5.7,3.0,4.2,1.2),
(5.7,2.9,4.2,1.3),
(6.2,2.9,4.3,1.3),
(5.1,2.5,3.0,1.1),
(5.7,2.8,4.1,1.3),
(6.3,3.3,6.0,2.5),
(5.8,2.7,5.1,1.9),
(7.1,3.0,5.9,2.1),
(6.3,2.9,5.6,1.8),
(6.5,3.0,5.8,2.2),
(7.6,3.0,6.6,2.1),
(4.9,2.5,4.5,1.7),
(7.3,2.9,6.3,1.8),
(6.7,2.5,5.8,1.8),
(7.2,3.6,6.1,2.5),
(6.5,3.2,5.1,2.0),
(6.4,2.7,5.3,1.9),
(6.8,3.0,5.5,2.1),
(5.7,2.5,5.0,2.0),
(5.8,2.8,5.1,2.4),
(6.4,3.2,5.3,2.3),
(6.5,3.0,5.5,1.8),
(7.7,3.8,6.7,2.2),
(7.7,2.6,6.9,2.3),
(6.0,2.2,5.0,1.5),
(6.9,3.2,5.7,2.3),
(5.6,2.8,4.9,2.0),
(7.7,2.8,6.7,2.0),
(6.3,2.7,4.9,1.8),
(6.7,3.3,5.7,2.1),
(7.2,3.2,6.0,1.8),
(6.2,2.8,4.8,1.8),
(6.1,3.0,4.9,1.8),
(6.4,2.8,5.6,2.1),
(7.2,3.0,5.8,1.6),
(7.4,2.8,6.1,1.9),
(7.9,3.8,6.4,2.0),
(6.4,2.8,5.6,2.2),
(6.3,2.8,5.1,1.5),
(6.1,2.6,5.6,1.4),
(7.7,3.0,6.1,2.3),
(6.3,3.4,5.6,2.4),
(6.4,3.1,5.5,1.8),
(6.0,3.0,4.8,1.8),
(6.9,3.1,5.4,2.1),
(6.7,3.1,5.6,2.4),
(6.9,3.1,5.1,2.3),
(5.8,2.7,5.1,1.9),
(6.8,3.2,5.9,2.3),
(6.7,3.3,5.7,2.5),
(6.7,3.0,5.2,2.3),
(6.3,2.5,5.0,1.9),
(6.5,3.0,5.2,2.0),
(6.2,3.4,5.4,2.3),
(5.9,3.0,5.1,1.8)
你这是四维数据,我这是一维数据kmeans,你试试吧
#include
#include
#include
#include
using namespace std;
int N; //数据个数
int K; //集合个数
int *CenterIndex; //质心索引集合,即属于第几个参考点
double *Center; //质心集合
double *CenterCopy;
double *DataSet;
double **Cluster;
int *Top;
/*算法描述:
C-Fuzzy均值聚类算法采用的是给定类的个数K,将N个元素(对象)分配到K个类中去使得类内对象之间的相似性最大,而类之间的相似性最小 */
//函数声明部分
void InitData();
void InitCenter();
void CreateRandomArray(int n,int k,int *centerIndex);
void CopyCenter();
void UpdateCluster();
void UpdateCenter();
int GetIndex(double value,double *centerIndex);
void AddtoCluster(int index,double value);
void print();
bool IsEqual(double *center,double *centercopy);
int main()
{
int Flag=1;
InitData();
while(Flag)//无限次循环
{
UpdateCluster();
UpdateCenter();
if(IsEqual(Center,CenterCopy))
{
Flag=0;
}
else
{
CopyCenter();
}
}
print();
getchar();
system("pause");
}
void InitData()
{
int i=0;
int a;
coutN;
coutK;
if(K>N)
{
return;
}
CenterIndex =new int [sizeof(int)];
Center =new double [sizeof(double)*K];
CenterCopy =new double [sizeof(double)*K];
DataSet =new double [sizeof(double)*N];
Cluster =new double* [sizeof(double*)*K];
Top =new int [sizeof(int)*K];
//初始化K个类的集合
for(i=0;i