Skip to content
Snippets Groups Projects
boost.py 3.43 KiB
Newer Older
Dominique Benielli's avatar
Dominique Benielli committed
# -*- coding: utf-8 -*-
# ######### COPYRIGHT #########
#
# Copyright(c) 2020
# -----------------
#
# * Université d'Aix Marseille (AMU) -
# * Centre National de la Recherche Scientifique (CNRS) -
# * Université de Toulon (UTLN).
# * Copyright © 2019-2020 AMU, CNRS, UTLN
#
# Contributors:
# ------------
#
# * Sokol Koço <sokol.koco_AT_lis-lab.fr>
# * Cécile Capponi <cecile.capponi_AT_univ-amu.fr>
# * Florent Jaillet <florent.jaillet_AT_math.cnrs.fr>
# * Dominique Benielli <dominique.benielli_AT_univ-amu.fr>
# * Riikka Huusari <rikka.huusari_AT_univ-amu.fr>
# * Baptiste Bauvin <baptiste.bauvin_AT_univ-amu.fr>
# * Hachem Kadri <hachem.kadri_AT_lis-lab.fr>
#
# Description:
# -----------
#
# The multimodal package implement classifiers multiview, 
# MumboClassifier class, MuComboClassifier class, MVML class, MKL class.
Dominique Benielli's avatar
Dominique Benielli committed
# compatible with sklearn
#
# Version:
# -------
#
# * multimodal version = 0.0.dev0
#
# Licence:
# -------
#
# License: New BSD License
#
#
# ######### COPYRIGHT #########
Dominique Benielli's avatar
Dominique Benielli committed
import numpy as np
import scipy.sparse as sp
Dominique Benielli's avatar
Dominique Benielli committed
from abc import ABCMeta
from sklearn.utils import check_array, check_X_y, check_random_state
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import BaseDecisionTree
Dominique Benielli's avatar
Dominique Benielli committed
from sklearn.tree._tree import DTYPE
from sklearn.ensemble._forest import BaseForest
from multimodal.datasets.data_sample import DataSample
from multimodal.datasets.data_sample import MultiModalData, MultiModalArray, MultiModalSparseArray

Dominique Benielli's avatar
Dominique Benielli committed

class UBoosting(metaclass=ABCMeta):
    """
    Abstract class MuComboClassifier and  MumboClassifier should inherit from
Dominique Benielli's avatar
Dominique Benielli committed
    UBoosting for methods
    """

    def _validate_X_predict(self, X):
        """Ensure that X is in the proper format."""
        if X.ndim < 2:
Dominique Benielli's avatar
Dominique Benielli committed
            X = X[np.newaxis, :]
            if X.shape[1] != self.n_features_:
                raise ValueError("Number of features of the model must "
Dominique Benielli's avatar
Dominique Benielli committed
                                    "match the input. Model n_features is %s and "
                                     "input n_features is %s " % (self.n_features_, X.shape[1]))
            else:
Baptiste Bauvin's avatar
Baptiste Bauvin committed
                mes = "Reshape your data as a 2D-array "
Dominique Benielli's avatar
Dominique Benielli committed
                raise ValueError(mes)
Baptiste Bauvin's avatar
Baptiste Bauvin committed
        if (self.base_estimator is None or
                isinstance(self.base_estimator,
                           (BaseDecisionTree, BaseForest))):
            check_array(X, accept_sparse='csr', dtype=DTYPE)

        else:
            check_array(X, accept_sparse=['csr', 'csc'])
Dominique Benielli's avatar
Dominique Benielli committed
        if X.ndim > 1:
            if X.shape[1] != self.n_features_:
                if X.shape[0] == self.n_features_ and X.shape[1] > 1:
                    raise ValueError("Reshape your data")
                else:
                    raise ValueError("Number of features of the model must "
                                    "match the input. Model n_features is %s and "
                                     "input n_features is %s " % (self.n_features_, X.shape[1]))
Dominique Benielli's avatar
Dominique Benielli committed

    def _global_X_transform(self, X, views_ind=None):
        X_ = None
Dominique Benielli's avatar
Dominique Benielli committed
        if isinstance(X, MultiModalData):
            X_ = X
        elif isinstance(X, sp.spmatrix):
            X_ = MultiModalSparseArray(X, views_ind)
        else:
Dominique Benielli's avatar
Dominique Benielli committed
            X_ = MultiModalArray(X, views_ind)
Baptiste Bauvin's avatar
Baptiste Bauvin committed
        # if not isinstance(X_, MultiModalData):
        #     try:
        #         X_ = np.asarray(X)
        #         X_ = MultiModalArray(X_)
        #     except Exception as e:
        #         raise TypeError('Reshape your data')