in embedding_quality_score.py [0:0]
def get_quality_metrics(
coord_high,
coord_low,
distance='euclidean',
setting='manifold',
fname=None,
k_neighbours=20,
verbose=False):
"""
Implementation of 'Scale-independent quality criteria' from Lee et al.
Parameters
----------
coord_high : np.array
Feature matrix of the sample in the high dimensional space.
coord_low : np.array
Low dimensional embedding of the sample.
distance : str (default: 'euclidean')
Distance metric to compute distanced between points in low dimendional
space. Possible parameters: 'euclidean' or 'poincare'.
setting: str (default: 'manifold')
Setting to compute distances in the high dimensional space: 'global'
distances or distances on the 'manifold' using a k=20 KNN graph.
fname: str, optional (default: None)
Name of the file where to save all the information about the metrics.
verbose: bool (default: False)
A flag if to print the results of the computations.
k_neighbours: int (default: 20)
k-nearest neighbours for setting
Returns
-------
Qlocal: float
Quality criteria for local qualities of the embedding.
Range from 0 (bad) to 1 (good).
Qglobal: float
Quality criteria for global qualities of the embedding.
Range from 0 (bad) to 1 (good).
Kmax: int
Kmax defines the split of the QNX curv.
"""
if setting == 'global':
D_high = pairwise_distances(coord_high)
elif setting == 'manifold':
D_high = get_dist_manifold(
coord_high, k_neighbours=k_neighbours, knn_sym=True)
else:
raise NotImplementedError
Rank_high = get_ranking(D_high)
if distance == 'euclidean':
D_low = pairwise_distances(coord_low)
elif distance == 'poincare':
model = PoincareMaps(coord_low)
model.get_distances()
D_low = model.distances
else:
raise NotImplementedError
Rank_low = get_ranking(D_low)
df_score = get_score(Rank_high, Rank_low, fname=fname)
Qlocal, Qglobal, Kmax = get_scalars(df_score['Qnx'].values)
if verbose:
print(f"Qlocal = {Qlocal:.2f}, Qglobal = {Qglobal:.2f}, Kmax = {Kmax}")
return Qlocal, Qglobal, Kmax