Skip to content

Commit 7b2eccd

Browse files
Update opentsne version to >=0.3
1 parent 89d3cc9 commit 7b2eccd

File tree

3 files changed

+19
-19
lines changed

3 files changed

+19
-19
lines changed

Orange/projection/manifold.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
from scipy.sparse.linalg import eigsh as arpack_eigh
99
import 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

1515
import Orange
1616
from Orange.data import Table, Domain, ContinuousVariable
@@ -22,8 +22,8 @@
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

2929
def 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)

conda-recipe/meta.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ requirements:
5151
- commonmark
5252
- serverfiles
5353
- matplotlib >=2.0.0
54-
- fasttsne ==0.2.13
54+
- opentsne >=0.3.0
5555

5656
test:
5757
# Python imports

requirements-core.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ serverfiles # for Data Sets synchronization
1818
networkx
1919
python-louvain
2020
requests
21-
fastTSNE==0.2.13
21+
openTSNE>=0.3.0

0 commit comments

Comments
 (0)