TTK
Loading...
Searching...
No Matches
dimensionReduction.py
Go to the documentation of this file.
1def doIt(X, method, ncomponents, nneighbors, njobs, rstate, params):
2
3 import importlib.util
4
5 # if numpy, scipy and sklearn are not found
6 not_found = False
7
8 # check if modules are installed
9 for mod in ["numpy", "scipy", "sklearn"]:
10 if importlib.util.find_spec(mod) is None:
11 not_found = True
12 print("[DimensionReduction] Python error: " + mod + " module not found.")
13
14 if not_found:
15 # at least one module is not installed, aborting...
16 return 0
17
18 import sklearn
19 from sklearn import manifold
20 from sklearn import decomposition
21 import numpy as np
22 from sys import platform
23 from packaging import version
24
25 #if platform == "darwin":
26 # sklearn.utils.parallel_backend("threading")
27
28 if rstate > 0:
29 np.random.seed(0)
30
31 try:
32 if method == 0:
33 seParams = params[0]
34 if seParams[2] == "None":
35 se = manifold.SpectralEmbedding(
36 n_components=ncomponents,
37 affinity=seParams[0],
38 gamma=seParams[1],
39 eigen_solver=None,
40 n_neighbors=nneighbors,
41 n_jobs=njobs,
42 )
43 else:
44 se = manifold.SpectralEmbedding(
45 n_components=ncomponents,
46 affinity=seParams[0],
47 gamma=seParams[1],
48 eigen_solver=seParams[2],
49 n_neighbors=nneighbors,
50 n_jobs=njobs,
51 )
52 Y = se.fit_transform(X)
53 elif method == 1:
54 lleParams = params[1]
55 lle = manifold.LocallyLinearEmbedding(
56 n_neighbors=nneighbors,
57 n_components=ncomponents,
58 reg=lleParams[0],
59 eigen_solver=lleParams[1],
60 tol=lleParams[2],
61 max_iter=lleParams[3],
62 method=lleParams[4],
63 hessian_tol=lleParams[5],
64 modified_tol=lleParams[6],
65 neighbors_algorithm=lleParams[7],
66 n_jobs=njobs,
67 )
68 Y = lle.fit_transform(X)
69 elif method == 2:
70 mdsParams = params[2]
71 mds = manifold.MDS(
72 n_components=ncomponents,
73 metric=mdsParams[0],
74 n_init=mdsParams[1],
75 max_iter=mdsParams[2],
76 verbose=mdsParams[3],
77 eps=mdsParams[4],
78 dissimilarity=mdsParams[5],
79 n_jobs=njobs,
80 )
81 Y = mds.fit_transform(X)
82 elif method == 3:
83 tsneParams = params[3]
84 if version.parse(sklearn.__version__) >= version.parse("1.7.0"):
85 tsne = manifold.TSNE(
86 n_components=ncomponents,
87 perplexity=tsneParams[0],
88 early_exaggeration=tsneParams[1],
89 learning_rate=tsneParams[2],
90 max_iter=tsneParams[3],
91 n_iter_without_progress=tsneParams[4],
92 min_grad_norm=tsneParams[5],
93 metric=tsneParams[6],
94 init=tsneParams[7],
95 verbose=tsneParams[8],
96 method=tsneParams[9],
97 angle=tsneParams[10],
98 )
99 else:
100 tsne = manifold.TSNE(
101 n_components=ncomponents,
102 perplexity=tsneParams[0],
103 early_exaggeration=tsneParams[1],
104 learning_rate=tsneParams[2],
105 n_iter=tsneParams[3],
106 n_iter_without_progress=tsneParams[4],
107 min_grad_norm=tsneParams[5],
108 metric=tsneParams[6],
109 init=tsneParams[7],
110 verbose=tsneParams[8],
111 method=tsneParams[9],
112 angle=tsneParams[10],
113 )
114 Y = tsne.fit_transform(X)
115 elif method == 4:
116 isoParams = params[4]
117 iso = manifold.Isomap(
118 n_neighbors=nneighbors,
119 n_components=ncomponents,
120 eigen_solver=isoParams[0],
121 tol=isoParams[1],
122 max_iter=isoParams[2],
123 path_method=isoParams[3],
124 neighbors_algorithm=isoParams[4],
125 metric=isoParams[5],
126 n_jobs=njobs,
127 )
128 Y = iso.fit_transform(X)
129 elif method == 5:
130 pcaParams = params[5]
131 if pcaParams[4] == "auto":
132 pca = decomposition.PCA(
133 n_components=ncomponents,
134 copy=pcaParams[0],
135 whiten=pcaParams[1],
136 svd_solver=pcaParams[2],
137 tol=pcaParams[3],
138 iterated_power="auto",
139 )
140 else:
141 pca = decomposition.PCA(
142 n_components=ncomponents,
143 copy=pcaParams[0],
144 whiten=pcaParams[1],
145 svd_solver=pcaParams[2],
146 tol=pcaParams[3],
147 iterated_power=int(pcaParams[4]),
148 )
149 Y = pca.fit_transform(X)
150
151 L = [Y.shape[0], Y.shape[1], np.ravel(Y, "F")]
152 return L
153 except Exception as inst:
154 print(
155 "[DimensionReduction] Error: unexpected behaviour detected in the python script."
156 )
157 print(type(inst)) # the exception instance
158 print(inst.args) # arguments stored in .args
159 print(inst)
160 return []
doIt(X, method, ncomponents, nneighbors, njobs, rstate, params)