YingfanWang/PaCMAP

Random State is required in Usage example,

Closed this issue · 4 comments

Hi,
when I try to run the transform, it seems that the random state is required.
I solved it changing the example embedding from:

embedding = pacmap.PaCMAP(n_dims=2, n_neighbors=None, MN_ratio=0.5, FP_ratio=2.0) 

to:

embedding = pacmap.PaCMAP(n_dims=2, n_neighbors=None, MN_ratio=0.5, FP_ratio=2.0, random_state = 1) 

Could you elaborate over the error you've encountered? I cannot reproduce this error locally. random_state should be an optional parameter.

Sure,

In my case, random_state seems to be mandatory. If I remove this parameter I get the following error:

TypeError                                 Traceback (most recent call last)
<ipython-input-49-84db434672b2> in <module>
     21 
     22 # fit the data (The index of transformed data corresponds to the index of the original data)
---> 23 X_transformed = embedding.fit_transform(X, init="pca")
     24 
     25 # visualize the embedding

~/.local/lib/python3.8/site-packages/pacmap/pacmap.py in fit_transform(self, X, init, save_pairs)
    573 
    574     def fit_transform(self, X, init=None, save_pairs=True):
--> 575         self.fit(X, init, save_pairs)
    576         if self.intermediate:
    577             return self.intermediate_states

~/.local/lib/python3.8/site-packages/pacmap/pacmap.py in fit(self, X, init, save_pairs)
    532             )
    533         if save_pairs:
--> 534             self.embedding_, self.intermediate_states, self.pair_neighbors, self.pair_MN, self.pair_FP = pacmap(
    535                 X,
    536                 self.n_dims,

~/.local/lib/python3.8/site-packages/pacmap/pacmap.py in pacmap(X, n_dims, n_neighbors, n_MN, n_FP, pair_neighbors, pair_MN, pair_FP, distance, lr, num_iters, Yinit, apply_pca, verbose, intermediate, seed)
    357                 if verbose:
    358                     print("X is normalized")
--> 359         pair_neighbors, pair_MN, pair_FP = generate_pair(
    360             X, n_neighbors, n_MN, n_FP, distance, verbose
    361         )

~/.local/lib/python3.8/site-packages/pacmap/pacmap.py in generate_pair(X, n_neighbors, n_MN, n_FP, distance, verbose)
    262     n_neighbors_extra = min(n_neighbors + 50, n)
    263     tree = AnnoyIndex(dim, metric=distance)
--> 264     tree.set_seed(_RANDOM_STATE)
    265     for i in range(n):
    266         tree.add_item(i, X[i, :])

TypeError: an integer is required (got type NoneType)

I installed PaCMAP (v 0.5.0 ) via PIP and the Python version I'm using is 3.8.10

I still cannot reproduce this error locally, but I proposed some changes towards the repo that could probably solve your problem. Could you download the newest version via PIP and see if that works? I'm so sorry since I'm unable to verify whether the problem could be solved locally.

Great, it works now as documented. I removed the older version and installed v0.5.2 and it works perfectly without random_state parameter.

Thank you!!