试图理解/开始使用MySQL中的k-means聚类算法
我第一次接触MySQL,一直在玩我在上找到的sql位置聚类算法。我觉得集群很有趣,我正试图弄清楚它是如何工作的,但遇到了一些麻烦 这是我在使用sqlfiddle.com时输入的代码试图理解/开始使用MySQL中的k-means聚类算法,mysql,cluster-analysis,k-means,Mysql,Cluster Analysis,K Means,我第一次接触MySQL,一直在玩我在上找到的sql位置聚类算法。我觉得集群很有趣,我正试图弄清楚它是如何工作的,但遇到了一些麻烦 这是我在使用sqlfiddle.com时输入的代码 create table km_data (id int primary key, cluster_id int, lat double, lng double); create table km_clusters (id int auto_increment primary key, lat do
create table km_data (id int primary key, cluster_id int,
lat double, lng double);
create table km_clusters (id int auto_increment primary key,
lat double, lng double
);
INSERT INTO km_data
VALUES(1,0,88.3324,56.343);
INSERT INTO km_data
VALUES(2,0,88.3324,56.342);
INSERT INTO km_data
VALUES(3,0,83.234,54.234);
INSERT INTO km_data
VALUES(4,0,88.33,57.234);
INSERT INTO km_data
VALUES(5,0,88.234,86.654);
INSERT INTO km_data
VALUES(6,0,78.673,56.854);
INSERT INTO km_data
VALUES(7,0,83.136,46.958);
INSERT INTO km_clusters (lat, lng) SELECT lat, lng FROM km_data LIMIT 10;
UPDATE km_data d SET cluster_id =
(SELECT id FROM km_clusters c ORDER BY POW(d.lat-c.lat,2)+POW(d.lng-c.lng,2) ASC LIMIT 1);
UPDATE km_clusters C, (SELECT cluster_id, AVG(lat) AS lat, AVG(lng) AS lng
FROM km_data GROUP BY cluster_id) D SET C.lat=D.lat, C.lng=D.lng WHERE C.id=D.cluster_id;
这编译得很好,但当我将更新部分放入一个循环中,因为网站有更新部分,所以它会不断更新SQL fiddle抱怨的集群
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解第2行“更新km_数据d集cluster_id=从km_clusters c按POW顺序选择id”附近使用的正确语法
我注意到Till不是粗体的,我想知道这是否是一个适合用于这样的循环的术语:
BEGIN
UPDATE km_data d SET cluster_id =
(SELECT id FROM km_clusters c ORDER BY POW(d.lat-c.lat,2)+POW(d.lng-c.lng,2) ASC LIMIT 1);
UPDATE km_clusters C, (SELECT cluster_id, AVG(lat) AS lat, AVG(lng) AS lng
FROM km_data GROUP BY cluster_id) D SET C.lat=D.lat, C.lng=D.lng WHERE C.id=D.cluster_id;
UNTIL ROW_COUNT() = 0
END REPEAT;
此外,这个算法似乎只适用于大量数据,而不是我拥有的这对数据,这样的假设正确吗?我唯一一次在同一个集群中获得两条数据,它们的确切位置相同。也许这是一个错误,因为我没有让循环正常运行,尽管我已经通过连续10次运行相同的代码块模拟了循环。感谢您的帮助 不要这样做
简单地将数据加载到集群工具包(如sklearn或sklearn)中,在那里进行集群,然后将结果加载回数据库,速度会快很多倍
原因是这些工具只是针对这个用例进行了更好的优化。SQL数据库适用于通用查询,但不适用于优化的学习算法
另一方面,不要在GPS坐标上使用k均值。K-均值是一种方差最小化技术。对于这样的数据,DBSCAN和光学等可以使用哈弗森距离的方法工作得更好。以下是一些例子:
这张照片还显示了这些数据的k-均值结果是多么糟糕,下面是长颈鹿图案的图像:
谢谢你的回复。我会调查的。