這篇文章中的k-means是簡單的實現,沒有調初始質心點和k的值,k的值設為3,初始質心點是測試資料的前三個。
並且沒有對資料進行歸一化處理,只是用原始資料進行聚類。
下面是**:
#include #include#include#include#include#include#define k 3
using namespace std;
typedef vectortrain;
int datanum;
int dimnum;
int min(double d1,double d2,double d3)
void getmindistance(vector& trains,vectorcen)
void kmeans(vector& trains)
while(isnotchange)
else
}cout
cout
cout
ifstream infile(fname);
if(!infile)
trains.push_back(train);
}cout<
測試結果如下圖:
第一列即為聚類結果,1表示第一類,2表示第二類,3表示第3類
只是最簡單的k-means過程,,
如果有好的調k-means的方法,歡迎提出~
k means的簡單實現
部分 import random import math import numpy as np import operator defget distance x1,x2 得到兩點之間的距離 dist x y for x,y in zip x1,x2 distance 0 for i in dist...
Python實現簡單的K Means演算法,視覺化
執行效果 隨機生成大致是k個類別的點,用均勻分布生成中心點的位置,用高斯分布生成中心點周圍的點 def generatorn k center np.random.rand 1 20,np.random.rand 1 20 for in range k data for x,y in center ...
C 實現簡單的K means聚類演算法
namespace k means public int getprocess endregion region 根據點到質心的距離,將點放到不同的組中 for int i 0 i num i if j 0 else int groupknum groupnum index resultp inde...