Show Sidebar Hide Sidebar

Comparing Various Online Solvers in Scikit-learn

An example showing how different online solvers perform on the hand-written digits dataset.

New to Plotly?¶

You can set up Plotly to work in online or offline mode, or in jupyter notebooks.
We also have a quick-reference cheatsheet (new!) to help you get started!

Version¶

In [1]:
import sklearn
sklearn.__version__

Out[1]:
'0.18.1'

Imports¶

In [2]:
import plotly.plotly as py
import plotly.graph_objs as go

import numpy as np
from sklearn import datasets

from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDClassifier, Perceptron
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.linear_model import LogisticRegression


Calculations¶

In [3]:
heldout = [0.95, 0.90, 0.75, 0.50, 0.01]
rounds = 20
X, y = digits.data, digits.target

classifiers = [
("SGD", SGDClassifier()),
("ASGD", SGDClassifier(average=True)),
("Perceptron", Perceptron()),
("Passive-Aggressive I", PassiveAggressiveClassifier(loss='hinge',
C=1.0)),
("Passive-Aggressive II", PassiveAggressiveClassifier(loss='squared_hinge',
C=1.0)),
("SAG", LogisticRegression(solver='sag', tol=1e-1, C=1.e4 / X.shape[0]))
]

xx = 1. - np.array(heldout)


Plot Results¶

In [4]:
data = []

for name, clf in classifiers:
print("training %s" % name)
rng = np.random.RandomState(42)
yy = []
for i in heldout:
yy_ = []
for r in range(rounds):
X_train, X_test, y_train, y_test = \
train_test_split(X, y, test_size=i, random_state=rng)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
yy_.append(1 - np.mean(y_pred == y_test))
yy.append(np.mean(yy_))
trace = go.Scatter(x=xx, y=yy,
mode='lines',
name=name)
data.append(trace)

layout = go.Layout(xaxis=dict(title="Proportion train"),
yaxis=dict(title="Test Error Rate")
)
fig = go.Figure(data=data, layout=layout)

training SGD
training ASGD
training Perceptron
training Passive-Aggressive I
training Passive-Aggressive II
training SAG

In [5]:
py.iplot(fig)

Out[5]:

Author:

    Rob Zinkov <rob@zinkov.com>



    BSD 3 clause