二分k均值
概述
二分k-means算法是分层聚类(Hierarchical clustering)的一种,分层聚类是聚类分析中常用的方法。
分层聚类的策略一般有两种:
- 聚合:这是一种自底向上的方法,每一个观察者初始化本身为一类,然后两两结合。
- 分裂:这是一种自顶向下的方法,所有观察者初始化为一类,然后递归地分裂它们。二分k-means算法是分裂法的一种。
二分k-means算法是k-means算法的改进算法,相比k-means算法,它可以加速k-means算法的执行速度,因为它的相似度计算少了,能够克服k-means收敛于局部最小的缺点。
二分k-means算法的一般流程如下所示:
输入
参数 |
子参数 |
参数说明 |
---|---|---|
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"}