基于Excel Lambda的一维K-means聚类函数及多维版本优化探讨
基于Excel Lambda的一维K-means聚类实现
我之前尝试用Excel Lambda函数实现K-means聚类,很快就完成了一维版本。一维聚类在实际聚类场景中颇具实用性:比如可用于分析园区楼宇间人员通行数据,验证管理层关于员工借外出离岗的猜测;还能对发票金额进行聚类,构建分类器。
以下是基于Lambda、无需VBA的一维K-means函数:
=LAMBDA( dataArray, nodes, [changeThreshold], [kArray], LET( nSeq, SEQUENCE(, nodes), n, IF(ISOMITTED(kArray), nSeq / (nodes + 1), kArray), adjust, LAMBDA(array, nArray, BYCOL( IF(BYROW(ABS(array - nArray), LAMBDA(x, MATCH(MIN(x), x, 0))) = nSeq, array, ""), LAMBDA(x, AVERAGE(x)) ) ), next_kArray, adjust(dataArray, n), IF( SUM(ABS(next_kArray - n)) <= IF(ISOMITTED(changeThreshold), 0.01, changeThreshold), kArray, KMEANS_1D( dataArray, nodes, changeThreshold, next_kArray ) ) )
参数说明
- dataArray:待聚类的一维(列方向)数据
- nodes:聚类的簇数量
- changeThreshold:可选参数,迭代停止的最小聚合变化值(默认0.01)
- kArray:递归所用的可选数组
注意事项
- 该函数无错误处理,仅支持单列垂直数据
- 未采用随机初始节点,而是使用均匀分布避免函数易失性
目前实现多维版本难度较大,特此分享并寻求改进方案或替代思路。
内容的提问来源于stack exchange,提问作者mark fitzpatrick
相关产品推荐
相关产品推荐

