k-means算法,dbscan算法,AGENS算法三种算法实现经纬度
1条回答 默认 最新
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 文章:聚类分析(K-means 层次聚类和基于密度DBSCAN算法三种实现方式) 中也许有你想要的答案,请看下吧
- 除此之外, 这篇博客: k-means算法(DBSCAN算法),聚类算法中的 一、K-means算法是最经典的聚类算法(无监督学习), 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
本文对scikit-learn中的kmeans进行说明,以便以后使用。
首先:k-means算法的优劣如下
优势:简单,快速,适合常规数据集
劣势:K值难确定,复杂度与样本呈线性关系,很难发现任意形状的簇(针对凸数据集效果较好:
在欧氏空间中,凸集是对于集合内的每一对点,连接该对点的直线段上的每个点也在该集合内。凹集则不满足)
要使用kmeans算法的话,首先需要进行import:
from sklearn.cluster import KMeans
scikit-learn中,通过KMeans进行对象的新建,并传入算法参数进行参数设置。
KMeans传参详解:
1、n_clusters : k值,聚类中心数量(开始时需要产生的聚类中心数量),默认为8
2、max_iter : 算法运行的最大迭代次数,默认300,凸数据集不用管这个数,凹数据集需要指定。
3、tol: 容忍的最小误差,当误差小于tol就会退出迭代(算法中会依赖数据本身),默认为1e-4
4、n_init : (用不同的初始化之心运行计算的次数)k-means算法会随机运行n_init次,最终的结果将是最好的一个聚类结果,默认10
5、init : 即初始值(质心)选择的方式,有三个选择{
优化过的'k-means++', ,一般默认'k-means++' ,
完全随机选择'random': 随机选择k个实例作为聚类中心
自己指定的初始化质心,ndarray:如果传入为矩阵(ndarray),则将该矩阵中的每一行作为聚类中心
初始化过程如下:
从输入的数据点集合(要求有k个聚类)中随机选择一个点作为第一个聚类中心;(2)、对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);(3)、选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;(4)、重复2和3直到k个聚类中心被选出来
6、algorithm :可选的K-means距离计算算法, 可选{"auto", "full" or "elkan",default="auto"}
"full":传统的距离计算方式.,支持稀疏数据。
"elkan":使用三角不等式,效率更高,但是目前不支持稀疏数据。1、计算任意两个聚类中心的距离;2当计算x点应该属于哪个聚类中心时,当发现2*S(x,K1)<S(x,K2)时,根据三角不等式,S(x,K2)>S(x,K1),
"auto":当为稀疏矩阵时,采用full,否则elkan。
7、precompute_distances : 是否将数据全部放入内存计算,可选{'auto', True, False},开启时速度更快但是更耗内存.
'auto' : 当n_samples * n_clusters > 12million,不放入内存,否则放入内存,double精度下大概要多用100M的内存
True : 进行预计算
False : 不进行预计算
8、n_jobs : 同时进行计算的核数(并发数),n_jobs用于并行计算每个n_init,如果设置为-1,使用所有CPU,若果设置为1,不并行,也可以自定义个数
9、random_state : 用于随机产生中心的随机序列,指定确切的数字后,可以让每次运行程序,产生的结果都一样
10、verbose : 是否输出详细信息,默认为0,值越大,细节打印越多。
● int:冗长度★ 0:不输出训练过程● 1:偶尔输出● >1:对每个子模型都输出
11、copy_x : 是否直接在原矩阵上进行计算。默认为True,会copy一份进行计算。
新建对象后,常用的方法包括fit、predict、cluster_centers_和labels。fit(X)函数对数据X进行聚类,使用predict方法进行新数据类别的预测,使用cluster_centers_获取聚类中心,使用labels_获取训练数据所属的类别,inertia_获取每个点到聚类中心的距离和。一维数据的聚类:
参考链接from sklearn.cluster import KMeans import numpy as np x = np.random.random(10000) y = x.reshape(-1,1) km = KMeans() km.fit(y) km.cluster_centers_
核心的操作是y = x.reshape(-1,1),含义为将一维数据变成只有1列,行数不知道多少(-1代表根据剩下的维度计算出数组的另外一个shape属性值)。
多维数据聚类样例:
import pandas as pd from sklearn.cluster import KMeans
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 求京东批量付款能替代天诚
- ¥15 slaris 系统断电后,重新开机后一直自动重启
- ¥15 51寻迹小车定点寻迹
- ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
- ¥15 关于vue2中methods使用call修改this指向的问题
- ¥15 idea自动补全键位冲突
- ¥15 请教一下写代码,代码好难
- ¥15 iis10中如何阻止别人网站重定向到我的网站
- ¥15 滑块验证码移动速度不一致问题
- ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含