Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1027 remove separation on primary secondary pipeline nodes #1031

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cases/credit_scoring/credit_scoring_problem_multiobj.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from fedot.core.optimisers.gp_comp.operators.inheritance import GeneticSchemeTypesEnum
from fedot.core.optimisers.gp_comp.operators.selection import SelectionTypesEnum
from fedot.core.optimisers.gp_comp.pipeline_composer_requirements import PipelineComposerRequirements
from fedot.core.pipelines.node import PrimaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.pipelines.tuning.sequential import SequentialTuner
from fedot.core.pipelines.tuning.tuner_builder import TunerBuilder
Expand Down Expand Up @@ -94,7 +94,7 @@ def run_credit_scoring_problem(train_file_path, test_file_path,
.build(dataset_to_compose)
nodes = pipeline_evo_composed.nodes
for node_index, node in enumerate(nodes):
if isinstance(node, PrimaryNode):
if isinstance(node, PipelineNode) and node.is_primary:
pipeline_evo_composed = tuner.tune_node(pipeline_evo_composed, node_index)

pipeline_evo_composed.fit(input_data=dataset_to_compose)
Expand Down
10 changes: 5 additions & 5 deletions cases/river_levels_prediction/river_level_case_composer.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from fedot.core.data.data_split import train_test_data_setup
from fedot.core.optimisers.gp_comp.gp_params import GPGraphOptimizerParameters
from fedot.core.optimisers.gp_comp.pipeline_composer_requirements import PipelineComposerRequirements
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.pipelines.tuning.tuner_builder import TunerBuilder
from fedot.core.pipelines.tuning.unified import PipelineTuner
Expand Down Expand Up @@ -156,10 +156,10 @@ def run_river_composer_experiment(file_path, init_pipeline, file_to_save,

if __name__ == '__main__':
# Define pipeline to start composing with it
node_encoder = PrimaryNode('one_hot_encoding')
node_rans = SecondaryNode('ransac_lin_reg', nodes_from=[node_encoder])
node_scaling = SecondaryNode('scaling', nodes_from=[node_rans])
node_final = SecondaryNode('linear', nodes_from=[node_scaling])
node_encoder = PipelineNode('one_hot_encoding')
node_rans = PipelineNode('ransac_lin_reg', nodes_from=[node_encoder])
node_scaling = PipelineNode('scaling', nodes_from=[node_rans])
node_final = PipelineNode('linear', nodes_from=[node_scaling])

init_pipeline = Pipeline(node_final)

Expand Down
12 changes: 6 additions & 6 deletions cases/river_levels_prediction/river_level_case_manual.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from fedot.core.data.data import InputData
from fedot.core.data.data_split import train_test_data_setup
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.pipelines.tuning.tuner_builder import TunerBuilder
from fedot.core.pipelines.tuning.unified import PipelineTuner
Expand Down Expand Up @@ -85,11 +85,11 @@ def run_river_experiment(file_path, pipeline, iterations=20, tuner=None,


if __name__ == '__main__':
node_encoder = PrimaryNode('one_hot_encoding')
node_scaling = SecondaryNode('scaling', nodes_from=[node_encoder])
node_ridge = SecondaryNode('ridge', nodes_from=[node_scaling])
node_lasso = SecondaryNode('lasso', nodes_from=[node_scaling])
node_final = SecondaryNode('rfr', nodes_from=[node_ridge, node_lasso])
node_encoder = PipelineNode('one_hot_encoding')
node_scaling = PipelineNode('scaling', nodes_from=[node_encoder])
node_ridge = PipelineNode('ridge', nodes_from=[node_scaling])
node_lasso = PipelineNode('lasso', nodes_from=[node_scaling])
node_final = PipelineNode('rfr', nodes_from=[node_ridge, node_lasso])

init_pipeline = Pipeline(node_final)

Expand Down
8 changes: 4 additions & 4 deletions cases/spam_detection.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
from cases.dataset_preparation import unpack_archived_data
from fedot.core.data.data import InputData
from fedot.core.data.data_split import train_test_data_setup
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline


def execute_pipeline_for_text_problem(train_data, test_data):
node_text_clean = PrimaryNode('text_clean')
node_tfidf = SecondaryNode('tfidf', nodes_from=[node_text_clean])
model_node = SecondaryNode('multinb', nodes_from=[node_tfidf])
node_text_clean = PipelineNode('text_clean')
node_tfidf = PipelineNode('tfidf', nodes_from=[node_text_clean])
model_node = PipelineNode('multinb', nodes_from=[node_tfidf])
pipeline = Pipeline(model_node)
pipeline.fit(train_data)

Expand Down
16 changes: 8 additions & 8 deletions cases/time_series_gapfilling_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import pandas as pd
from sklearn.metrics import mean_absolute_error, mean_squared_error, median_absolute_error

from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.utils import fedot_project_root
from fedot.utilities.ts_gapfilling import ModelGapFiller
Expand Down Expand Up @@ -72,24 +72,24 @@ def get_composite_pipeline():
:return: Pipeline object
"""

node_1 = PrimaryNode('lagged')
node_1 = PipelineNode('lagged')
node_1.parameters = {'window_size': 150}
node_2 = PrimaryNode('lagged')
node_2 = PipelineNode('lagged')
node_2.parameters = {'window_size': 100}
node_linear_1 = SecondaryNode('linear', nodes_from=[node_1])
node_linear_2 = SecondaryNode('linear', nodes_from=[node_2])
node_linear_1 = PipelineNode('linear', nodes_from=[node_1])
node_linear_2 = PipelineNode('linear', nodes_from=[node_2])

node_final = SecondaryNode('ridge', nodes_from=[node_linear_1,
node_final = PipelineNode('ridge', nodes_from=[node_linear_1,
node_linear_2])
pipeline = Pipeline(node_final)
return pipeline


def get_simple_pipeline():
""" Function returns simple pipeline """
node_lagged = PrimaryNode('lagged')
node_lagged = PipelineNode('lagged')
node_lagged.parameters = {'window_size': 150}
node_ridge = SecondaryNode('ridge', nodes_from=[node_lagged])
node_ridge = PipelineNode('ridge', nodes_from=[node_lagged])
ridge_pipeline = Pipeline(node_ridge)
return ridge_pipeline

Expand Down
2 changes: 1 addition & 1 deletion docs/source/advanced/data_preprocessing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ For example, converting column to numerical if the number of unique values is gr
.. code:: python

# pipeline for which to set params
pipeline = Pipeline(PrimaryNode('dt'))
pipeline = Pipeline(PipelineNode('dt'))
pipeline = correct_preprocessing_params(pipeline, numerical_min_uniques=5)

After this preprocessing with this pipeline will be performed according to the specified conditions.
Expand Down
10 changes: 5 additions & 5 deletions docs/source/advanced/pipeline_import_export.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,21 @@ this way your pipeline and trained models will be saved in a folder in the follo

from cases.data.data_utils import get_scoring_case_data_paths
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.data.data import InputData

train_file_path, test_file_path = get_scoring_case_data_paths()
train_data = InputData.from_csv(train_file_path)

pipeline = Pipeline()
node_logit = PrimaryNode('logit')
node_logit = PipelineNode('logit')

node_lda = PrimaryNode('lda')
node_lda = PipelineNode('lda')
node_lda.parameters = {'n_components': 1}

node_xgboost = PrimaryNode('xgboost')
node_xgboost = PipelineNode('xgboost')

node_knn_second = SecondaryNode('knn')
node_knn_second = PipelineNode('knn')
node_knn_second.parameters = {'n_neighbors': 5}
node_knn_second.nodes_from = [node_logit, node_lda, node_xgboost]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ Manual way

.. code:: python

node_first = PrimaryNode('logit')
node_second = PrimaryNode('xgboost')
node_final = SecondaryNode('knn', nodes_from=[node_first, node_second])
node_first = PipelineNode('logit')
node_second = PipelineNode('xgboost')
node_final = PipelineNode('knn', nodes_from=[node_first, node_second])
pipeline = Pipeline(node_final)

The following pages provide examples of manually constructed pipelines for different tasks:
Expand Down
4 changes: 2 additions & 2 deletions examples/advanced/additional_learning.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from fedot.api.main import Fedot
from fedot.core.operations.atomized_model import AtomizedModel
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.pipelines.pipeline_builder import PipelineBuilder
from fedot.core.utils import fedot_project_root
Expand Down Expand Up @@ -34,7 +34,7 @@ def run_additional_learning_example():

prev_model.unfit()
atomized_model = Pipeline(
SecondaryNode(operation_type=AtomizedModel(prev_model), nodes_from=[PrimaryNode('scaling')]))
PipelineNode(operation_type=AtomizedModel(prev_model), nodes_from=[PipelineNode('scaling')]))
non_atomized_model = deepcopy(prev_model)

train_data = train_data.head(5000)
Expand Down
10 changes: 5 additions & 5 deletions examples/advanced/automl/h2o_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from examples.advanced.time_series_forecasting.composing_pipelines import visualise
from examples.simple.pipeline_import_export import create_correct_path
from fedot.core.data.data_split import train_test_data_setup
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.repository.operation_types_repository import OperationTypesRepository
from test.unit.tasks.test_classification import get_iris_data
Expand All @@ -13,21 +13,21 @@


def pipeline_h2o_class() -> Pipeline:
node = PrimaryNode('h2o_class')
node = PipelineNode('h2o_class')
pipeline = Pipeline(node)
return pipeline


def pipeline_h2o_regr() -> Pipeline:
node = PrimaryNode('h2o_regr')
node = PipelineNode('h2o_regr')
pipeline = Pipeline(node)
return pipeline


def pipeline_h2o_ts(window_size: int = 20):
node_lagged = PrimaryNode('lagged')
node_lagged = PipelineNode('lagged')
node_lagged.parameters = {'window_size': window_size}
node_root = SecondaryNode('h2o_regr', nodes_from=[node_lagged])
node_root = PipelineNode('h2o_regr', nodes_from=[node_lagged])

pipeline = Pipeline(node_root)

Expand Down
10 changes: 5 additions & 5 deletions examples/advanced/automl/pipeline_from_automl.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from cases.data.data_utils import get_scoring_case_data_paths
from fedot.core.data.data import InputData
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline


Expand All @@ -26,13 +26,13 @@ def run_pipeline_from_automl(train_file_path: str, test_file_path: str,

testing_target = test_data.target

node_scaling = PrimaryNode('scaling')
node_tpot = PrimaryNode('tpot_class')
node_scaling = PipelineNode('scaling')
node_tpot = PipelineNode('tpot_class')

node_tpot.parameters = {'timeout': max_run_time.seconds}

node_lda = SecondaryNode('lda', nodes_from=[node_scaling])
node_rf = SecondaryNode('rf', nodes_from=[node_tpot, node_lda])
node_lda = PipelineNode('lda', nodes_from=[node_scaling])
node_rf = PipelineNode('rf', nodes_from=[node_tpot, node_lda])
pipeline = Pipeline(node_rf)

pipeline.fit(train_data)
Expand Down
10 changes: 5 additions & 5 deletions examples/advanced/automl/tpot_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from examples.advanced.time_series_forecasting.composing_pipelines import visualise
from examples.simple.pipeline_import_export import create_correct_path
from fedot.core.data.data_split import train_test_data_setup
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from sklearn.metrics import roc_auc_score as roc_auc, mean_squared_error, mean_absolute_error

Expand All @@ -14,23 +14,23 @@


def pipeline_tpot_class() -> Pipeline:
node = PrimaryNode('tpot_class')
node = PipelineNode('tpot_class')
pipeline = Pipeline(node)

return pipeline


def pipeline_tpot_regr() -> Pipeline:
node = PrimaryNode('tpot_regr')
node = PipelineNode('tpot_regr')
pipeline = Pipeline(node)

return pipeline


def pipeline_tpot_ts(window_size: int = 20):
node_lagged = PrimaryNode('lagged')
node_lagged = PipelineNode('lagged')
node_lagged.parameters = {'window_size': window_size}
node_root = SecondaryNode('tpot_regr', nodes_from=[node_lagged])
node_root = PipelineNode('tpot_regr', nodes_from=[node_lagged])

pipeline = Pipeline(node_root)

Expand Down
8 changes: 4 additions & 4 deletions examples/advanced/automl/tpot_vs_fedot.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from tpot.export_utils import set_param_recursive

from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.data.data import InputData


Expand Down Expand Up @@ -35,9 +35,9 @@ def run_tpot_vs_fedot_example(train_file_path: str, test_file_path: str):

print(f'ROC AUC for TPOT: {roc_auc_value}')

node_scaling = PrimaryNode('scaling')
node_bernb = SecondaryNode('bernb', nodes_from=[node_scaling])
node_rf = SecondaryNode('rf', nodes_from=[node_bernb, node_scaling])
node_scaling = PipelineNode('scaling')
node_bernb = PipelineNode('bernb', nodes_from=[node_scaling])
node_rf = PipelineNode('rf', nodes_from=[node_bernb, node_scaling])
pipeline = Pipeline(node_rf)

pipeline.fit(train_data)
Expand Down
20 changes: 10 additions & 10 deletions examples/advanced/decompose/classification_refinement_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from cases.credit_scoring.credit_scoring_problem import get_scoring_data, calculate_validation_metric
from fedot.core.data.data import InputData
from fedot.core.pipelines.node import PrimaryNode, SecondaryNode
from fedot.core.pipelines.node import PipelineNode
from fedot.core.pipelines.pipeline import Pipeline
from fedot.core.pipelines.tuning.tuner_builder import TunerBuilder
from fedot.core.pipelines.tuning.unified import PipelineTuner
Expand All @@ -17,22 +17,22 @@

def get_refinement_pipeline():
""" Create 3-level pipeline with class_decompose node """
node_scaling = PrimaryNode('scaling')
node_logit = SecondaryNode('logit', nodes_from=[node_scaling])
node_decompose = SecondaryNode('class_decompose', nodes_from=[node_logit, node_scaling])
node_rfr = SecondaryNode('rfr', nodes_from=[node_decompose])
node_rf = SecondaryNode('rf', nodes_from=[node_rfr, node_logit])
node_scaling = PipelineNode('scaling')
node_logit = PipelineNode('logit', nodes_from=[node_scaling])
node_decompose = PipelineNode('class_decompose', nodes_from=[node_logit, node_scaling])
node_rfr = PipelineNode('rfr', nodes_from=[node_decompose])
node_rf = PipelineNode('rf', nodes_from=[node_rfr, node_logit])

pipeline = Pipeline(node_rf)
return pipeline


def get_non_refinement_pipeline():
""" Create 3-level pipeline without class_decompose node """
node_scaling = PrimaryNode('scaling')
node_rf = SecondaryNode('rf', nodes_from=[node_scaling])
node_logit = SecondaryNode('logit', nodes_from=[node_scaling])
node_rf = SecondaryNode('rf', nodes_from=[node_logit, node_rf])
node_scaling = PipelineNode('scaling')
node_rf = PipelineNode('rf', nodes_from=[node_scaling])
node_logit = PipelineNode('logit', nodes_from=[node_scaling])
node_rf = PipelineNode('rf', nodes_from=[node_logit, node_rf])
pipeline = Pipeline(node_rf)
return pipeline

Expand Down
Loading