import numpy as np
import pandas as pd
import glob
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
import importlib.resources
from pyROGER.roger import RogerModel
with importlib.resources.path("pyROGER", "dataset") as p:
DATA_PATH = str(p)
[docs]
def list_saved_models():
'''
Function for listing the available models.
'''
saved_model_names = glob.glob(DATA_PATH + '/*.joblib')
return saved_model_names
data = pd.read_csv(DATA_PATH + "/highMass_trainset_roger1.csv", sep=" ")
data = np.asarray(data)
data[np.where(data[:, 2] == "CL")[0], 2] = 0
data[np.where(data[:, 2] == "RIN")[0], 2] = 1
data[np.where(data[:, 2] == "BS")[0], 2] = 2
data[np.where(data[:, 2] == "IN")[0], 2] = 3
data[np.where(data[:, 2] == "ITL")[0], 2] = 4
data = data.astype("float64")
comments = """ ROGER model for isolated galaxy clusters with masses
bigger than >10^{13} M_{sun}.
This model is equivalent to the one presented in 2010.11959 and
in https://mdelosrios.shinyapps.io/roger_shiny/.
The saved models located in the datasets are:
* HighMassRoger1_RF.joblib
* HighMassRoger1_SVM.joblib
* HighMassRoger1_KNN.joblib
The input must be a np.array with shape (Ngal, 2) where,
the first column must be the cluster-centric distance normalized to R200,
and the second must be the relative velocity normalized to the cluster
velocity dispersion, i.e:
[:,0] = R / R200
[:,1] = |\Delta V| / sigma
The output for predict_prob() is a np.array with shape (Ngal, 5)
[:,0] = P_cl: Probability of being a cluster galaxy.
[:,1] = P_rin: Probability of being a backsplash galaxy.
[:,2] = P_bs: Probability of being a recent infaller galaxy.
[:,3] = P_in: Probability of being an infalling galaxy.
[:,4] = P_itl: Probability of being a iterloper galaxy.
The output for predict_class() is a np.array with shape (Ngal, ) with
the predicted classes.
0: Cluster galaxy
1: Recent infaller galaxy
2: Backsplash galaxy
3: Infalling galaxy
4: Iterlooper galaxy
"""
HighMassRoger1 = RogerModel(data[:, (0, 1)], data[:, 2], comments=comments)
comments = """ ROGER2 model for isolated galaxy clusters with masses
bigger than >10^{13} M_{sun}.
The saved models located in the datasets are:
* roger2_KNN.joblib
The input must be a np.array with shape (Ngal, 3) where,
the first column must be the log10 of the cluster mass,
the second column must be the cluster-centric distance normalized to R200,
and the third must be the relative velocity normalized to the cluster
velocity dispersion, i.e:
[:,0] = log10(M [M_{sun}])
[:,1] = R / R200
[:,2] = |\Delta V| / sigma
The output predict_prob() is a np.array with shape (Ngal, 5)
[:,0] = P_cl: Probability of being a cluster galaxy.
[:,1] = P_bs: Probability of being a backsplash galaxy.
[:,2] = P_rin: Probability of being a recent infaller galaxy.
[:,3] = P_in: Probability of being an infalling galaxy.
[:,4] = P_itl: Probability of being a iterloper galaxy.
The output for predict_class() is a np.array with shape (Ngal, ) with
the predicted classes.
0: Cluster galaxy
1: Backsplash galaxy
2: Recent infaller galaxy
3: Infalling galaxy
4: Iterlooper galaxy
"""
Roger2 = RogerModel(data[:, (0, 1)], data[:, 2], comments=comments, ml_models = [KNeighborsClassifier(n_neighbors=63)])