我正在编写一个比较k-means和LBG算法的工作程序。
我编写了一个k-means算法,它接受一个点列表和簇数,然后在屏幕上以不同的颜色绘制它们。它返回一个聚类列表,其中包含分配给它们的点列表。
现在,我的问题是:我可以以某种方式修改我的k-means来获得LBG算法吗?我尝试在线搜索LBG的一步一步解释,但维基百科上只有3个句子,我发现了数学家解释,其中包括4行代码,以及你必须购买的原始论文。有人可以解释/指点我这个指南吗?
谢谢。
编辑:拜托,没有非常难的技术论文,我用英语无法正确阅读。
Edit2:这是我的k-means类的代码:
public class k_means
{
public static List<Punktyzbior> oblicz(Punktyzbior punkty, int klasterctr)
{
List<Punktyzbior> wszystkieklastry = new List<Punktyzbior>();
List<List<Punkt>> wszystkiegrupy = pomocnicze_listy.PodzielListe<Punkt>(punkty, klasterctr);
foreach (List<Punkt> grupa in wszystkiegrupy)
{
Punktyzbior klaster = new Punktyzbior();
klaster.AddRange(grupa);
wszystkieklastry.Add(klaster);
}
int przejscia = 1;
while (przejscia > 0)
{
przejscia = 0;
foreach (Punktyzbior klaster in wszystkieklastry)
{
for (int punktIdx = 0; punktIdx < klaster.Count; punktIdx++)
{
Punkt punkt = klaster[punktIdx];
int najblizszyklaster = znajdzNajblizszy(wszystkieklastry, punkt);
if (najblizszyklaster != wszystkieklastry.IndexOf(klaster))
{
if (klaster.Count > 1)
{
Punkt usunPunkt = klaster.usunPunkt(punkt);
wszystkieklastry[najblizszyklaster].dodajPunkt(usunPunkt);
przejscia += 1;
}
}
}
}
}
return (wszystkieklastry);
}
public static int znajdzNajblizszy(List<Punktyzbior> wszystkieklastry, Punkt punkt)
{
double minOdl = 0.0;
int najblizszyCIdx = -1;
for (int k = 0; k < wszystkieklastry.Count; k++)
{
double odl = Punkt.znajdzOdl(punkt, wszystkieklastry[k].c);
if (k == 0)
{
minOdl = odl;
najblizszyCIdx = 0;
}
else if (minOdl > odl)
{
minOdl = odl;
najblizszyCIdx = k;
}
}
return (najblizszyCIdx);
}
}
答案 0 :(得分:1)
而不是试图从kmeans到LBG,我宁愿尝试翻译&#34;这个java代码到c#,我觉得它会容易得多。
尝试这样做,如果您对实施有特定问题,请告诉我们。
https://github.com/internaut/JGenLloydCluster/blob/master/src/net/mkonrad/cluster/GenLloyd.java