如果你想自己定义一个距离的function的话,scikit-learn是不行的,只支持Euclidean distance

如果你觉得spark可以的话,实际上sprk的k-means也是不行的,好一点的是支持Euclidean distance,还支持cosine distance

如果你想自己定义function处理的话,二个方法:

1、自己实现算法,可参考的文档:

一个简单的讲解

https://medium.com/machine-learning-algorithms-from-scratch/k-means-clustering-from-scratch-in-python-1675d38eee42

一个简单的代码:

https://github.com/pavankalyan1997/Machine-learning-without-any-libraries/tree/master/2.Clustering/1.K_Means_Clustering

这个代码仓库有很多实现不依赖于第三方库

stackoverflow的高赞的回答也实现了一个简单的

https://stackoverflow.com/questions/5529625/is-it-possible-to-specify-your-own-distance-function-using-scikit-learn-k-means

自己实现算法的问题:即使不考虑扩展性,也需要考虑实现多线程版本,还需要看训练的精度

2、找其他开源的项目

参考: https://stackoverflow.com/questions/5529625/is-it-possible-to-specify-your-own-distance-function-using-scikit-learn-k-means

可以引用的nltk的库:

from nltk.cluster.kmeans import KMeansClusterer
NUM_CLUSTERS = <choose a value>
data = <sparse matrix that you would normally give to scikit>.toarray()kclusterer = KMeansClusterer(NUM_CLUSTERS, distance=nltk.cluster.util.cosine_distance, repeats=25)
assigned_clusters = kclusterer.cluster(data, assign_clusters=True)

可以引用pyclustering 的库

from pyclustering.cluster.kmeans import kmeans
from pyclustering.utils.metric import type_metric, distance_metricuser_function = lambda point1, point2: point1[0] + point2[0] + 2
metric = distance_metric(type_metric.USER_DEFINED, func=user_function)# create K-Means algorithm with specific distance metric
start_centers = [[4.7, 5.9], [5.7, 6.5]];
kmeans_instance = kmeans(sample, start_centers, metric=metric)# run cluster analysis and obtain results
kmeans_instance.process()
clusters = kmeans_instance.get_clusters()
对应github地址:https://github.com/annoviko/pyclustering

可以引用tslearn

if you’re clustering time series, you can use the tslearn python package, when you can specify a metric (dtw, softdtw, euclidean).

K-means聚类自定义距离计算相关推荐

  1. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  2. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  3. k means聚类算法_K-Means 聚类算法 20210108

    说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...

  4. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  5. 聚类——基于距离阈值的聚类算法

    基于距离阈值的聚类算法 1.最大最小距离算法 算法思想 对待分类模式样本集以最大距离选取新的聚类中心,以最小距离原则进行模式归类. 算法步骤 从N个样本集中的任选取一个样本,作为第一个聚类中心 z 1 ...

  6. 机器学习(十四):K均值聚类(kmeans)

    k均值聚类方法是一种无监督机器学习技术,用于识别数据集中的数据对象集群.有许多不同类型的聚类方法,但k -means是最古老和最平易近人的方法之一.这些特性使得在 Python 中实现k -means ...

  7. scikit-learn库中聚类算法自定义距离度量方式

    scikit-learn是非常漂亮的一个机器学习库,在某些时候,使用这些库能够大量的节省你的时间,至少,我们用Python,应该是很难写出速度快如斯的代码的. scikit-learn官方出了一些文档 ...

  8. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  9. 聚类性能度量指标及距离计算

    Python实现KMeans算法 1.外部指标 将聚类结果与某个"参考模型进行比较" 每次抽出两个样本,讨论所属聚类结果和参考模型,确定四个值: a:聚类结果同属于一类,参考模型同 ...

最新文章

  1. 让你上瘾的网易云音乐推荐算法,用Word2vec就可以实现
  2. c++中的左移、右移运算
  3. 指定版本的python运行和指定python版本的pip
  4. 免安装Mysql在Mac中的神坑之Access denied for user 'root'@'localhost' (using password: YES)
  5. mongodb php代码实例,php操作mongoDB实例分析
  6. linux mysql 没有密码忘记,在linux系统中,如果忘记了MySQL的root密码,有没有办法重新设置新密码呢?...
  7. ESP8266:(1)向手机传输温度
  8. 【ElasticSearch】Es 源码之 PersistedClusterStateService 源码解读
  9. SAP License:SAP不便解决的问题之五——客供料
  10. 区块链软件公司:区块链技术的应用
  11. 常用技巧性CSS:颜色渐变,截断英文单词,阴影文字.
  12. 指路明灯,99%自动化测试从业者都该看的职业规划
  13. 爬虫:查找自己浏览器headers
  14. Tensorflow游乐场
  15. 【银河麒麟V10】【桌面】安装虚拟pdf打印机
  16. Faster R-CNN论文翻译——中英文对照
  17. MDX示例:求解中位数、四分位数(median、quartile)
  18. 用matlab画椭圆曲线方程,椭圆曲线入门详解
  19. SDIO_WiFi驱动学习之安卓WLAN架构介绍及调用流程分析
  20. 内网入口——代理搭建端口转发

热门文章

  1. Alpha阶段事后分析
  2. @ConditionalOnProperty 详解
  3. 7.第一次使用java连接mongodb遇到的问题
  4. RepositoryBase文件解析
  5. 深入探讨下Linux下修改hostname的五个问题(四)
  6. HDU-1285 确定比赛名次 拓扑排序
  7. 苹果手机安装应用后无法上网问题的解决方法
  8. C++实现各种排序算法
  9. 如何修改远程登录端口号?
  10. 谭浩强C程序设计第四版答案