def model_training_testing(train_skeleton_information: pd.DataFrame, validation_skeleton_information: pd.DataFrame, test_skeleton_information: pd.DataFrame, current_model_name: str, parameters: dict):
    'Trains and validates model for the current model name and hyperparameters on the train_skeleton_informaiton and\n    validation_skeleton_information.\n\n        Args:\n            train_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,\n                                        subject_ids, and takes in the Training set.\n            validation_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,\n                                             subject_ids, and takes in the Validation set.\n            test_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,\n                                       subject_ids, and takes in the Test set.\n            current_model_name: Name of the model currently expected to be trained.\n            parameters: Current parameter values used for training and validating the model.\n\n        Returns:\n            A tuple which contains the training metrics, validation metrics, & test metrics.\n    '
    if (current_model_name == 'support_vector_classifier'):
        model = SVC(kernel=parameters['kernel'])
    elif (current_model_name == 'decision_tree_classifier'):
        model = DecisionTreeClassifier(criterion=parameters['criterion'], splitter=parameters['splitter'], max_depth=parameters['max_depth'])
    elif (current_model_name == 'random_forest_classifier'):
        model = RandomForestClassifier(n_estimators=parameters['n_estimators'], criterion=parameters['criterion'], max_depth=parameters['max_depth'])
    elif (current_model_name == 'extra_trees_classifier'):
        model = ExtraTreesClassifier(n_estimators=parameters['n_estimators'], criterion=parameters['criterion'], max_depth=parameters['max_depth'])
    elif (current_model_name == 'gradient_boosting_classifier'):
        model = GradientBoostingClassifier(n_estimators=parameters['n_estimators'], max_depth=parameters['max_depth'])
    else:
        model = GaussianNB()
    (train_skeleton_input_data, train_skeleton_target_data) = split_data_input_target(train_skeleton_information)
    model.fit(train_skeleton_input_data, train_skeleton_target_data)
    (train_skeleton_target_data, train_skeleton_predicted_data) = video_based_model_testing(train_skeleton_information, model)
    (validation_skeleton_target_data, validation_skeleton_predicted_data) = video_based_model_testing(validation_skeleton_information, model)
    (test_skeleton_target_data, test_skeleton_predicted_data) = video_based_model_testing(test_skeleton_information, model)
    train_metrics = calculate_metrics(train_skeleton_target_data, train_skeleton_predicted_data)
    validation_metrics = calculate_metrics(validation_skeleton_target_data, validation_skeleton_predicted_data)
    test_metrics = calculate_metrics(test_skeleton_target_data, test_skeleton_predicted_data)
    return (train_metrics, validation_metrics, test_metrics)
Trains and validates model for the current model name and hyperparameters on the train_skeleton_informaiton and
validation_skeleton_information.

    Args:
        train_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,
                                    subject_ids, and takes in the Training set.
        validation_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,
                                         subject_ids, and takes in the Validation set.
        test_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,
                                   subject_ids, and takes in the Test set.
        current_model_name: Name of the model currently expected to be trained.
        parameters: Current parameter values used for training and validating the model.

    Returns:
        A tuple which contains the training metrics, validation metrics, & test metrics.
def model_training_testing(train_skeleton_information: pd.DataFrame, validation_skeleton_information: pd.DataFrame, test_skeleton_information: pd.DataFrame, current_model_name: str, parameters: dict):
    'Trains and validates model for the current model name and hyperparameters on the train_skeleton_informaiton and\n    validation_skeleton_information.\n\n        Args:\n            train_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,\n                                        subject_ids, and takes in the Training set.\n            validation_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,\n                                             subject_ids, and takes in the Validation set.\n            test_skeleton_information: Pandas dataframe which contains skeleton point information for all actions,\n                                       subject_ids, and takes in the Test set.\n            current_model_name: Name of the model currently expected to be trained.\n            parameters: Current parameter values used for training and validating the model.\n\n        Returns:\n            A tuple which contains the training metrics, validation metrics, & test metrics.\n    '
    if (current_model_name == 'support_vector_classifier'):
        model = SVC(kernel=parameters['kernel'])
    elif (current_model_name == 'decision_tree_classifier'):
        model = DecisionTreeClassifier(criterion=parameters['criterion'], splitter=parameters['splitter'], max_depth=parameters['max_depth'])
    elif (current_model_name == 'random_forest_classifier'):
        model = RandomForestClassifier(n_estimators=parameters['n_estimators'], criterion=parameters['criterion'], max_depth=parameters['max_depth'])
    elif (current_model_name == 'extra_trees_classifier'):
        model = ExtraTreesClassifier(n_estimators=parameters['n_estimators'], criterion=parameters['criterion'], max_depth=parameters['max_depth'])
    elif (current_model_name == 'gradient_boosting_classifier'):
        model = GradientBoostingClassifier(n_estimators=parameters['n_estimators'], max_depth=parameters['max_depth'])
    else:
        model = GaussianNB()
    (train_skeleton_input_data, train_skeleton_target_data) = split_data_input_target(train_skeleton_information)
    model.fit(train_skeleton_input_data, train_skeleton_target_data)
    (train_skeleton_target_data, train_skeleton_predicted_data) = video_based_model_testing(train_skeleton_information, model)
    (validation_skeleton_target_data, validation_skeleton_predicted_data) = video_based_model_testing(validation_skeleton_information, model)
    (test_skeleton_target_data, test_skeleton_predicted_data) = video_based_model_testing(test_skeleton_information, model)
    train_metrics = calculate_metrics(train_skeleton_target_data, train_skeleton_predicted_data)
    validation_metrics = calculate_metrics(validation_skeleton_target_data, validation_skeleton_predicted_data)
    test_metrics = calculate_metrics(test_skeleton_target_data, test_skeleton_predicted_data)
    return (train_metrics, validation_metrics, test_metrics)