华为云AI开发平台ModelArts二分k均值_云淘科技
概述
二分k-means算法是分层聚类(Hierarchical clustering)的一种,分层聚类是聚类分析中常用的方法。
分层聚类的策略一般有两种:
聚合:这是一种自底向上的方法,每一个观察者初始化本身为一类,然后两两结合。
分裂:这是一种自顶向下的方法,所有观察者初始化为一类,然后递归地分裂它们。二分k-means算法是分裂法的一种。
二分k-means算法是k-means算法的改进算法,相比k-means算法,它可以加速k-means算法的执行速度,因为它的相似度计算少了,能够克服k-means收敛于局部最小的缺点。
二分k-means算法的一般流程如下所示:
把所有数据初始化为一个簇,将这个簇分为两个簇。
选择满足条件的可以分解的簇。选择条件综合考虑簇的元素个数以及聚类代价(也就是误差平方和SSE),误差平方和的公式如下所示,其中 表示权重值, 表示该簇所有点的平均值。
使用k-means算法将可分裂的簇分为两簇。
一直重复2、3步,直到满足迭代结束条件。
输入
参数 |
子参数 |
参数说明 |
---|---|---|
inputs |
dataframe |
inputs为字典类型,dataframe为pyspark中的DataFrame类型对象 |
输出
spark pipeline类型的模型
参数说明
参数 |
子参数 |
参数说明 |
---|---|---|
input_features_str |
– |
输入的列名以逗号分隔组成的字符串,例如: “column_a” “column_a,column_b” |
cluster_feature_vector_col |
– |
算子输入的特征向量列的列名,默认为”model_features” |
prediction_col |
– |
算子输出的预测label的列名,默认为”prediction” |
k |
– |
想要聚类的个数,默认为2 |
max_iter |
– |
最大迭代次数,默认为100 |
min_divisible_cluster_size |
– |
值如果大于等于1,它表示一个可切分簇的最小点数量;如果值小于1,它表示可切分簇的点数量占总数的最小比例,该值默认为1 |
样例
inputs = { "dataframe": None # @input {"label":"dataframe","type":"DataFrame"} } params = { "inputs": inputs, "b_output_action": True, "b_use_default_encoder": True, "outer_pipeline_stages": None, "input_features_str": "", # @param {"label": "input_features_str", "type": "string", "required": "false", "helpTip": ""} "cluster_feature_vector_col": "model_features", # @param {"label": "cluster_feature_vector_col", "type": "string", "required": "true", "helpTip": ""} "prediction_col": "prediction", # @param {"label": "prediction_col", "type": "string", "required": "true", "helpTip": ""} "k": 2, # @param {"label": "k", "type": "integer", "required": "true", "range": "(0,2147483647]", "helpTip": ""} "max_iter": 100, # @param {"label": "max_iter", "type": "integer", "required": "true", "range": "(0,2147483647]", "helpTip": ""} "min_divisible_cluster_size": 1.0 # @param {"label": "min_divisible_cluster_size", "type": "number", "required": "true", "range": "(0,none)", "helpTip": ""} } bisecting_kmeans____id___ = MLSBisectingKmeans(**params) bisecting_kmeans____id___.run() # @output {"label":"pipeline_model","name":"bisecting_kmeans____id___.get_outputs()['output_port_1']","type":"PipelineModel"}
父主题: 聚类
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家