# Regression

**Regression** is the problem of learning a functional relationship between
**input features** and an **output target** using training data where the
specific functional form learned depends on the choice of model. The
parameters of the function are learned using data where the target values are
known, so that the machine can make predictions about data where the target is
unknown. The goal of a regression model is to learn to **predict** an output
based on an input set of features. The following figure depicts a sample
supervised learning model where the training data (depicted in blue) is used to
learn a function (depicted in pink) which can then be used in the future to
make predictions.

Creating regression models is easy with Turi Create! The regression toolkit implements the following models:

These algorithms differ in how they make predictions, but conform to the same
API. With all models, call **create()** to create a model, **predict()** to make
predictions on the returned model, and **evaluate()** to measure performance of
the predictions. All models can incorporate:

- Numeric features
- Categorical variables
- Sparse features (i.e feature sets that have a large set of features, of which only a small subset of values are non-zero)
- Dense features (i.e feature sets with a large number of numeric features)
- Text data

#### Model Selector

It isn't always clear that we know exactly which model is suitable for a given task. Turi Create's model selector automatically picks the right model for you based on statistics collected from the data set.

```
import turicreate as tc
# Load the data
data = tc.SFrame('ratings-data.csv')
# Make a train-test split
train_data, test_data = data.random_split(0.8)
# Automatically picks the right model based on your data.
model = tc.regression.create(train_data, target='stars',
features = ['user_avg_stars',
'business_avg_stars',
'user_review_count',
'business_review_count'])
# Save predictions to an SArray
predictions = model.predict(test_data)
# Evaluate the model and save the results into a dictionary
results = model.evaluate(test_data)
```

Turi Create implementations are built to work with up to billions of examples and up to millions of features.