lsi support for weekly similarities
This commit is contained in:
@@ -18,12 +18,12 @@ def test_select_hdbscan_clustering():
|
||||
# cluster_selection_epsilons=[0,0.05,0.1,0.15],
|
||||
# cluster_selection_methods=['eom','leaf'],
|
||||
# lsi_dimensions='all')
|
||||
inpath = "/gscratch/comdata/output/reddit_similarity/subreddit_comment_authors-tf_10k_LSI/"
|
||||
inpath = "/gscratch/comdata/users/nathante/competitive_exclusion_reddit/data/similarity/comment_authors_compex_LSI"
|
||||
outpath = "test_hdbscan";
|
||||
min_cluster_sizes=[2,3,4];
|
||||
min_samples=[1,2,3];
|
||||
cluster_selection_epsilons=[0,0.1,0.3,0.5];
|
||||
cluster_selection_methods=['eom'];
|
||||
cluster_selection_methods=[1];
|
||||
lsi_dimensions='all'
|
||||
gs = hdbscan_lsi_grid_sweep(inpath, "all", outpath, min_cluster_sizes, min_samples, cluster_selection_epsilons, cluster_selection_methods)
|
||||
gs.run(20)
|
||||
@@ -120,7 +120,7 @@ def run_hdbscan_grid_sweep(savefile, inpath, outpath, min_cluster_sizes=[2], mi
|
||||
map(int,min_cluster_sizes),
|
||||
map(int,min_samples),
|
||||
map(float,cluster_selection_epsilons),
|
||||
map(float,cluster_selection_methods))
|
||||
cluster_selection_methods)
|
||||
obj.run()
|
||||
obj.save(savefile)
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ class _hdbscan_lsi_grid_sweep(grid_sweep):
|
||||
s += f"_lsi-{self.lsi_dim}"
|
||||
return s
|
||||
|
||||
def run_hdbscan_lsi_grid_sweep(savefile, inpath, outpath, min_cluster_sizes=[2], min_samples=[1], cluster_selection_epsilons=[0], cluster_selection_methods=['eom'],lsi_dimensions='all'):
|
||||
def run_hdbscan_lsi_grid_sweep(savefile, inpath, outpath, min_cluster_sizes=[2], min_samples=[1], cluster_selection_epsilons=[0], cluster_selection_methods=[1],lsi_dimensions='all'):
|
||||
"""Run hdbscan clustering once or more with different parameters.
|
||||
|
||||
Usage:
|
||||
@@ -90,8 +90,8 @@ def run_hdbscan_lsi_grid_sweep(savefile, inpath, outpath, min_cluster_sizes=[2]
|
||||
list(map(int,min_cluster_sizes)),
|
||||
list(map(int,min_samples)),
|
||||
list(map(float,cluster_selection_epsilons)),
|
||||
cluster_selection_methods
|
||||
)
|
||||
cluster_selection_methods)
|
||||
|
||||
|
||||
obj.run(10)
|
||||
obj.save(savefile)
|
||||
|
||||
@@ -18,10 +18,11 @@ class lsi_grid_sweep(grid_sweep):
|
||||
self.subsweep = subsweep
|
||||
inpath = Path(inpath)
|
||||
if lsi_dimensions == 'all':
|
||||
lsi_paths = list(inpath.glob("*"))
|
||||
lsi_paths = list(inpath.glob("*.feather"))
|
||||
else:
|
||||
lsi_paths = [inpath / (str(dim) + '.feather') for dim in lsi_dimensions]
|
||||
|
||||
print(lsi_paths)
|
||||
lsi_nums = [int(p.stem) for p in lsi_paths]
|
||||
self.hasrun = False
|
||||
self.subgrids = [self.subsweep(lsi_path, outpath, lsi_dim, *args, **kwargs) for lsi_dim, lsi_path in zip(lsi_nums, lsi_paths)]
|
||||
|
||||
13
clustering/pick_best_clustering.py
Normal file → Executable file
13
clustering/pick_best_clustering.py
Normal file → Executable file
@@ -1,11 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
import fire
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
import shutil
|
||||
selection_data="/gscratch/comdata/output/reddit_clustering/subreddit_comment_authors-tf_10k_LSI/hdbscan/selection_data.csv"
|
||||
selection_data="/gscratch/comdata/users/nathante/competitive_exclusion_reddit/data/clustering/comment_authors_compex_LSI/selection_data.csv"
|
||||
|
||||
outpath = 'test_best.feather'
|
||||
min_clusters=50; max_isolates=5000; min_cluster_size=2
|
||||
min_clusters=50; max_isolates=7500; min_cluster_size=2
|
||||
|
||||
# pick the best clustering according to silhouette score subject to contraints
|
||||
def pick_best_clustering(selection_data, output, min_clusters, max_isolates, min_cluster_size):
|
||||
@@ -18,11 +19,15 @@ def pick_best_clustering(selection_data, output, min_clusters, max_isolates, min
|
||||
df.loc[df.n_isolates_0,'n_isolates'] = 0
|
||||
df.loc[~df.n_isolates_0,'n_isolates'] = df.loc[~df.n_isolates_0].n_isolates_str.apply(lambda l: int(l))
|
||||
|
||||
best_cluster = df[(df.n_isolates <= max_isolates)&(df.n_clusters >= min_clusters)&(df.min_cluster_size==min_cluster_size)].iloc[df.shape[1]]
|
||||
best_cluster = df[(df.n_isolates <= max_isolates)&(df.n_clusters >= min_clusters)&(df.min_cluster_size==min_cluster_size)]
|
||||
|
||||
best_cluster = best_cluster.iloc[0]
|
||||
|
||||
best_lsi_dimensions = best_cluster.lsi_dimensions
|
||||
print(best_cluster.to_dict())
|
||||
best_path = Path(best_cluster.outpath) / (str(best_cluster['name']) + ".feather")
|
||||
shutil.copy(best_path,output)
|
||||
|
||||
print(f"lsi dimensions:{best_lsi_dimensions}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
fire.Fire(pick_best_clustering)
|
||||
|
||||
Reference in New Issue
Block a user