Повторное использование алгоритма кластеризации в python - PullRequest
0 голосов
/ 02 августа 2020

Я построил модель кластеризации, которая достаточно хорошо работает для сегментации данных. Я использовал двухэтапный процесс (KMeans, затем Hierarchical), чтобы избежать проблем с памятью, которые возникли, когда я напрямую попробовал Hierarchical (см. Ссылку https://www.dummies.com/programming/big-data/data-science/data-science-performing-hierarchical-clustering-with-python/).

Мой вопрос касается того, как чтобы использовать этот процесс сейчас, чтобы получить новую информацию. Я пытаюсь сохранить структурированный код, и я хотел бы «экспортировать» и «импортировать» соответствующий код, но я не знаю, как экспортировать две модели. Вот мой код:

data_scaled = normalize(col_final_df)
data_scaled = pd.DataFrame(data_scaled, columns=col_final_df.columns)

clustering = KMeans(n_clusters=km_seg, n_init=10,
                    random_state=1)
clustering.fit(data_scaled)

post_clust_centres = clustering.cluster_centers_
post_clust_data_mapping = {case: cluster for case, cluster in enumerate(clustering.labels_)}

print('KMeans analysis complete.  Composing hierarchical segmentation of KMeans presently...')

Hclustering = AgglomerativeClustering(n_clusters=29, affinity="cosine", linkage ="complete")
Hclustering.fit(post_clust_centres)

print('Hierarchical segmentation complete.  Composing dendrogram...')

plt.title('Hierarchical Clustering Dendrogram')
plot_dendrogram(Hclustering, labels=Hclustering.labels_)
plt.show()

H_mapping = {case: cluster for case,
                               cluster in enumerate(Hclustering.labels_)}
final_mapping = {case: H_mapping[post_clust_data_mapping[case]]
                 for case in post_clust_data_mapping}

1 Ответ

1 голос
/ 03 августа 2020

Таким образом, травление упростило задачу, так как я мог сохранить весь объект и повторно импортировать его по требованию в новой функции. Понимая, что он будет использовать слишком много операций ввода-вывода, я сделаю это только один раз.

Для маринования я добавил следующий код в конец моего кластерного алгоритма. И затем это код оценки, который я использовал для получения сегментов для векторов данных:

def score_data (data): с open (Config.PATH + "/kmeans.pickle", 'rb') в качестве дескриптора: кластеризация = pickle.load (ручка)

with open(Config.PATH + "/hclust.pickle", 'rb') as handle:
    Hclustering = pickle.load(handle)

data_scaled = normalize(data)
data_scaled = pd.DataFrame(data_scaled, columns=data.columns)

clustering.labels_ = clustering.predict(data_scaled)
post_clust_data_mapping = {case: cluster for case, cluster in enumerate(clustering.labels_)}

H_mapping = {case: cluster for case,
                               cluster in enumerate(Hclustering.labels_)}
final_mapping = {case: H_mapping[post_clust_data_mapping[case]]
                 for case in post_clust_data_mapping}

final_mapping_ls = list(final_mapping.values())

return [x + 1 for x in final_mapping_ls]
...