Lloyd算法的js代码实现
时间: 2023-08-04 09:07:00 浏览: 125
以下是Lloyd算法的JavaScript实现:
```javascript
function lloydAlgorithm(points, k) {
// 初始化k个聚类中心点
let centroids = [];
for (let i = 0; i < k; i++) {
centroids.push(points[i]);
}
// 迭代更新聚类中心点
let iterations = 10; // 迭代次数
while (iterations--) {
let clusters = []; // 每个聚类的数据点
for (let i = 0; i < k; i++) {
clusters.push([]);
}
// 分配每个数据点到离其最近的聚类中心点
for (let i = 0; i < points.length; i++) {
let distances = [];
for (let j = 0; j < k; j++) {
distances.push(distance(points[i], centroids[j]));
}
let minIndex = distances.indexOf(Math.min(...distances));
clusters[minIndex].push(points[i]);
}
// 更新聚类中心点为每个聚类的平均值
for (let i = 0; i < k; i++) {
centroids[i] = average(clusters[i]);
}
}
return clusters;
}
// 计算两个点之间的欧几里得距离
function distance(p1, p2) {
let sum = 0;
for (let i = 0; i < p1.length; i++) {
sum += Math.pow(p1[i] - p2[i], 2);
}
return Math.sqrt(sum);
}
// 计算一组点的平均值
function average(points) {
let sum = points[0].map((_, i) => points.reduce((prev, curr) => prev[i] + curr[i], 0));
return sum.map((s) => s / points.length);
}
```
其中,`points`是一个二维数组,表示所有数据点的坐标;`k`表示要分成的聚类数。函数返回一个数组,包含了每个聚类中的数据点。
阅读全文