88from scipy .sparse .linalg import eigsh as arpack_eigh
99import sklearn .manifold as skl_manifold
1010
11- import fastTSNE
12- import fastTSNE .affinity
13- import fastTSNE .initialization
11+ import openTSNE
12+ import openTSNE .affinity
13+ import openTSNE .initialization
1414
1515import Orange
1616from Orange .data import Table , Domain , ContinuousVariable
2222 "TSNE" ]
2323
2424# Disable t-SNE user warnings
25- fastTSNE .tsne .log .setLevel (logging .ERROR )
26- fastTSNE .affinity .log .setLevel (logging .ERROR )
25+ openTSNE .tsne .log .setLevel (logging .ERROR )
26+ openTSNE .affinity .log .setLevel (logging .ERROR )
2727
2828
2929def torgerson (distances , n_components = 2 , eigen_solver = "auto" ):
@@ -204,7 +204,7 @@ class TSNEModel(Projection):
204204 pre_domain : Domain
205205 Original data domain
206206 """
207- def __init__ (self , embedding : fastTSNE .TSNEEmbedding , table : Table ,
207+ def __init__ (self , embedding : openTSNE .TSNEEmbedding , table : Table ,
208208 pre_domain : Domain ):
209209 transformer = TransformDomain (self )
210210
@@ -221,13 +221,13 @@ def proj_variable(i):
221221 class_vars = table .domain .class_vars ,
222222 metas = table .domain .metas )
223223
224- def transform (self , X : np .ndarray , ** kwargs ) -> fastTSNE .PartialTSNEEmbedding :
224+ def transform (self , X : np .ndarray , learning_rate = 1 , ** kwargs ) -> openTSNE .PartialTSNEEmbedding :
225225 if sp .issparse (X ):
226226 raise TypeError (
227227 "A sparse matrix was passed, but dense data is required. Use "
228228 "X.toarray() to convert to a dense numpy array."
229229 )
230- if isinstance (self .embedding_ .affinities , fastTSNE .affinity .Multiscale ):
230+ if isinstance (self .embedding_ .affinities , openTSNE .affinity .Multiscale ):
231231 perplexity = kwargs .pop ("perplexity" , False )
232232 if perplexity :
233233 if not isinstance (self .perplexity , Iterable ):
@@ -242,7 +242,7 @@ def transform(self, X: np.ndarray, **kwargs) -> fastTSNE.PartialTSNEEmbedding:
242242
243243 embedding = self .embedding_ .prepare_partial (X , ** perplexity_params ,
244244 ** kwargs )
245- embedding .optimize (100 , inplace = True , momentum = 0.4 )
245+ embedding .optimize (100 , inplace = True , momentum = 0.4 , learning_rate = learning_rate )
246246 return embedding
247247
248248 def __call__ (self , data : Table , ** kwargs ) -> Table :
@@ -400,7 +400,7 @@ def __init__(self, n_components=2, perplexity=30, learning_rate=200,
400400 self .callbacks_every_iters = callbacks_every_iters
401401 self .random_state = random_state
402402
403- def fit (self , X : np .ndarray , Y : np .ndarray = None ) -> fastTSNE .TSNEEmbedding :
403+ def fit (self , X : np .ndarray , Y : np .ndarray = None ) -> openTSNE .TSNEEmbedding :
404404 # Sparse data are not supported
405405 if sp .issparse (X ):
406406 raise TypeError (
@@ -416,33 +416,33 @@ def fit(self, X: np.ndarray, Y: np.ndarray = None) -> fastTSNE.TSNEEmbedding:
416416 raise ValueError (
417417 "Perplexity should be an instance of `Iterable`, `%s` "
418418 "given." % type (self .perplexity ).__name__ )
419- affinities = fastTSNE .affinity .Multiscale (
419+ affinities = openTSNE .affinity .Multiscale (
420420 X , perplexities = self .perplexity , metric = self .metric ,
421421 method = self .neighbors , random_state = self .random_state , n_jobs = self .n_jobs )
422422 else :
423423 if isinstance (self .perplexity , Iterable ):
424424 raise ValueError (
425425 "Perplexity should be an instance of `float`, `%s` "
426426 "given." % type (self .perplexity ).__name__ )
427- affinities = fastTSNE .affinity .PerplexityBasedNN (
427+ affinities = openTSNE .affinity .PerplexityBasedNN (
428428 X , perplexity = self .perplexity , metric = self .metric ,
429429 method = self .neighbors , random_state = self .random_state , n_jobs = self .n_jobs )
430430
431431 # Create an initial embedding
432432 if isinstance (self .initialization , np .ndarray ):
433433 initialization = self .initialization
434434 elif self .initialization == "pca" :
435- initialization = fastTSNE .initialization .pca (
435+ initialization = openTSNE .initialization .pca (
436436 X , self .n_components , random_state = self .random_state )
437437 elif self .initialization == "random" :
438- initialization = fastTSNE .initialization .random (
439- X . shape [ 0 ] , self .n_components , random_state = self .random_state )
438+ initialization = openTSNE .initialization .random (
439+ X , self .n_components , random_state = self .random_state )
440440 else :
441441 raise ValueError (
442442 "Invalid initialization `%s`. Please use either `pca` or "
443443 "`random` or provide a numpy array." % self .initialization )
444444
445- embedding = fastTSNE .TSNEEmbedding (
445+ embedding = openTSNE .TSNEEmbedding (
446446 initialization , affinities , learning_rate = self .learning_rate ,
447447 theta = self .theta , min_num_intervals = self .min_num_intervals ,
448448 ints_in_interval = self .ints_in_interval , n_jobs = self .n_jobs ,
@@ -486,5 +486,5 @@ def __call__(self, data: Table) -> TSNEModel:
486486
487487 @staticmethod
488488 def default_initialization (data , n_components = 2 , random_state = None ):
489- return fastTSNE .initialization .pca (
489+ return openTSNE .initialization .pca (
490490 data , n_components , random_state = random_state )
0 commit comments