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

来源:百度知道 编辑:UC知道 时间:2024/09/24 22:55:05
编程对以下数据(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),

你这是四维数据,我这是一维数据kmeans,你试试吧

#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
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();
Update