Source code for node_discriminant_analysis

# This file is part of Sympathy for Data.
# Copyright (c) 2017, Combine Control Systems AB
#
# SYMPATHY FOR DATA COMMERCIAL LICENSE
# You should have received a link to the License with Sympathy for Data.
"""
Some of the docstrings for this module have been automatically
extracted from the `scikit-learn <http://scikit-learn.org/>`_ library
and are covered by their respective licenses.
"""

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as Lda
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis as Qda

from sympathy.api import node
from sympathy.api.nodeconfig import Ports, Tag, Tags

from sylib.machinelearning.model import ModelPort
from sylib.machinelearning.abstract_nodes import SyML_abstract
from sylib.machinelearning.utility import names_from_x, names_from_y

from sylib.machinelearning.descriptors import BoolType
from sylib.machinelearning.descriptors import FloatType
from sylib.machinelearning.descriptors import IntType
from sylib.machinelearning.descriptors import NoneType
from sylib.machinelearning.descriptors import StringSelectionType
from sylib.machinelearning.descriptors import UnionType

from sylib_aml.discriminant_analysis import DiscriminantAnalysisDescriptor


[docs] class LinearDiscriminantAnalysis(SyML_abstract, node.Node): name = 'Linear Discriminant Analysis' author = 'Mathias Broxvall' icon = 'LDA.svg' description = ( 'Constructs linear combinations of features that separates two or ' 'more classes. Can used either as a linear classifier or, more ' 'commonly, as a dimensionality reduction technique. For ' 'dimensionality reduction it requires a Y input to the ' 'fit_transform node' ) nodeid = 'com.sympathyfordata.advancedmachinelearning' \ '.linear_discriminant_analysis' tags = Tags(Tag.MachineLearning.DimensionalityReduction) descriptor = DiscriminantAnalysisDescriptor() descriptor.name = name info = [ {'name': 'solver', 'dispname': 'Solver to use', 'type': StringSelectionType(['svd', 'lsqr', 'eigen'])}, {'name': 'shrinkage', 'dispname': 'Shrinkage parameter', 'type': UnionType([ FloatType(min_value=0, max_value=1), StringSelectionType(['auto']), NoneType()], default=None)}, {'name': 'n_components', 'dispname': 'N. of components for dimensionality reduction', 'type': UnionType([ IntType(min_value=1), NoneType(), ], default=None)}, {'name': 'store_covariance', 'dispname': 'Store covariance', 'type': BoolType(default=False)}, {'name': 'tol', 'dispname': 'Tolerance', 'type': FloatType(min_value=0.0, default=1e-4)}, ] descriptor.set_info(info, doc_class=Lda) descriptor.set_attributes([ {'name': 'coef_', 'cnames': names_from_x}, {'name': 'intercept_'}, {'name': 'covariance_', 'cnames': names_from_x, 'rnames': names_from_x}, {'name': 'explained_variance_ratio_'}, {'name': 'means_'}, {'name': 'priors_'}, {'name': 'scalings_'}, {'name': 'xbar_'}, {'name': 'classes_', 'cnames': names_from_y}, ], doc_class=Lda) parameters = node.parameters() SyML_abstract.generate_parameters(parameters, descriptor) inputs = Ports([]) outputs = Ports([ModelPort('Model', 'model')]) __doc__ = SyML_abstract.generate_docstring( '', descriptor.info, descriptor.attributes, inputs, outputs) def execute(self, node_context): model = node_context.output['model'] desc = self.__class__.descriptor model.set_desc(desc) kwargs = self.__class__.descriptor.get_parameters( node_context.parameters) skl = Lda(**kwargs) model.set_skl(skl) model.save()
[docs] class QuadraticDiscriminantAnalysis(SyML_abstract, node.Node): name = 'Quadratic Discriminant Analysis' author = 'Mathias Broxvall' icon = 'QDA.svg' description = ( 'Constructs a quadratic classifier that separates two or ' 'more classes.' ) nodeid = ('com.sympathyfordata.advancedmachinelearning' '.quadratic_discriminant_analysis') tags = Tags(Tag.MachineLearning.Supervised) descriptor = DiscriminantAnalysisDescriptor() descriptor.name = name info = [ {'name': 'reg_param', 'dispname': 'Covariance regularization parameter', 'type': FloatType(min_value=0, max_value=1, default=0.0)}, {'name': 'store_covariance', 'dispname': 'Store covariance', 'type': BoolType(default=False)}, {'name': 'tol', 'dispname': 'Tolerance', 'type': FloatType(min_value=0.0, default=1e-4)}, ] descriptor.set_info(info, doc_class=Qda) descriptor.set_attributes([ {'name': 'covariance_', 'cnames': names_from_x, 'rnames': names_from_x}, {'name': 'means_'}, {'name': 'priors_'}, {'name': 'scalings_'}, {'name': 'rotations_'}, ], doc_class=Qda) parameters = node.parameters() SyML_abstract.generate_parameters(parameters, descriptor) inputs = Ports([]) outputs = Ports([ModelPort('Model', 'model')]) __doc__ = SyML_abstract.generate_docstring( '', descriptor.info, descriptor.attributes, inputs, outputs) def execute(self, node_context): model = node_context.output['model'] desc = self.__class__.descriptor model.set_desc(desc) kwargs = self.__class__.descriptor.get_parameters( node_context.parameters) skl = Qda(**kwargs) model.set_skl(skl) model.save()