view generalized_linear.xml @ 10:44699d79d908 draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/sklearn commit 97c4f22cdcfa6cddeeffc7b102c418a7ff12a888
author bgruening
date Tue, 05 Jun 2018 06:47:46 -0400
parents fd6c50f21cd0
children 6cf4b82c72bc
line wrap: on
line source

<tool id="sklearn_generalized_linear" name="Generalized linear models" version="@VERSION@">
    <description>for classification and regression</description>
    <macros>
        <import>main_macros.xml</import>
    </macros>
    <expand macro="python_requirements"/>
    <expand macro="macro_stdio"/>
    <version_command>echo "@VERSION@"</version_command>
    <command><![CDATA[
    python "$glm_script" '$inputs'
]]>
    </command>
    <configfiles>
        <inputs name="inputs"/>
        <configfile name="glm_script">
<![CDATA[
import sys
import json
import numpy as np
import sklearn.linear_model
import pandas
import pickle
from scipy.io import mmread

@COLUMNS_FUNCTION@

input_json_path = sys.argv[1]
params = json.load(open(input_json_path, "r"))

#if $selected_tasks.selected_task == "train":

algorithm = params["selected_tasks"]["selected_algorithms"]["selected_algorithm"]
options = params["selected_tasks"]["selected_algorithms"]["options"]

#if $selected_tasks.selected_algorithms.input_options.selected_input=="tabular":
header = 'infer' if params["selected_tasks"]["selected_algorithms"]["input_options"]["header1"] else None
column_option = params["selected_tasks"]["selected_algorithms"]["input_options"]["column_selector_options_1"]["selected_column_selector_option"]
if column_option == "by_index_number":
    c = params["selected_tasks"]["selected_algorithms"]["input_options"]["column_selector_options_1"]["col1"]
else:
    c = None
X = read_columns(
        "$selected_tasks.selected_algorithms.input_options.infile1",
        c = c,
        c_option = column_option,
        sep='\t',
        header=header,
        parse_dates=True
)
#else:
X = mmread(open("$selected_tasks.selected_algorithms.input_options.infile1", 'r'))
#end if

header = 'infer' if params["selected_tasks"]["selected_algorithms"]["input_options"]["header2"] else None
column_option = params["selected_tasks"]["selected_algorithms"]["input_options"]["column_selector_options_2"]["selected_column_selector_option2"]
if column_option == "by_index_number":
    c = params["selected_tasks"]["selected_algorithms"]["input_options"]["column_selector_options_2"]["col2"]
else:
    c = None
y = read_columns(
        "$selected_tasks.selected_algorithms.input_options.infile2",
        c = c,
        c_option = column_option,
        sep='\t',
        header=header,
        parse_dates=True
)

my_class = getattr(sklearn.linear_model, algorithm)
estimator = my_class(**options)
estimator.fit(X,y)
pickle.dump(estimator,open("$outfile_fit", 'w+'), pickle.HIGHEST_PROTOCOL)

#else:
classifier_object = pickle.load(open("$selected_tasks.infile_model", 'r'))
data = pandas.read_csv("$selected_tasks.infile_data", sep='\t', header=None, index_col=None, parse_dates=True, encoding=None, tupleize_cols=False )
prediction = classifier_object.predict(data)
prediction_df = pandas.DataFrame(prediction)
res = pandas.concat([data, prediction_df], axis=1)
res.to_csv(path_or_buf = "$outfile_predict", sep="\t", index=False, header=None)
#end if

]]>
        </configfile>
    </configfiles>
    <inputs>
        <expand macro="sl_Conditional" model="zip">
            <param name="selected_algorithm" type="select" label="Select a linear model:">
                <option value="SGDClassifier" selected="true">Stochastic Gradient Descent (SGD) classifier</option>
                <option value="SGDRegressor">Stochastic Gradient Descent (SGD) regressor</option>
                <option value="LinearRegression">Linear Regression model</option>
                <option value="RidgeClassifier">Ridge classifier</option>
                <option value="Ridge">Ridge regressor</option>
                <option value="LogisticRegression">Logistic Regression</option>
                <option value="LogisticRegressionCV">Logitic Regression with Cross Validation</option>
                <option value="Perceptron">Perceptron</option>
            </param>
            <when value="SGDClassifier">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <expand macro="loss">
                        <option value="hinge" selected="true">hinge</option>
                        <option value="log">log</option>
                        <option value="modified_huber">modified huber</option>
                        <option value="squared_hinge">squared hinge</option>
                        <option value="perceptron">perceptron</option>
                    </expand>
                    <expand macro="penalty"/>
                    <expand macro="alpha"/>
                    <expand macro="l1_ratio"/>
                    <expand macro="fit_intercept"/>
                    <expand macro="n_iter" />
                    <expand macro="shuffle"/>
                    <expand macro="epsilon"/>
                    <expand macro="learning_rate_s" selected1="true"/>
                    <expand macro="eta0"/>
                    <expand macro="power_t"/>
                    <!--class_weight-->
                    <expand macro="warm_start" checked="false"/>
                    <expand macro="random_state"/>
                    <!--average-->
                </section>
            </when>
            <when value="SGDRegressor">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <expand macro="loss" select="true"/>
                    <expand macro="penalty"/>
                    <expand macro="alpha"/>
                    <expand macro="l1_ratio"/>
                    <expand macro="fit_intercept"/>
                    <expand macro="n_iter" />
                    <expand macro="shuffle"/>
                    <expand macro="epsilon"/>
                    <expand macro="learning_rate_s" selected2="true"/>
                    <expand macro="eta0" default_value="0.01"/>
                    <expand macro="power_t" default_value="0.25"/>
                    <expand macro="warm_start" checked="false"/>
                    <expand macro="random_state"/>
                    <!--average-->
                </section>
            </when>
            <when value="LinearRegression">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <expand macro="fit_intercept"/>
                    <expand macro="normalize"/>
                    <expand macro="copy_X"/>
                </section>
            </when>
            <when value="RidgeClassifier">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <expand macro="ridge_params"/>
                </section>
            </when>
            <when value="Ridge">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <expand macro="ridge_params"/>
                </section>
            </when>
            <when value="LogisticRegression">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <expand macro="penalty"/>
                    <param argument="dual" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false" label="Use dual formulation" help=" "/>
                    <expand macro="tol" default_value="0.0001" help_text="Tolerance for stopping criteria. "/>
                    <expand macro="C"/>
                    <expand macro="fit_intercept"/>
                    <expand macro="max_iter" default_value="100"/>
                    <expand macro="warm_start" checked="false"/>
                    <param argument="solver" type="select" label="Optimization algorithm" help=" ">
                        <option value="liblinear" selected="true">liblinear</option>
                        <option value="sag">sag</option>
                        <option value="lbfgs">lbfgs</option>
                        <option value="newton-cg">newton-cg</option>
                    </param>
                    <param argument="intercept_scaling" type="float" value="1" label="Intercept scaling factor" help="Useful only if solver is liblinear. "/>
                    <param argument="multi_class" type="select" label="Multiclass option" help="Works only for lbfgs solver. ">
                        <option value="ovr" selected="true">ovr</option>
                        <option value="multinomial">multinomial</option>
                    </param>
                    <!--class_weight-->
                    <expand macro="random_state"/>
                </section>
            </when>
            <when value="LogisticRegressionCV">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <param argument="Cs" type="integer" value="10" label="Inverse of regularization strength" help="A grid of Cs values are chosen in a logarithmic scale between 1e-4 and 1e4. Like in support vector machines, smaller values specify stronger regularization. "/>
                    <param argument="dual" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false" label="Use dual formulation" help=" "/>
                    <param argument="cv" type="integer" optional="true" value="" label="Number of folds used in cross validation" help="If not set, the default cross-validation generator (Stratified K-Folds) is used. "/>
                    <expand macro="penalty"/>
                    <expand macro="tol" default_value="0.0001" help_text="Tolerance for stopping criteria. "/>
                    <expand macro="fit_intercept"/>
                    <expand macro="max_iter" default_value="100"/>
                    <param argument="solver" type="select" label="Optimization algorithm" help=" ">
                        <option value="liblinear" selected="true">liblinear</option>
                        <option value="sag">sag</option>
                        <option value="lbfgs">lbfgs</option>
                        <option value="newton-cg">newton-cg</option>
                    </param>
                    <param argument="intercept_scaling" type="float" value="1" label="Intercept scaling factor" help="Useful only if solver is liblinear. "/>
                    <param argument="multi_class" type="select" label="Multiclass option" help="Works only for lbfgs solver. ">
                        <option value="ovr" selected="true">ovr</option>
                        <option value="multinomial">multinomial</option>
                    </param>
                    <param argument="refit" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true" label="Average scores across all folds" help=" "/>
                    <expand macro="random_state"/>
                    <!--scoring=None>
                    <class_weight=None-->
                </section>
            </when>
            <when value="Perceptron">
                <expand macro="sl_mixed_input"/>
                <section name="options" title="Advanced Options" expanded="False">
                    <expand macro="penalty" default_value="none"/>
                    <expand macro="alpha"/>
                    <expand macro="fit_intercept"/>
                    <expand macro="n_iter" />
                    <expand macro="shuffle"/>
                    <expand macro="eta0" default_value="1"/>
                    <expand macro="warm_start" checked="false"/>
                    <expand macro="random_state" default_value="0"/>
                    <!--class_weight=None-->
                </section>
            </when>
        </expand>
    </inputs>
    <outputs>
        <data format="tabular" name="outfile_predict">
            <filter>selected_tasks['selected_task'] == 'load'</filter>
        </data>
        <data format="zip" name="outfile_fit">
            <filter>selected_tasks['selected_task'] == 'train'</filter>
        </data>
    </outputs>
    <tests>
        <test>
            <param name="infile1" value="regression_train.tabular" ftype="tabular"/>
            <param name="infile2" value="regression_train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4,5"/>
            <param name="col2" value="6"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="SGDRegressor"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model01" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model01" ftype="zip"/>
            <param name="infile_data" value="regression_test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result01" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile1" value="train.tabular" ftype="tabular"/>
            <param name="infile2" value="train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4"/>
            <param name="col2" value="5"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="SGDClassifier"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model02" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model02" ftype="zip"/>
            <param name="infile_data" value="test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result02"/>
        </test>
        <test>
            <param name="infile1" value="train.tabular" ftype="tabular"/>
            <param name="infile2" value="train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4"/>
            <param name="col2" value="5"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="RidgeClassifier"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model03" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model03" ftype="zip"/>
            <param name="infile_data" value="test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result03"/>
        </test>
        <test>
            <param name="infile1" value="regression_train.tabular" ftype="tabular"/>
            <param name="infile2" value="regression_train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4,5"/>
            <param name="col2" value="6"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="LinearRegression"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model04" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model04" ftype="zip"/>
            <param name="infile_data" value="regression_test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result04" compare="sim_size"/>
        </test>
        <test>
            <param name="infile1" value="train.tabular" ftype="tabular"/>
            <param name="infile2" value="train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4"/>
            <param name="col2" value="5"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="LogisticRegression"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model05" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model05" ftype="zip"/>
            <param name="infile_data" value="test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result05"/>
        </test>
        <test>
            <param name="infile1" value="train.tabular" ftype="tabular"/>
            <param name="infile2" value="train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4"/>
            <param name="col2" value="5"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="LogisticRegressionCV"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model06" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model06" ftype="zip"/>
            <param name="infile_data" value="test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result06"/>
        </test>
        <test>
            <param name="infile1" value="regression_train.tabular" ftype="tabular"/>
            <param name="infile2" value="regression_train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4,5"/>
            <param name="col2" value="6"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="Ridge"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model07" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model07" ftype="zip"/>
            <param name="infile_data" value="regression_test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result07" compare="sim_size"/>
        </test>
        <test>
            <param name="infile1" value="train.tabular" ftype="tabular"/>
            <param name="infile2" value="train.tabular" ftype="tabular"/>
            <param name="col1" value="1,2,3,4"/>
            <param name="col2" value="5"/>
            <param name="selected_task" value="train"/>
            <param name="selected_algorithm" value="LogisticRegressionCV"/>
            <param name="random_state" value="10"/>
            <output name="outfile_fit" file="glm_model08" compare="sim_size" delta="500"/>
        </test>
        <test>
            <param name="infile_model" value="glm_model08" ftype="zip"/>
            <param name="infile_data" value="test.tabular" ftype="tabular"/>
            <param name="selected_task" value="load"/>
            <output name="outfile_predict" file="glm_result08"/>
        </test>
    </tests>
    <help><![CDATA[
***What it does***
This module implements a set of linear models for classification and regression such as: SGD classification and regression,  Linear and Ridge regression and classification. This wrapper is using sklearn.linear_model module at its core. For information about linear models and their parameter settings please refer to `Scikit-learn generalized linear models`_.

.. _`Scikit-learn generalized linear models`: http://scikit-learn.org/stable/modules/linear_model.html

 **1 - Methods**
 There are two groups of operations available:

  1 - Train a model : A training set containing samples and their respective labels (or predicted values) are input. Based on the selected algorithm and options, an estimator object is fit to the data and is returned.

  2 - Load a model and predict : An existing model predicts the class labels (or regression values) for a new dataset.

 **2 - Trainig input**
 When you choose to train a model, you need a features dataset X and a labels set y. This tool expects tabular or sparse data for X and a single column for y (tabular). You can select a subset of columns in a tabular dataset as your features dataset or labels column. Below you find some examples:

 **Sample tabular features dataset**
 The following training dataset contains 3 feature columns and a column containing class labels. You can simply select the first 3 columns as features and the last column as labels:

 ::

  4.01163365529    -6.10797684314    8.29829894763     1
  10.0788438916    1.59539821454     10.0684278289     0
  -5.17607775503   -0.878286135332   6.92941850665     2
  4.00975406235    -7.11847496542    9.3802423585      1
  4.61204065139    -5.71217537352    9.12509610964     1


 **Sample sparse features dataset**
 In this case you cannot specifiy a column range.

 ::

  4 1048577 8738
  1 271 0.020833
  1 1038 0.02461
  2 829017 0.016
  2 829437 0.012
  2 830752 0.025
  3 1047487 0.01
  3 1047980 0.02
  3 1048475 0.01
  4 608 0.016629
  4 1651 0.02519
  4 4053 0.04223


 **2 - Trainig output**
 The trained model is generated and output in the form of a binary file.


 **3 - Prediction input**

 When you choose to load a model and do prediction, the tool expects an already trained estimator and a tabular dataset as input. The dataset contains new samples which you want to classify or predict regression values for.


 .. class:: warningmark

 The number of feature columns must be the same in training and prediction datasets!


 **3 - Prediction output**
 The tool predicts the class labels for new samples and adds them as the last column to the prediction dataset. The new dataset then is output as a tabular file. The prediction output format should look like the training dataset.

    ]]></help>
    <expand macro="sklearn_citation"/>
</tool>