我正在尝试使用 sklearn 的
AgglomerativeClustering
来优化用于计算同一数据集上不同数量的集群的多个结果的计算时间。
如sklearn凝聚聚类:动态更新聚类数量中所示,可以存储由
AgglomerativeClustering
计算的整个树。然后,您可以重新指定聚类对象的n_clusters
参数,并简单地将同一数据集聚类的新聚类结果提取到新数量中。
如果这是一个微不足道的问题,我很抱歉,但我对使用 Python 处理内存的经验很少。我的问题是如何指定
AgglomerativeClustering
使用的缓存目录。在上面链接的例子中,写为:
AgglomerativeClustering(n_clusters=10, memory='mycachedir', compute_full_tree=True)
'mycachedir'
到底是什么?我是否需要用我自己的缓存目录替换它,或者 python 是否在某个名为 'mycachedir'
的地方创建一个新目录?如果是这样,当我的程序结束时,它会被删除吗?我希望在程序停止或结束后删除缓存。再次,如果这很明显,我很抱歉。
我尝试使用字符串
"mycachedir"
运行它,Python 不会引发错误。那么这个目录位于哪里呢?它的行为如何?例如,程序结束后它会被删除吗?
根据 scikit-learn 文档,“如果给出了字符串,则它是缓存目录的路径。”
joblib.Memory
包的 joblib
类来执行的。该目录由 os.makedirs(os.path.expanduser(memory))
创建,其中 memory
是 AgglomerativeClustering
输入参数。虽然可以用joblib.Memory.clear
删除,但据我所知,调用AgglomerativeClustering.fit
时情况并非如此。
使用
sklearn.AgglomerativeClustering
示例,
import os
# EXTERNALS
from sklearn.cluster import AgglomerativeClustering
import numpy as np
X = np.array([[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]])
memory_dir = "~/tmp/my_cached_memory_folder"
# relative path depending on your working directory
# (cf. `os.getcwd()`)
clustering = AgglomerativeClustering(memory=memory_dir).fit(X)
full_path = os.path.abspath(os.path.expanduser(memory_dir))
print("Cached memory directory: " f"{full_path}")
print(os.path.isdir(full_path))
# Cached memory directory: /home/remi_cuingnet/tmp/my_cached_memory_folder
# True
注意,必须手动清除。