Я хотел бы выполнить модель HDBSCAN в виде свободной текстовой переменной из набора данных, а затем перекрасить метку в тот же набор данных.
Используемый язык: PYSPARK
Вот моя функция PYSPARK:
def apply_hdbscan(tf_idf, input_column, ctx):
tfidf_matrix = csr_matrix(np.array([x[0] for x in np.array(tf_idf.select(input_column).collect())]))
clusterer = hdbscan.HDBSCAN(metric='cosine', min_cluster_size=2)
fitted_values = clusterer.fit(tfidf_matrix)
id_nc = np.array([x[0] for x in np.array(tf_idf.select("skywise_non_conformity_id").collect())])
cSchema = StructType([StructField("skywise_non_conformity_id", StringType()), StructField("hdbscan_cluster_id", IntegerType())])
list_dataframe = []
for i in range(len(fitted_values.labels_)):
list_dataframe.append([id_nc[i].item(), fitted_values.labels_[i].item()])
df_clusters = ctx.spark_session.createDataFrame(list_dataframe, schema=cSchema)
hdbscan_output = (
tf_idf
.join(df_clusters, ["skywise_non_conformity_id"])
)
return hdbscan_output
Я не знаю почему, но это не работает все время. Я получаю несколько сообщений об ошибках, а также пустой набор данных. Результаты очень случайные.