From b99c76550e3cbe8b57b1ea27b6eb88817a36cb53 Mon Sep 17 00:00:00 2001
From: Edouard Duchesnay <duchesnay@is143433.(none)>
Date: Tue, 27 Jul 2010 09:58:34 +0200
Subject: [PATCH] add pipeline

---
 scikits/learn/datasets/samples_generator.py |  3 +-
 scikits/learn/pipeline.py                   | 44 +++++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 scikits/learn/pipeline.py

diff --git a/scikits/learn/datasets/samples_generator.py b/scikits/learn/datasets/samples_generator.py
index 472b4955c7..cea4b91728 100644
--- a/scikits/learn/datasets/samples_generator.py
+++ b/scikits/learn/datasets/samples_generator.py
@@ -11,7 +11,8 @@ Samples generator
 # License: BSD 3 clause
 
 
-
+def samples_classif():
+    pass
 
 ######################################################################
 # Generate Dataset for test
diff --git a/scikits/learn/pipeline.py b/scikits/learn/pipeline.py
new file mode 100644
index 0000000000..cbc360407c
--- /dev/null
+++ b/scikits/learn/pipeline.py
@@ -0,0 +1,44 @@
+from .base import BaseEstimator
+
+class Pipeline(BaseEstimator):
+    """
+    Univariate ranking Pipeline.
+    Sequentialy apply a list of methods
+    
+    Example:
+    import datamind.ml.dimred.univRankingGLM as drglm
+    d=data.twoclassses()
+    y=d[:,["class"]]
+    X=d[:,1:]
+    # permute features
+    X=X[:,N.random.permutation(X.shape[1])]
+    print X
+    methods=[drglm.UnivOneWayAnovaFstat(pval=.3),
+             drglm.UnivOneWayAnovaFstat(z=1.5),
+             drglm.UnivOneWayAnovaFstat(dim=2)]
+    pipeline=UnivRankingPipeline(methods)
+    pipeline.fit(X,y)
+    print pipeline.reduce(X)
+    print pipeline.getSelectedFeatures()
+    """
+    def __init__(self,transformers,estimator):
+        """
+        methods: list of UnivRanking objects,
+        ie.: with fit/reduce/getSelectedFeatures methods
+        """
+        self.transformers=transformers
+        self.estimator=estimator
+
+    def fit(self, X,y):
+        Xt=X
+        for transformer in self.transformers:
+            Xt=transformer.fit(Xt,y).transform(Xt)
+        estimator.fit(Xt,y)
+        return self
+    
+    def predict(X)
+        Xt=X
+        for transformer in self.transformers:
+            Xt=transformer.transform(Xt)
+        return estimator.predict(Xt,y)
+        
-- 
GitLab