如何最好地将预测的k均值聚类分配给原始数据

时间:2018-01-12 13:22:13

标签: sparklyr

我正在使用sparklyr进行ml_kmeans分析。

我的问题是如何最好地分配预测的群集成员资格。 github上代码中的注释提到返回的数据.ml_kmeans中的数据框可能无法正确排序。

到目前为止,我已经提出了以下解决方案,但似乎有点冗长,是否有更好的方法将预测的群集成员资格与原始数据合并?

我很想使用扫帚包,但我认为不支持ml_kmeans。

# load lib and connect
  library(sparklyr)

# connect
  sc <- spark_connect( master = "local" )

# compute id column
  iris <- iris %>% 
          mutate( id = row_number()-1 ) 

# copy to spark
  iris_tbl  <- sdf_copy_to( sc, iris, overwrite = TRUE )

# compute kmeans
  iris_kmeans <- iris_tbl %>% 
                  select( -id,-Species) %>% # remove non relevant columns
                  ml_kmeans( centers = 5L,
                             init_mode = "k-means||"
                            ) 

# assign cluster membership
  iris_cluster <- sdf_predict( iris_kmeans, 
                               new_data = "iris_tbl" ) %>% 
                  compute( "iris_cluster" )

# extract id column
  id_col <- iris_kmeans$ml.options$id.column

# bind columns and collect results
  iris_result <- cluster_membership  %>% 
                  sdf_sort( id_col ) %>% # sort by assigned spark id
                  select( prediction, id_col ) %>% # select cols to be merged
                  sdf_bind_cols( iris_tbl ) %>% 
                  collect( 'iris_result' )

1 个答案:

答案 0 :(得分:0)

使用最新的开发(只要sparklyr/pull/1218合并),您就可以执行类似

的操作
$SomeUrl = 'https://stackoverflow.com' 
$ie = New-Object -com internetexplorer.application
$ie.visible = $true
$ie.navigate($SomeUrl)
while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 } # Wait for IE to settle.

请注意,您需要将(单侧)公式或library(sparklyr) sc <- spark_connect(master = "local") iris_tbl <- sdf_copy_to(sc, iris) iris_kmeans <- ml_kmeans(iris_tbl, ~ . - Species, centers = 5) ml_predict(iris_kmeans, iris_tbl) # alternatively sdf_predict(iris_tbl, iris_kmeans) 传递给features,以便让它知道要与哪些变量进行聚类。 ml_kmeans()ml_predict()函数执行相同的操作,只是使用不同的参数排序。