**Redis ML Commands**¶

**Decision tree ensembles**¶

### Example of use¶

The following code creates a random forest under the key `myforest`

that consists of three trees with IDs ranging from 0 to 2, where each consists of a single numeric splitter and its predicate values. Afterwards, the forest is used to classify two inputs and yield their predictions.

redis> ML.FOREST.ADD myforest 0 . NUMERIC 1 0.1 .l LEAF 1 .r LEAF 0 OK redis> ML.FOREST.ADD myforest 1 . NUMERIC 1 0.1 .l LEAF 1 .r LEAF 0 OK redis> ML.FOREST.ADD myforest 2 . NUMERIC 1 0.1 .l LEAF 0 .r LEAF 1 OK redis> ML.FOREST.RUN myforest 1:0.01 CLASSIFICATION "1" redis> ML.FOREST.RUN myforest 1:0.2 CLASSIFICATION "0"

### ML.FOREST.ADD¶

Available since 1.0.0.

Time complexity:O(M*log(N)) where N is the tree's depth and M is the number of nodes added

#### Syntax¶

ML.FOREST.ADD key tree path ((NUMERIC|CATEGORIC) attr val | LEAF val [STATS]) [...]

#### Description¶

Add nodes to a tree in the forest.
This command adds one or more nodes to the tree in the forest that's stored under `key`

. Trees are identified by numeric IDs, `treeid`

, that must begin at 0 and be incremented by exactly 1 for each new tree.

Each of the nodes is described by its path and definition. The `path`

argument is the path from the tree's root to the node. A valid path always starts with the period character (`.`

), which denotes the root. Optionally, the root may be followed by left or right branches, denoted by the characters `l`

and `r`

, respectively. For example, the path *".lr"* refers to the right child of the root's left child.

A node in the decision tree can either be a splitter or a terminal leaf. Splitter nodes are either numerical or categorical, and are added using the `NUMERIC`

or `CATEGORIC`

keywords. Splitter nodes also require specifying the examined attribute (`attr`

) as well as the value (`val`

) used in the comparison made during the branching decision. `val`

is expected to be a double-precision floating point value for numerical splitters, and a string for categorical splitter nodes.

The leaves are created with the `LEAF`

keyword and only require specifying their double-precision floating point value (`val`

).

#### Return value:¶

Simple string reply

### ML.FOREST.RUN¶

Available since 1.0.0.

Time complexity:O(M*log(N)) where N is the depth of the trees and M is the number of trees in the forest

#### Syntax¶

ML.FOREST.RUN key sample (CLASSIFICATION|REGRESSION)

#### Description¶

Predicts the classified (discrete) or regressed (continuous) value of a sample using the forest.
The forest that's stored in `key`

is used for generating the predicted value for the `sample`

. The sample is given as a string that is a vector of attribute-value pairs in the format of `attr:val`

. For example, the `sample`

*"gender:male"* has a single attribute, *gender*, whose value is *male*. A sample may have multiple such attribute-value pairs, and these must be comma-separated (`,`

) in the string vector. For example, a sample of a 25-year-old male is expressed as *"gender:male,age:25"*.

#### Return value:¶

Bulk string reply: the predicted value of the sample

**Linear regression**¶

### Example of use¶

The first line of the example shows how a linear regression predictor is set to the key named `linear`

. The predictor has an intercept of 2 and its coefficients are 3, 4 and 5. Once the predictor is ready, it is used to predict the result given the independent variables' values (features) of 1, 1 and 1.

redis> ML.LINREG.SET linear 2 3 4 5 OK redis> ML.LINREG.PREDICT linear 1 1 1 "14"

### ML.LINREG.SET¶

Available since 1.0.0.

Time complexity:O(N) where N is the number of coefficients

#### Syntax¶

ML.LINREG.SET key intercept coefficient [...]

#### Description¶

Sets a linear regression predictor and then creates or updates the linear regression predictor that's stored in `key`

. The predictor's intercept is specified by `intercept`

, followed by one or more `coefficient`

arguments of the independent variables.

#### Return value:¶

Simple string reply

### ML.LINREG.PREDICT¶

Available since 1.0.0.

Time complexity:O(N) where N is the number of features

#### Syntax¶

ML.LINREG.PREDICT key feature [...]

#### Description¶

Predicts the result for a set of features. The linear regression predictor stored in `key`

is used for predicting the result based on one or more features that are provided by the `feature`

argument(s).

#### Return value:¶

Bulk string reply: the predicted result for the feature set

**Logistic regression**¶

### Example of use¶

In this example, the first line shows how a logistic regression predictor is set to the key named `logistic`

. The predictor has an intercept of 0 and its coefficients are 2 and 2. Once the predictor is ready, it is used to predict the result given the independent variables' values (features) of -3 and 1.

redis> ML.LOGREG.SET logistic 0 2 2 OK redis> ML.LOGREG.PREDICT logistic -3 1 "0.017986209962091559"

### ML.LOGREG.SET¶

Available since 1.0.0.

Time complexity:O(N) where N is the number of coefficients

#### Syntax¶

ML.LOGREG.SET key intercept coefficient [...]

#### Description¶

Sets a linear regression predictor.
This command sets or updates the logistic regression predictor that's stored in `key`

. The predictor's intercept is specified by `intercept`

, followed by one or more `coefficient`

arguments of the independent variables.

#### Return value:¶

Simple string reply

### ML.LOGREG.PREDICT¶

Available since 1.0.0.

Time complexity:O(N) where N is the number of features

#### Syntax¶

ML.LOGREG.PREDICT key feature [...]

#### Description¶

Predicts the result for a set of features.
The logistic regression predictor stored in `key`

is used for predicting the result based on one or more features that are given by the `feature`

argument(s).

#### Return value:¶

Bulk string reply: the predicted result for the feature set

**Matrix operations**¶

#### Example of use¶

The following example shows how to set two matrices, `a`

and `b`

, multiply them, and store the result in the matrix `ab`

. Lastly, the contents of `ab`

are fetched.

redis> ML.MATRIX.SET a 2 3 1 2 5 3 4 6 OK redis> ML.MATRIX.SET b 3 2 1 2 3 4 7 1 OK redis> ML.MATRIX.MULTIPLY a b ab OK redis> ML.MATRIX.GET ab 1) (integer) 2 2) (integer) 2 3) "42" 4) "15" 5) "57" 6) "28"

### ML.MATRIX.SET¶

Available since 1.0.0.

Time complexity:O(N*M) where N is the number of rows and M is the number of columns

#### Syntax¶

ML.MATRIX.SET key n m entry11 .. entrynm

#### Description¶

Sets `key`

to store a matrix of `n`

rows,`m`

columns and double-precision float entries ranging from `entry11`

to `entrynm`

.

#### Return value:¶

Simple string reply

### ML.MATRIX.GET¶

Available since 1.0.0.

Time complexity:O(N*M) where N is the number of rows and M is the number of columns

#### Syntax¶

ML.MATRIX.GET key

#### Description¶

Returns the matrix's dimensions and entries.

#### Return value:¶

The first two elements in the array are the matrix's rows and columns, respectively, followed by the entries.

### ML.MATRIX.ADD¶

Available since 1.0.0.

Time complexity:O(N*M) where N is the number of rows and M is the number of columns

#### Syntax¶

ML.MATRIX.ADD matrix1 matrix2 sum

#### Description¶

Adds matrices.
The result of adding the two matrices stored in `matrix1`

and `matrix2`

is set in `sum`

.

#### Return value:¶

Simple string reply

### ML.MATRIX.MULTIPLY¶

Available since 1.0.0.

Time complexity:O(N*M*P) where N and M are numbers of rows and columns in`matrix1`

, and P is the number of columns in`matrix2`

#### Syntax¶

ML.MATRIX.MULTIPLY matrix1 matrix2 product

#### Description¶

Multiplies matrices.
The result of multiplying the two matrices stored in `matrix1`

and `matrix2`

is set in `product`

.

#### Return value:¶

Simple string reply

### ML.MATRIX.SCALE¶

Available since 1.0.0.

Time complexity:O(N*M) where N is the number of rows and M is the number of columns

#### Syntax¶

ML.MATRIX.SCALE key scalar

#### Description¶

Scales a matrix, updating the entries of the matrix stored in `key`

by multiplying them with `scalar`

.

#### Return value:¶

Simple string reply

**K-means**¶

### Example of use¶

Setting up a K-means model in key `k`

with 2 clusters and 3 dimensions. The cluster centers are `1, 1, 2`

and `2, 5, 4`

:

redis> ML.KMEANS.SET k 2 3 1 1 2 2 5 4 OK

Predicting the cluster of feature vector `1, 3, 5`

:

redis> ML.KMEANS.predict k 1 3 5 (integer) 1

### ML.KMEANS.SET¶

Available since 1.0.0.

Time complexity:O(N) where N is the number of coefficients

#### Syntax¶

ML.KMEANS.SET key k dimensions centers [...]

#### Description¶

Create/update a K-means model.
This command creates or updates the K-means model that's stored in `key`

. The number of classes is specified by `k`

, the number of features is set by `dimensions`

.

#### Return value:¶

Simple string reply

### ML.KMEANS.PREDICT¶

Available since 1.0.0.

Time complexity:O(N) where N is the number of features

#### Syntax¶

ML.KMEANS.PREDICT key feature [...]

#### Description¶

Predicts the result for a set of features.
The K-means model stored in `key`

is used for predicting the result based on one or more features that are given by the `feature`

argument(s).

#### Return value:¶

Integer reply: the predicted result for the feature set