Models LibsvmModel


class LibsvmModel

Entity LibsvmModel

Attributes

last_read_date Read-only property - Last time this model’s data was accessed.
name Set or get the name of the model object.
status Read-only property - Current model life cycle status.

Methods

__init__(self[, name, _info]) Create a ‘new’ instance of a Support Vector Machine model.
predict(self, frame[, observation_columns]) New frame with new predicted label column.
publish(self) Creates a tar file that will be used as input to the scoring engine
score(self, vector) Calculate the prediction label for a single observation.
test(self, frame, label_column[, observation_columns]) Predict test frame labels and return metrics.
train(self, frame, label_column, observation_columns[, svm_type, ...]) Train a Lib Svm model
__init__(self, name=None)

Create a ‘new’ instance of a Support Vector Machine model.

Parameters:

name : unicode (default=None)

User supplied name.

Returns:

: Model

A new instance of LibsvmModel

Support Vector Machine [R1] is a supervised algorithm used to perform binary classification. A support vector machine constructs a high dimensional hyperplane which is said to achieve a good separation when a hyperplane has the largest distance to the nearest training-data point of any class. This model runs the LIBSVM [R2] [R3] implementation of SVM. The LIBSVM model is initialized, trained on columns of a frame, used to predict the labels of observations in a frame and used to test the predicted labels against the true labels. During testing, labels of the observations are predicted and tested against the true labels using built-in binary Classification Metrics.

[R1]https://en.wikipedia.org/wiki/Support_vector_machine
[R2]https://www.csie.ntu.edu.tw/~cjlin/libsvm/
[R3]https://en.wikipedia.org/wiki/LIBSVM

Examples

Consider the following model trained and tested on the sample data set in frame ‘frame’.

Consider the following frame containing four columns.

>>> frame.inspect()
    [#]  idNum  tr_row  tr_col  pos_one
    ===================================
    [0]    1.0    -1.0    -1.0      1.0
    [1]    2.0    -1.0     0.0      1.0
    [2]    3.0    -1.0     1.0      1.0
    [3]    4.0     0.0    -1.0      1.0
    [4]    5.0     0.0     0.0      1.0
    [5]    6.0     0.0     1.0      1.0
    [6]    7.0     1.0    -1.0      1.0
    [7]    8.0     1.0     0.0      1.0
    [8]    9.0     1.0     1.0      1.0
>>> model = ta.LibsvmModel()
[===Job Progress===]
>>> train_output = model.train(frame, "idNum", ["tr_row", "tr_col"],svm_type=2,epsilon=10e-3,gamma=1.0/2,nu=0.1,p=0.1)
[===Job Progress===]
>>> predicted_frame = model.predict(frame)
[===Job Progress===]
>>> predicted_frame.inspect()
    [#]  idNum  tr_row  tr_col  pos_one  predicted_label
    ====================================================
    [0]    1.0    -1.0    -1.0      1.0              1.0
    [1]    2.0    -1.0     0.0      1.0              1.0
    [2]    3.0    -1.0     1.0      1.0             -1.0
    [3]    4.0     0.0    -1.0      1.0              1.0
    [4]    5.0     0.0     0.0      1.0              1.0
    [5]    6.0     0.0     1.0      1.0              1.0
    [6]    7.0     1.0    -1.0      1.0              1.0
    [7]    8.0     1.0     0.0      1.0              1.0
    [8]    9.0     1.0     1.0      1.0              1.0
>>> test_obj = model.test(frame, "pos_one",["tr_row", "tr_col"])
[===Job Progress===]
>>> test_obj.accuracy
0.8888888888888888
>>> test_obj.precision
1.0
>>> test_obj.f_measure
0.9411764705882353
>>> test_obj.recall
0.8888888888888888
>>> score = model.score([3,4])
[===Job Progress===]
>>> score
-1.0
>>> model.publish()
[===Job Progress===]

Take the path to the published model and run it in the Scoring Engine

>>> import requests
>>> headers = {'Content-type': 'application/json', 'Accept': 'application/json,text/plain'}

Posting a request to get the metadata about the model

>>> r =requests.get('http://mymodel.demotrustedanalytics.com/v2/metadata')
>>> r.text
u'{"model_details":{"model_type":"LibSvm Model","model_class":"org.trustedanalytics.atk.scoring.models.LibSvmModel","model_reader":"org.trustedanalytics.atk.scoring.models.LibSvmModelReaderPlugin","custom_values":{}},"input":[{"name":"tr_row","value":"Double"},{"name":"tr_col","value":"Double"}],"output":[{"name":"tr_row","value":"Double"},{"name":"tr_col","value":"Double"},{"name":"Prediction","value":"Double"}]}'

Posting a request to version 1 of Scoring Engine supporting strings for requests and response:

>>> r = requests.post('http://mymodel.demotrustedanalytics.com/v1/score?data=2,17,-6', headers=headers)
>>> r.text
u'-1.0'

Posting a request to version 1 with multiple records to score:

>>> r = requests.post('http://mymodel.demotrustedanalytics.com/v1/score?data=2,17,-6&data=0,0,0', headers=headers)
>>> r.text
u'-1.0,1.0'

Posting a request to version 2 of Scoring Engine supporting Json for requests and responses. In the following example, ‘tr_row’ and ‘tr_col’ are the names of the observation columns that the model was trained on:

>>> r = requests.post("http://mymodel.demotrustedanalytics.com/v2/score", json={"records": [{"tr_row": 1.0, "tr_col": 2.6}]})
>>> r.text
u'{"data":[{"tr_row":1.0,"tr_col":2.6,"Prediction":-1.0}]}'

Posting a request to version 2 with multiple records to score:

>>> r = requests.post("http://mymodel.demotrustedanalytics.com/v2/score", json={"records": [{"tr_row": 1.0, "tr_col": 2.6},{"tr_row": 3.0, "tr_col": 0.6} ]})
>>> r.text
u'{"data":[{"tr_row":1.0,"tr_col":2.6,"Prediction":-1.0},{"tr_row":3.0,"tr_col":0.6,"Prediction":-1.0}]}'