Package: ramp
Ramp - Rapid Machine Learning Prototyping=========================================Ramp is a python module for rapid prototyping of machine learningsolutions. It is essentially a [pandas](http://pandas.pydata.org)wrapper around various python machine learning and statistics libraries([scikit-learn](http://scikit-learn.org), [rpy2](http://rpy.sourceforge.net/rpy2.html), etc.),providing a simple, declarative syntax forexploring features, algorithms and transformations quickly andefficiently.Documentation: http://ramp.readthedocs.org**Why Ramp?***  **Clean, declarative syntax**No more hackish one-off spaghetti scripts!*  **Complex feature transformations**Chain and combine features:```pythonNormalize(Log('x'))Interactions([Log('x1'), (F('x2') + F('x3')) / 2])```Reduce feature dimension:```pythonDimensionReduction([F('x%d'%i) for i in range(100)], decomposer=PCA(n_components=3))```Incorporate residuals or predictions to blend with other models:```pythonResiduals(config_model1) + Predictions(config_model2)```Any feature that uses the target ("y") variable will automatically respect thecurrent training and test sets.*  **Caching**Ramp caches and stores on disk in fast HDF5 format (or elsewhere if you want) all features and models itcomputes, so nothing is recomputed unnecessarily. Results are storedand can be retrieved, compared, blended, and reused between runs.*  **Easy extensibility**Ramp has a simple API, allowing you to plug in estimators fromscikit-learn, rpy2 and elsewhere, or easily build your own featuretransformations, metrics, feature selectors, reporters, or estimators.## Quick start[Getting started with Ramp: Classifying insults](http://www.kenvanharen.com/2012/11/getting-started-with-ramp-detecting.html)Or, the quintessential Iris example:```pythonimport pandasfrom ramp import *import urllib2import sklearnfrom sklearn import decomposition# fetch and clean iris data from UCIdata = pandas.read_csv(urllib2.urlopen("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"))data = data.drop([149]) # bad linecolumns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']data.columns = columns# all featuresfeatures = [FillMissing(f, 0) for f in columns[:-1]]# features, log transformed features, and interaction termsexpanded_features = (features +[Log(F(f) + 1) for f in features] +[F('sepal_width') ** 2,combo.Interactions(features),])# Define several models and feature sets to explore,# run 5 fold cross-validation on each and print the results.# We define 2 models and 4 feature sets, so this will be# 4 * 2 = 8 models tested.shortcuts.cv_factory(data=data,target=[AsFactor('class')],metrics=[[metrics.GeneralizedMCC()]],# Try out two algorithmsmodel=[sklearn.ensemble.RandomForestClassifier(n_estimators=20),sklearn.linear_model.LogisticRegression(),],# and 4 feature setsfeatures=[expanded_features,# Feature selection[trained.FeatureSelector(expanded_features,# use random forest's importance to trimselectors.RandomForestSelector(classifier=True),target=AsFactor('class'), # target to usen_keep=5, # keep top 5 features)],# Reduce feature dimension (pointless on this dataset)[combo.DimensionReduction(expanded_features,decomposer=decomposition.PCA(n_components=4))],# Normalized features[Normalize(f) for f in expanded_features],])```## StatusRamp is very alpha currently, so expect bugs, bug fixes and API changes.## Requirements* Numpy* Scipy* Pandas* PyTables* Sci-kit Learn## AuthorKen Van Haren. Email with feedback/questions: kvh@science.io