Skip to content
Snippets Groups Projects
LWPLSR_.py 2.08 KiB
Newer Older
from Packages import *
from Class_Mod.Miscellaneous import *

class LWPLSR:
    """
    The UMAP dimension reduction algorithm from scikit learn
    """
    def __init__(self, x_train, x_test, y_train, y_test):
        """Initiate the LWPLSR and prepare data for Julia computing."""
        self.x_train, self.y_train, self.x_test, self.y_test = x_train, x_test, y_train, y_test
        # prepare to send dataframes to julia and Jchemo
        self.Main.x_train,self.Main.y_train,self.Main.x_test,self.Main.y_test = self.x_train, self.y_train, self.x_test, self.y_test

    def Jchemo_lwplsr(self):
        """Send data to Julia to compute lwplsr.

        Args:
            self.Main.x_train (DataFrame):
            self.Main.y_train (DataFrame):
            self.Main.x_test (DataFrame):
            self.Main.y_test (DataFrame):

        Returns:
            self.scores (DataFrame): various metrics and scores
            self.predicted_results_on_test (DataFrame):
        """
        # launch Julia Jchemo lwplsr
        Main.eval("""
        #convert python pd.dataframes to julia dataframes
        x_train_j = self.Main.x_train |> Pandas.DataFrame|> DataFrames.DataFrame;
        y_train_j = self.Main.y_train |> Pandas.DataFrame|> DataFrames.DataFrame;
        x_test_j = self.Main.x_test |> Pandas.DataFrame|> DataFrames.DataFrame;
        y_test_j = self.Main.y_test |> Pandas.DataFrame|> DataFrames.DataFrame;
        # Compute model
        nlvdis = 5 ; metric = :mah
        h = 1 ; k = 200 ; nlv = 15 #; scal = true
        mod = Main.Jchemo.model(Main.Jchemo.lwplsr; nlvdis, metric, h, k, nlv)
        Main.Jchemo.fit!(mod, X_train_j, y_train_j)
        # predictions on test data calculation
        res = Main.Jchemo.predict(mod, X_test_j) ;
        scores = Main.Jchemo.mse(res.pred, y_test_j)
        scoresjp = Pandas.DataFrame(scores);
        resjp = Pandas.DataFrame(res.pred);
        """)
        self.scores = self.Main.scoresjp
        self.predicted_results_on_test = pd.DataFrame(self.Main.resjp)

    @property
    def scores_(self):
        return self.scores, self.predicted_results_on_test