| //k-means 算法
void k_means(vector<point_t>dataset,int k,int looptimes)
{
        vector<point_t> centroid;   //存放中心点
        int n =1;
        int len = dataset.size();
        //1.随机选择K个质点
        centroid = RandomSeceleK(dataset,k);
        //打印中心点(质点)
        for(int i=0;i<k;i++)
        {
          cout<<"x:"<<centroid[i].x<<"\ty:"<<centroid[i].y<<"\tc:"<<centroid[i].cluster<<endl;
        }
        //循环迭代
        for(int i = 0;i<looptimes;i++)
        {
           //2.计算所有样本点到聚类中心的距离,根据远近聚类
           dataset = DistanceCluster(dataset,centroid,k);          
           //3.更新质心,迭代聚类
           centroid = UpdateCentroid(dataset,centroid,k);   
        }
        //打印所有点聚类情况
         for(int i=0;i<dataset.size();i++)
           {
             cout<<dataset[i].cluster<<endl;
           }
        //打印最后更新质心
        for(int i=0;i<k;i++)
        {
                cout<<"x:"<<centroid[i].x<<"\ty:"<<centroid[i].y<<"\tc:"<<centroid[i].cluster<<endl;
        }
    //写入到文件保存
        fstream clustering;
        clustering.open("clustering.txt",ios::out);
        for(int i=0;i<len;i++)
        {
                clustering<<dataset[i].x<<","<<dataset[i].y<<","<<dataset[i].cluster<<"\n";
        }
        clustering.close();
}
 
 |