In [8]:
import numpy as np

from bokeh.plotting import HBox, VBox, figure, show, output_file, GridPlot
from bokeh.models.mappers import LinearColorMapper
from bokeh.models import BasicTicker, Grid 

from sklearn import metrics
from sklearn import preprocessing
from sklearn.datasets import fetch_olivetti_faces
from sklearn.utils.validation import check_random_state
from sklearn.ensemble import ExtraTreesClassifier, RandomForestClassifier
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.cross_validation import train_test_split
from sklearn.covariance import GraphLassoCV, ledoit_wolf
from sklearn.grid_search import GridSearchCV
from scipy.spatial import distance
 
import sklearn
import OVFM.Model as md
import OVFM.FeatureMap as fm
import OVFM.Risk as rsk
import OVFM.LearningRate as lr
import OVFM.DataGeneration as dg
import OVFM.SGD as sgd
 
import time
import sys

In [74]:
d = 10
gamma = 10
D = 1000
p = 5
alpha = 0.5
Bt = np.random.rand( p, p )
# Bt = alpha * np.eye( p ) + ( 1 - alpha ) * np.ones( ( p, p ) )
sigma = 0.000001

modelg = md.Model( fm.DecomposableFF( gamma, d, D, B = Bt ) )
modelg.coefs = np.random.normal( 0, 1, modelg.coefs.shape )

train_X = np.random.rand( 100000, d )
train_y = modelg( train_X )
X,X_,y,y_ = train_test_split( train_X, train_y, test_size = .33 )

In [75]:
eta0 = 1.
model = md.Model( fm.DecomposableFF( gamma, train_X.shape[ 1 ], D, B = np.eye( p ) ) )
risk = rsk.Ridge( 0 )
lc = lr.Constant( 1. * eta0 )
lb = lr.Constant( 0. * eta0 )

In [76]:
opt = sgd.SGD( risk, 1.0, lc, lb, 10, 100000 )
model.reset( )
opt.fit( model, X, y + np.random.normal( 0, sigma, y.shape ) )
print np.sum( ( model( X_ ) - y_ ) ** 2 ) / y_.size


0 1.76119369188 0.0 0.0 0.696504342113 0.0321486827964
100000 1.68087868592 0.0 0.0 1942.65530588 3.28068365902
200000 1.66719542055 0.0 0.0 1759.57024569 3.44263860951
300000 1.67848808713 0.0 0.0 1943.99562683 3.69528102171
400000 1.66826142954 0.0 0.0 1807.88427795 3.61058755646
500000 1.67614809761 0.0 0.0 1898.15379812 3.57927846084
600000 1.66828508308 0.0 0.0 1778.59294059 3.29530755468
1.77322261049

In [77]:
eta0 = 1. / np.linalg.norm( np.corrcoef( train_y.T ), 2 ) ** 2
model = md.Model( fm.DecomposableFF( gamma, train_X.shape[ 1 ], D, np.corrcoef( train_y.T ) ) )
risk = rsk.Ridge( 0 )
lc = lr.Constant( 1. * eta0 )
lb = lr.Constant( 0. * eta0 )

In [78]:
opt = sgd.SGD( risk, 1.0, lc, lb, 10, 100000 )
model.reset( )
opt.fit( model, X, y + np.random.normal( 0, sigma, y.shape ) )
print np.sum( ( model( X_ ) - y_ ) ** 2 ) / y_.size


0 1.76121545876 0.0 0.0 0.00602681874096 0.00479815888091
100000 1.66719843628 0.0 0.0 133.623667116 1.32328667016
200000 1.65020323434 0.0 0.0 221.100966244 1.76732934461
300000 1.64930501593 0.0 0.0 291.640809583 1.87388090855
400000 1.64288651146 0.0 0.0 326.996401212 2.03592411549
500000 1.64443001342 0.0 0.0 375.306283298 2.21556450127
600000 1.63912388457 0.0 0.0 404.23967256 2.18536685055
1.73114943428

In [ ]: