Skip to content

Commit

Permalink
pipeline components added, readme, docs
Browse files Browse the repository at this point in the history
  • Loading branch information
lukapecnik committed Dec 12, 2020
1 parent f00230a commit 85bd0c0
Show file tree
Hide file tree
Showing 9 changed files with 289 additions and 11 deletions.
12 changes: 10 additions & 2 deletions COMPONENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@
* Extremely Randomized Trees (ExtremelyRandomizedTrees),
* Linear SVC (LinearSVC),
* Multi Layer Perceptron (MultiLayerPerceptron),
* Random Forest Classifier (RandomForestClassifier).
* Random Forest Classifier (RandomForest),
* Decision Tree Classifier (DecisionTree),
* K-Neighbors Classifier (KNeighbors),
* Gaussian Process Classifier (GaussianProcess),
* Gaussian Naive Bayes (GaussianNB),
* Quadratic Discriminant Analysis (QuadraticDiscriminantAnalysis).

### Feature Selection Algorithms

Expand All @@ -24,7 +29,10 @@
### Feature Transformation Algorithms

* Normalizer (Normalizer),
* Standard Scaler (StandardScaler).
* Standard Scaler (StandardScaler),
* Maximum Absolute Scaler (MaxAbsScaler),
* Quantile Transformer (QuantileTransformer),
* Robust Scaler (RobustScaler).

### Fitness Functions based on

Expand Down
16 changes: 12 additions & 4 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,12 @@ Classifiers
- Extremely Randomized Trees (ExtremelyRandomizedTrees),
- Linear SVC (LinearSVC),
- Multi Layer Perceptron (MultiLayerPerceptron),
- Random Forest Classifier (RandomForestClassifier).
- Random Forest Classifier (RandomForest),
- Decision Tree Classifier (DecisionTree),
- K-Neighbors Classifier (KNeighbors),
- Gaussian Process Classifier (GaussianProcess),
- Gaussian Naive Bayes (GaussianNB),
- Quadratic Discriminant Analysis (QuadraticDiscriminantAnalysis).

Feature Selection Algorithms
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand All @@ -130,10 +135,13 @@ Feature Transformation Algorithms
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Normalizer (Normalizer),
- Standard Scaler (StandardScaler).
- Standard Scaler (StandardScaler),
- Maximum Absolute Scaler (MaxAbsScaler),
- Quantile Transformer (QuantileTransformer),
- Robust Scaler (RobustScaler).

Fitness Functions
~~~~~~~~~~~~~~~~~
Fitness Functions based on
~~~~~~~~~~~~~~~~~~~~~~~~~~

- Accuracy (Accuracy),
- Cohen's kappa (CohenKappa),
Expand Down
26 changes: 22 additions & 4 deletions docs/getting_started.rst
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,12 @@ Classifiers
* Extremely Randomized Trees (ExtremelyRandomizedTrees),
* Linear SVC (LinearSVC),
* Multi Layer Perceptron (MultiLayerPerceptron),
* Random Forest Classifier (RandomForestClassifier).
* Random Forest Classifier (RandomForest),
* Decision Tree Classifier (DecisionTree),
* K-Neighbors Classifier (KNeighbors),
* Gaussian Process Classifier (GaussianProcess),
* Gaussian Naive Bayes (GaussianNB),
* Quadratic Discriminant Analysis (QuadraticDiscriminantAnalysis).

Feature Selection Algorithms
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -93,16 +98,29 @@ Feature Transformation Algorithms
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* Normalizer (Normalizer),
* Standard Scaler (StandardScaler).
* Standard Scaler (StandardScaler),
* Maximum Absolute Scaler (MaxAbsScaler),
* Quantile Transformer (QuantileTransformer),
* Robust Scaler (RobustScaler).

Fitness Functions
^^^^^^^^^^^^^^^^^
Fitness Functions based on
^^^^^^^^^^^^^^^^^^^^^^^^^^

* Accuracy (Accuracy),
* Cohen's kappa (CohenKappa),
* F1-Score (F1),
* Precision (Precision).

Categorical Feature Encoders
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* One-Hot Encoder (OneHotEncoder).

Feature Imputers
^^^^^^^^^^^^^^^^

* Simple Imputer (SimpleImputer).

Optimization Algorithms
^^^^^^^^^^^^^^^^^^^^^^^

Expand Down
6 changes: 6 additions & 0 deletions niaaml/classifiers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
from niaaml.classifiers.bagging import Bagging
from niaaml.classifiers.decision_tree import DecisionTree
from niaaml.classifiers.k_neighbors import KNeighbors
from niaaml.classifiers.gaussian_process import GaussianProcess
from niaaml.classifiers.gaussian_naive_bayes import GaussianNB
from niaaml.classifiers.quadratic_driscriminant_analysis import QuadraticDiscriminantAnalysis
from niaaml.classifiers.utility import ClassifierFactory

__all__ = [
Expand All @@ -19,5 +22,8 @@
'ExtremelyRandomizedTrees',
'DecisionTree',
'KNeighbors',
'GaussianProcess',
'GaussianNB',
'QuadraticDiscriminantAnalysis',
'ClassifierFactory'
]
66 changes: 66 additions & 0 deletions niaaml/classifiers/gaussian_naive_bayes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from niaaml.classifiers.classifier import Classifier
from niaaml.utilities import MinMax
from niaaml.utilities import ParameterDefinition
from sklearn.naive_bayes import GaussianNB as GNB
import numpy as np

__all__ = ['GaussianNB']

class GaussianNB(Classifier):
r"""Implementation of gaussian Naive Bayes classifier.
Date:
2020
Author:
Luka Pečnik
License:
MIT
See Also:
* :class:`niaaml.classifiers.Classifier`
"""
Name = 'Gaussian Naive Bayes'

def __init__(self, **kwargs):
r"""Initialize GaussianNB instance.
"""
self.__gaussian_nb = GNB()
super(GaussianNB, self).__init__()

def set_parameters(self, **kwargs):
r"""Set the parameters/arguments of the algorithm.
"""
self.__gaussian_nb.set_params(**kwargs)

def fit(self, x, y, **kwargs):
r"""Fit GaussianNB.
Arguments:
x (pandas.core.frame.DataFrame): n samples to classify.
y (pandas.core.series.Series): n classes of the samples in the x array.
Returns:
None
"""
self.__gaussian_nb.fit(x, y)

def predict(self, x, **kwargs):
r"""Predict class for each sample (row) in x.
Arguments:
x (pandas.core.frame.DataFrame): n samples to classify.
Returns:
pandas.core.series.Series: n predicted classes.
"""
return self.__gaussian_nb.predict(x)

def to_string(self):
r"""User friendly representation of the object.
Returns:
str: User friendly representation of the object.
"""
return Classifier.to_string(self).format(name=self.Name, args=self._parameters_to_string(self.__gaussian_nb.get_params()))
70 changes: 70 additions & 0 deletions niaaml/classifiers/gaussian_process.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
from niaaml.classifiers.classifier import Classifier
from niaaml.utilities import MinMax
from niaaml.utilities import ParameterDefinition
from sklearn.gaussian_process import GaussianProcessClassifier as GPC
import numpy as np

__all__ = ['GaussianProcess']

class GaussianProcess(Classifier):
r"""Implementation of gaussian process classifier.
Date:
2020
Author:
Luka Pečnik
License:
MIT
See Also:
* :class:`niaaml.classifiers.Classifier`
"""
Name = 'Gaussian Process Classifier'

def __init__(self, **kwargs):
r"""Initialize GaussianProcess instance.
"""
self._params = dict(
max_iter_predict = ParameterDefinition(MinMax(50, 200), np.uint),
warm_start = ParameterDefinition([True, False]),
multi_class = ParameterDefinition(['one_vs_rest', 'one_vs_one'])
)
self.__gaussian_process = GPC()

def set_parameters(self, **kwargs):
r"""Set the parameters/arguments of the algorithm.
"""
self.__gaussian_process.set_params(**kwargs)

def fit(self, x, y, **kwargs):
r"""Fit GaussianProcess.
Arguments:
x (pandas.core.frame.DataFrame): n samples to classify.
y (pandas.core.series.Series): n classes of the samples in the x array.
Returns:
None
"""
self.__gaussian_process.fit(x, y)

def predict(self, x, **kwargs):
r"""Predict class for each sample (row) in x.
Arguments:
x (pandas.core.frame.DataFrame): n samples to classify.
Returns:
pandas.core.series.Series: n predicted classes.
"""
return self.__gaussian_process.predict(x)

def to_string(self):
r"""User friendly representation of the object.
Returns:
str: User friendly representation of the object.
"""
return Classifier.to_string(self).format(name=self.Name, args=self._parameters_to_string(self.__gaussian_process.get_params()))
66 changes: 66 additions & 0 deletions niaaml/classifiers/quadratic_driscriminant_analysis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from niaaml.classifiers.classifier import Classifier
from niaaml.utilities import MinMax
from niaaml.utilities import ParameterDefinition
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis as QDA
import numpy as np

__all__ = ['QuadraticDiscriminantAnalysis']

class QuadraticDiscriminantAnalysis(Classifier):
r"""Implementation of quadratic discriminant analysis classifier.
Date:
2020
Author:
Luka Pečnik
License:
MIT
See Also:
* :class:`niaaml.classifiers.Classifier`
"""
Name = 'Quadratic Discriminant Analysis'

def __init__(self, **kwargs):
r"""Initialize QuadraticDiscriminantAnalysis instance.
"""
self.__qda = QDA()
super(QuadraticDiscriminantAnalysis, self).__init__()

def set_parameters(self, **kwargs):
r"""Set the parameters/arguments of the algorithm.
"""
self.__qda.set_params(**kwargs)

def fit(self, x, y, **kwargs):
r"""Fit QuadraticDiscriminantAnalysis.
Arguments:
x (pandas.core.frame.DataFrame): n samples to classify.
y (pandas.core.series.Series): n classes of the samples in the x array.
Returns:
None
"""
self.__qda.fit(x, y)

def predict(self, x, **kwargs):
r"""Predict class for each sample (row) in x.
Arguments:
x (pandas.core.frame.DataFrame): n samples to classify.
Returns:
pandas.core.series.Series: n predicted classes.
"""
return self.__qda.predict(x)

def to_string(self):
r"""User friendly representation of the object.
Returns:
str: User friendly representation of the object.
"""
return Classifier.to_string(self).format(name=self.Name, args=self._parameters_to_string(self.__qda.get_params()))
8 changes: 7 additions & 1 deletion niaaml/classifiers/utility.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
from niaaml.classifiers.random_forest import RandomForest
from niaaml.classifiers.decision_tree import DecisionTree
from niaaml.classifiers.k_neighbors import KNeighbors
from niaaml.classifiers.gaussian_process import GaussianProcess
from niaaml.classifiers.gaussian_naive_bayes import GaussianNB
from niaaml.classifiers.quadratic_driscriminant_analysis import QuadraticDiscriminantAnalysis

__all__ = [
'ClassifierFactory'
Expand Down Expand Up @@ -42,5 +45,8 @@ def _set_parameters(self, **kwargs):
'MultiLayerPerceptron': MultiLayerPerceptron,
'RandomForest': RandomForest,
'DecisionTree': DecisionTree,
'KNeighbors': KNeighbors
'KNeighbors': KNeighbors,
'GaussianProcess': GaussianProcess,
'GaussianNB': GaussianNB,
'QuadraticDiscriminantAnalysis': QuadraticDiscriminantAnalysis
}
30 changes: 30 additions & 0 deletions niaaml/tests/test_classifiers.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,34 @@ def test_rf_works_fine(self):
algo = c.RandomForest()
algo.fit(self.__x_train, self.__y_train)
predictions = algo.predict(self.__x_test)
self.assertEqual(predictions.shape, self.__y_test.shape)

def test_dt_works_fine(self):
algo = c.DecisionTree()
algo.fit(self.__x_train, self.__y_train)
predictions = algo.predict(self.__x_test)
self.assertEqual(predictions.shape, self.__y_test.shape)

def test_kn_works_fine(self):
algo = c.KNeighbors()
algo.fit(self.__x_train, self.__y_train)
predictions = algo.predict(self.__x_test)
self.assertEqual(predictions.shape, self.__y_test.shape)

def test_gp_works_fine(self):
algo = c.GaussianProcess()
algo.fit(self.__x_train, self.__y_train)
predictions = algo.predict(self.__x_test)
self.assertEqual(predictions.shape, self.__y_test.shape)

def test_gnb_works_fine(self):
algo = c.GaussianNB()
algo.fit(self.__x_train, self.__y_train)
predictions = algo.predict(self.__x_test)
self.assertEqual(predictions.shape, self.__y_test.shape)

def test_qda_works_fine(self):
algo = c.QuadraticDiscriminantAnalysis()
algo.fit(self.__x_train, self.__y_train)
predictions = algo.predict(self.__x_test)
self.assertEqual(predictions.shape, self.__y_test.shape)

0 comments on commit 85bd0c0

Please sign in to comment.