PKiJjmpygam/.DS_StoreBud1%  @ @ @ @ E%DSDB` @ @ @PKcMJIXpygam/__init__.py""" GAM toolkit """ from __future__ import absolute_import from pygam.pygam import GAM from pygam.pygam import LinearGAM from pygam.pygam import LogisticGAM from pygam.pygam import GammaGAM from pygam.pygam import PoissonGAM from pygam.pygam import InvGaussGAM __all__ = ['GAM', 'LinearGAM', 'LogisticGAM', 'GammaGAM', 'PoissonGAM', 'InvGaussGAM'] __version__ = '0.2.11' PK"Jt0.5)) @validate_callback class Diffs(CallBack): def __init__(self): """ creates a Diffs CallBack instance useful for capturing the differences in model coefficient norms between iterations Parameters ---------- None Returns ------- None """ super(Diffs, self).__init__(name='diffs') def on_loop_end(self, diff): """ runs the method at end of each optimization loop Parameters ---------- diff : float Returns ------- diff : float """ return diff @validate_callback class Coef(CallBack): def __init__(self): """ creates a Coef CallBack instance useful for capturing the models coefficients at each iteration Parameters ---------- None Returns ------- None """ super(Coef, self).__init__(name='coef') def on_loop_start(self, gam): """ runs the method at start of each optimization loop Parameters ---------- gam : float Returns ------- coef_ : list of floats """ return gam.coef_ PK"JvGG pygam/core.py""" Core classes """ from __future__ import absolute_import import numpy as np from pygam.utils import round_to_n_decimal_places def nice_repr(name, param_kvs, line_width=30, line_offset=5, decimals=3): """ tool to do a nice repr of a class. Parameters ---------- name : str class name param_kvs : dict dict containing class parameters names as keys, and the corresponding values as values line_width : int desired maximum line width. default: 30 line_offset : int desired offset for new lines default: 5 decimals : int number of decimal places to keep for float values default: 3 Returns ------- out : str nicely formatted repr of class instance """ if len(param_kvs) == 0: # if the object has no params it's easy return '%s()' % name # sort keys and values ks = list(param_kvs.keys()) vs = list(param_kvs.values()) idxs = np.argsort(ks) param_kvs = [(ks[i],vs[i]) for i in idxs] param_kvs = param_kvs[::-1] out = '' current_line = name + '(' while len(param_kvs) > 0: k, v = param_kvs.pop() if issubclass(v.__class__, (float, np.ndarray)): # round the floats first v = round_to_n_decimal_places(v, n=decimals) param = '{}={},'.format(k, str(v)) else: param = '{}={},'.format(k, repr(v)) if len(current_line + param) <= line_width: current_line += param else: out += current_line + '\n' current_line = ' '*line_offset + param if len(current_line) < line_width and len(param_kvs) > 0: current_line += ' ' out += current_line[:-1] # remove trailing comma out += ')' return out class Core(object): def __init__(self, name=None, line_width=70, line_offset=3): """ creates an instance of the Core class comes loaded with useful methods Parameters ---------- name : str, default: None line_width : int, default: 70 number of characters to print on a line line_offset : int, default: 3 number of characters to indent after the first line Returns ------- self """ self._name = name self._line_width = line_width self._line_offset = line_offset self._exclude = [] def __str__(self): """__str__ method""" if self._name is None: return self.__repr__() return self._name def __repr__(self): """__repr__ method""" name = self.__class__.__name__ return nice_repr(name, self.get_params(), line_width=self._line_width, line_offset=self._line_offset, decimals=4) def get_params(self, deep=False): """ returns a dict of all of the object's user-facing parameters Parameters ---------- deep : boolean, default: False when True, also gets non-user-facing paramters Returns ------- dict """ if deep is True: return self.__dict__ return dict([(k,v) for k,v in list(self.__dict__.items()) \ if (k[0] != '_') \ and (k[-1] != '_') and (k not in self._exclude)]) def set_params(self, deep=False, force=False, **parameters): """ sets an object's paramters Parameters ---------- deep : boolean, default: False when True, also sets non-user-facing paramters force : boolean, default: False when True, also sets parameters that the object does not already have **parameters : paramters to set Returns ------ self """ param_names = self.get_params(deep=deep).keys() for parameter, value in parameters.items(): if (parameter in param_names) or force: setattr(self, parameter, value) return self PK"J'^-^-pygam/distributions.py""" Distributions """ from __future__ import division, absolute_import import scipy as sp import numpy as np from pygam.core import Core from pygam.utils import ylogydu class Distribution(Core): """ base distribution class """ def __init__(self, name=None, scale=None): """ creates an instance of the Distribution class Parameters ---------- name : str, default: None scale : float or None, default: None scale/standard deviation of the distribution Returns ------- self """ self.scale = scale self._known_scale = self.scale is not None super(Distribution, self).__init__(name=name) if not self._known_scale: self._exclude += ['scale'] def phi(self, y, mu, edof): """ GLM scale parameter. for Binomial and Poisson families this is unity for Normal family this is variance Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values edof : float estimated degrees of freedom Returns ------- scale : estimated model scale """ if self._known_scale: return self.scale else: return np.sum(self.V(mu**-1) * (y - mu)**2) / (len(mu) - edof) class NormalDist(Distribution): """ Normal Distribution """ def __init__(self, scale=None): """ creates an instance of the NormalDist class Parameters ---------- scale : float or None, default: None scale/standard deviation of the distribution Returns ------- self """ super(NormalDist, self).__init__(name='normal', scale=scale) def pdf(self, y, mu): """ computes the pdf or pmf of the values under the current distribution Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values Returns ------- pdf/pmf : np.array of length n """ return np.exp(-(y - mu)**2/(2*self.scale)) / (self.scale * 2 * np.pi)**0.5 def V(self, mu): """ glm Variance function computes the variance of the distribtion Parameters ---------- mu : array-like of length n expected values Returns ------- variance : np.array of length n """ return np.ones_like(mu) def deviance(self, y, mu, scaled=True, summed=True): """ model deviance for a gaussian linear model, this is equal to the SSE Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values scaled : boolean, default: True whether to divide the deviance by the distribution scaled summed : boolean, default: True whether to sum the deviances Returns ------- deviances : np.array of length n """ dev = (y - mu)**2 if scaled: dev /= self.scale if summed: return dev.sum() return dev class BinomialDist(Distribution): """ Binomial Distribution """ def __init__(self, levels=1): """ creates an instance of the NormalDist class Parameters ---------- levels : int of None, default: 1 number of levels in the binomial distribution Returns ------- self """ if levels is None: levels = 1 self.levels = levels super(BinomialDist, self).__init__(name='binomial', scale=1.) self._exclude.append('scale') def pdf(self, y, mu): """ computes the pdf or pmf of the values under the current distribution Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values Returns ------- pdf/pmf : np.array of length n """ n = self.levels return (sp.misc.comb(n, y) * (mu / n)**y * (1 - (mu / n))**(n - y)) def V(self, mu): """ glm Variance function computes the variance of the distribtion Parameters ---------- mu : array-like of length n expected values Returns ------- variance : np.array of length n """ return mu * (1 - mu/self.levels) def deviance(self, y, mu, scaled=True, summed=True): """ model deviance for a bernoulli logistic model, this is equal to the twice the negative loglikelihod. Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values scaled : boolean, default: True whether to divide the deviance by the distribution scaled summed : boolean, default: True whether to sum the deviances Returns ------- deviances : np.array of length n """ dev = 2 * (ylogydu(y, mu) + ylogydu(self.levels - y, self.levels-mu)) if scaled: dev /= self.scale if summed: return dev.sum() return dev class PoissonDist(Distribution): """ Poisson Distribution """ def __init__(self): """ creates an instance of the PoissonDist class Parameters ---------- None Returns ------- self """ super(PoissonDist, self).__init__(name='poisson', scale=1.) self._exclude.append('scale') def pdf(self, y, mu): """ computes the pdf or pmf of the values under the current distribution Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values Returns ------- pdf/pmf : np.array of length n """ return (mu**y) * np.exp(-mu) / sp.misc.factorial(y) def V(self, mu): """ glm Variance function computes the variance of the distribtion Parameters ---------- mu : array-like of length n expected values Returns ------- variance : np.array of length n """ return mu def deviance(self, y, mu, scaled=True, summed=True): """ model deviance for a bernoulli logistic model, this is equal to the twice the negative loglikelihod. Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values scaled : boolean, default: True whether to divide the deviance by the distribution scaled summed : boolean, default: True whether to sum the deviances Returns ------- deviances : np.array of length n """ dev = 2 * (ylogydu(y, mu) - (y - mu)) if scaled: dev /= self.scale if summed: return dev.sum() return dev class GammaDist(Distribution): """ Gamma Distribution """ def __init__(self, scale=None): """ creates an instance of the GammaDist class Parameters ---------- scale : float or None, default: None scale/standard deviation of the distribution Returns ------- self """ super(GammaDist, self).__init__(name='gamma', scale=scale) def pdf(self, y, mu): """ computes the pdf or pmf of the values under the current distribution Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values Returns ------- pdf/pmf : np.array of length n """ nu = 1./self.scale return 1./sp.special.gamma(nu) * (nu/mu)**nu * y**(nu-1) * np.exp(-nu * y / mu) def V(self, mu): """ glm Variance function computes the variance of the distribtion Parameters ---------- mu : array-like of length n expected values Returns ------- variance : np.array of length n """ return mu**2 def deviance(self, y, mu, scaled=True, summed=True): """ model deviance for a bernoulli logistic model, this is equal to the twice the negative loglikelihod. Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values scaled : boolean, default: True whether to divide the deviance by the distribution scaled summed : boolean, default: True whether to sum the deviances Returns ------- deviances : np.array of length n """ dev = 2 * ((y - mu)/mu - np.log(y/mu)) if scaled: dev /= self.scale if summed: return dev.sum() return dev class InvGaussDist(Distribution): """ Inverse Gaussian Distribution """ def __init__(self, scale=None): """ creates an instance of the NormalDist class Parameters ---------- scale : float or None, default: None scale/standard deviation of the distribution Returns ------- self """ super(InvGaussDist, self).__init__(name='inv_gauss', scale=scale) def pdf(self, y, mu): """ computes the pdf or pmf of the values under the current distribution Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values Returns ------- pdf/pmf : np.array of length n """ gamma = 1./self.scale return (gamma / (2 * np.pi * y**3))**.5 * np.exp(-gamma * (y - mu)**2 / (2 * mu**2 * y)) def V(self, mu): """ glm Variance function computes the variance of the distribtion Parameters ---------- mu : array-like of length n expected values Returns ------- variance : np.array of length n """ return mu**3 def deviance(self, y, mu, scaled=True, summed=True): """ model deviance for a bernoulli logistic model, this is equal to the twice the negative loglikelihod. Parameters ---------- y : array-like of length n target values mu : array-like of length n expected values scaled : boolean, default: True whether to divide the deviance by the distribution scaled summed : boolean, default: True whether to sum the deviances Returns ------- deviances : np.array of length n """ dev = ((y - mu)**2) / (mu**2 * y) if scaled: dev /= self.scale if summed: return dev.sum() return dev PK"Jսpygam/links.py""" Link functions """ from __future__ import division, absolute_import import numpy as np from pygam.core import Core class Link(Core): def __init__(self, name=None): """ creates an instance of a Link object Parameters ---------- name : str, default: None Returns ------- self """ super(Link, self).__init__(name=name) class IdentityLink(Link): def __init__(self): """ creates an instance of an IdentityLink object Parameters ---------- None Returns ------- self """ super(IdentityLink, self).__init__(name='identity') def link(self, mu, dist): """ glm link function this is useful for going from mu to the linear prediction Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- lp : np.array of length n """ return mu def mu(self, lp, dist): """ glm mean function, ie inverse of link function this is useful for going from the linear prediction to mu Parameters ---------- lp : array-like of legth n dist : Distribution instance Returns ------- mu : np.array of length n """ return lp def gradient(self, mu, dist): """ derivative of the link function wrt mu Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- grad : np.array of length n """ return np.ones_like(mu) class LogitLink(Link): def __init__(self): """ creates an instance of a LogitLink object Parameters ---------- None Returns ------- self """ super(LogitLink, self).__init__(name='logit') def link(self, mu, dist): """ glm link function this is useful for going from mu to the linear prediction Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- lp : np.array of length n """ return np.log(mu) - np.log(dist.levels - mu) def mu(self, lp, dist): """ glm mean function, ie inverse of link function this is useful for going from the linear prediction to mu Parameters ---------- lp : array-like of legth n dist : Distribution instance Returns ------- mu : np.array of length n """ elp = np.exp(lp) return dist.levels * elp / (elp + 1) def gradient(self, mu, dist): """ derivative of the link function wrt mu Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- grad : np.array of length n """ return dist.levels/(mu*(dist.levels - mu)) class LogLink(Link): def __init__(self): """ creates an instance of a LogitLink object Parameters ---------- None Returns ------- self """ super(LogLink, self).__init__(name='log') def link(self, mu, dist): """ glm link function this is useful for going from mu to the linear prediction Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- lp : np.array of length n """ return np.log(mu) def mu(self, lp, dist): """ glm mean function, ie inverse of link function this is useful for going from the linear prediction to mu Parameters ---------- lp : array-like of legth n dist : Distribution instance Returns ------- mu : np.array of length n """ return np.exp(lp) def gradient(self, mu, dist): """ derivative of the link function wrt mu Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- grad : np.array of length n """ return 1. / mu class InverseLink(Link): def __init__(self): """ creates an instance of a InverseLink object Parameters ---------- None Returns ------- self """ super(InverseLink, self).__init__(name='inverse') def link(self, mu, dist): """ glm link function this is useful for going from mu to the linear prediction Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- lp : np.array of length n """ return mu**-1 def mu(self, lp, dist): """ glm mean function, ie inverse of link function this is useful for going from the linear prediction to mu Parameters ---------- lp : array-like of legth n dist : Distribution instance Returns ------- mu : np.array of length n """ return lp**-1 def gradient(self, mu, dist): """ derivative of the link function wrt mu Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- grad : np.array of length n """ return -1 * mu**-2 class InvSquaredLink(Link): def __init__(self): """ creates an instance of an InverseLink object Parameters ---------- name : str, default: None Returns ------- self """ super(InvSquaredLink, self).__init__(name='inv_squared') def link(self, mu, dist): """ glm link function this is useful for going from mu to the linear prediction Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- lp : np.array of length n """ return mu**-2 def mu(self, lp, dist): """ glm mean function, ie inverse of link function this is useful for going from the linear prediction to mu Parameters ---------- lp : array-like of legth n dist : Distribution instance Returns ------- mu : np.array of length n """ return lp**-0.5 def gradient(self, mu, dist): """ derivative of the link function wrt mu Parameters ---------- mu : array-like of legth n dist : Distribution instance Returns ------- grad : np.array of length n """ return -2 * mu**-3 PKbJϫI!I!pygam/penalties.py""" Penalty matrix generators """ import scipy as sp import numpy as np def derivative(n, coef, derivative=2): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes the squared differences between basis coefficients. Parameters ---------- n : int number of splines coef : unused for compatibility with constraints derivative: int, default: 2 which derivative do we penalize. derivative is 1, we penalize 1st order derivatives, derivative is 2, we penalize 2nd order derivatives, etc Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ if n==1: # no derivative for constant functions return sp.sparse.csc_matrix(0.) D = sparse_diff(sp.sparse.identity(n).tocsc(), n=derivative) return D.dot(D.T).tocsc() def l2(n, coef): """ Builds a penalty matrix for P-Splines with categorical features. Penalizes the squared value of each basis coefficient. Parameters ---------- n : int number of splines coef : unused for compatibility with constraints Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ return sp.sparse.eye(n).tocsc() def monotonicity_(n, coef, increasing=True): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes violation of monotonicity in the feature function. Parameters ---------- n : int number of splines coef : array-like coefficients of the feature function increasing : bool, default: True whether to enforce monotic increasing, or decreasing functions Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ if n != len(coef.ravel()): raise ValueError('dimension mismatch: expected n equals len(coef), '\ 'but found n = {}, coef.shape = {}.'\ .format(n, coef.shape)) if n==1: # no monotonic penalty for constant functions return sp.sparse.csc_matrix(0.) if increasing: # only penalize the case where coef_i-1 > coef_i mask = sp.sparse.diags((np.diff(coef.ravel()) < 0).astype(float)) else: # only penalize the case where coef_i-1 < coef_i mask = sp.sparse.diags((np.diff(coef.ravel()) > 0).astype(float)) derivative = 1 D = sparse_diff(sp.sparse.identity(n).tocsc(), n=derivative) * mask return D.dot(D.T).tocsc() def monotonic_inc(n, coef): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes violation of a monotonic increasing feature function. Parameters ---------- n : int number of splines coef : array-like, coefficients of the feature function Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ return monotonicity_(n, coef, increasing=True) def monotonic_dec(n, coef): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes violation of a monotonic decreasing feature function. Parameters ---------- n : int number of splines coef : array-like coefficients of the feature function Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ return monotonicity_(n, coef, increasing=False) def convexity_(n, coef, convex=True): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes violation of convexity in the feature function. Parameters ---------- n : int number of splines coef : array-like coefficients of the feature function convex : bool, default: True whether to enforce convex, or concave functions Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ if n != len(coef.ravel()): raise ValueError('dimension mismatch: expected n equals len(coef), '\ 'but found n = {}, coef.shape = {}.'\ .format(n, coef.shape)) if n==1: # no convex penalty for constant functions return sp.sparse.csc_matrix(0.) if convex: mask = sp.sparse.diags((np.diff(coef.ravel(), n=2) < 0).astype(float)) else: mask = sp.sparse.diags((np.diff(coef.ravel(), n=2) > 0).astype(float)) derivative = 2 D = sparse_diff(sp.sparse.identity(n).tocsc(), n=derivative) * mask return D.dot(D.T).tocsc() def convex(n, coef): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes violation of a convex feature function. Parameters ---------- n : int number of splines coef : array-like coefficients of the feature function Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ return convexity_(n, coef, convex=True) def concave(n, coef): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes violation of a concave feature function. Parameters ---------- n : int number of splines coef : array-like coefficients of the feature function Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ return convexity_(n, coef, convex=False) def circular(n, coef): """ Builds a penalty matrix for P-Splines with continuous features. Penalizes violation of a circular feature function. Parameters ---------- n : int number of splines coef : unused for compatibility with constraints Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ if n != len(coef.ravel()): raise ValueError('dimension mismatch: expected n equals len(coef), '\ 'but found n = {}, coef.shape = {}.'\ .format(n, coef.shape)) if n==1: # no first circular penalty for constant functions return sp.sparse.csc_matrix(0.) row = np.zeros(n) row[0] = 1 row[-1] = -1 P = sp.sparse.vstack([row, sp.sparse.csc_matrix((n-2, n)), row[::-1]]) return P.tocsc() def none(n, coef): """ Build a matrix of zeros for features that should go unpenalized Parameters ---------- n : int number of splines coef : unused for compatibility with constraints Returns ------- penalty matrix : sparse csc matrix of shape (n,n) """ return sp.sparse.csc_matrix(np.zeros((n, n))) def wrap_penalty(p, fit_linear, linear_penalty=0.): """ tool to account for unity penalty on the linear term of any feature. Parameters ---------- p : callable. penalty-matrix-generating function. fit_linear : boolean. whether the current feature has a linear term or not. linear_penalty : float, default: 0. penalty on the linear term Returns ------- wrapped_p : callable modified penalty-matrix-generating function """ def wrapped_p(n, *args): if fit_linear: if n == 1: return sp.sparse.block_diag([linear_penalty], format='csc') return sp.sparse.block_diag([linear_penalty, p(n-1, *args)], format='csc') else: return p(n, *args) return wrapped_p def sparse_diff(array, n=1, axis=-1): """ A ported sparse version of np.diff. Uses recursion to compute higher order differences Parameters ---------- array : sparse array n : int, default: 1 differencing order axis : int, default: -1 axis along which differences are computed Returns ------- diff_array : sparse array same shape as input array, but 'axis' dimension is smaller by 'n'. """ if (n < 0) or (int(n) != n): raise ValueError('Expected order is non-negative integer, '\ 'but found: {}'.format(n)) if not sp.sparse.issparse(array): warnings.warn('Array is not sparse. Consider using numpy.diff') if n == 0: return array nd = array.ndim slice1 = [slice(None)]*nd slice2 = [slice(None)]*nd slice1[axis] = slice(1, None) slice2[axis] = slice(None, -1) slice1 = tuple(slice1) slice2 = tuple(slice2) A = sparse_diff(array, n-1, axis=axis) return A[slice1] - A[slice2] PKCJ:pygam/pygam.py# -*- coding: utf-8 -*- from __future__ import division, absolute_import from collections import defaultdict from collections import OrderedDict from copy import deepcopy from progressbar import ProgressBar import warnings import numpy as np import scipy as sp from scipy import stats from pygam.core import Core from pygam.penalties import derivative from pygam.penalties import l2 from pygam.penalties import monotonic_inc from pygam.penalties import monotonic_dec from pygam.penalties import convex from pygam.penalties import concave from pygam.penalties import circular from pygam.penalties import none from pygam.penalties import wrap_penalty from pygam.distributions import Distribution from pygam.distributions import NormalDist from pygam.distributions import BinomialDist from pygam.distributions import PoissonDist from pygam.distributions import GammaDist from pygam.distributions import InvGaussDist from pygam.links import Link from pygam.links import IdentityLink from pygam.links import LogitLink from pygam.links import LogLink from pygam.links import InverseLink from pygam.links import InvSquaredLink from pygam.callbacks import CallBack from pygam.callbacks import Deviance from pygam.callbacks import Diffs from pygam.callbacks import Accuracy from pygam.callbacks import Coef from pygam.callbacks import validate_callback from pygam.utils import check_dtype from pygam.utils import check_y from pygam.utils import check_X from pygam.utils import check_X_y from pygam.utils import print_data from pygam.utils import gen_edge_knots from pygam.utils import b_spline_basis from pygam.utils import combine from pygam.utils import cholesky from pygam.utils import check_param from pygam.utils import isiterable from pygam.utils import NotPositiveDefiniteError EPS = np.finfo(np.float64).eps # machine epsilon DISTRIBUTIONS = {'normal': NormalDist, 'poisson': PoissonDist, 'binomial': BinomialDist, 'gamma': GammaDist, 'inv_gauss': InvGaussDist } LINK_FUNCTIONS = {'identity': IdentityLink, 'log': LogLink, 'logit': LogitLink, 'inverse': InverseLink, 'inv_squared': InvSquaredLink } CALLBACKS = {'deviance': Deviance, 'diffs': Diffs, 'accuracy': Accuracy, 'coef': Coef } PENALTIES = {'auto': 'auto', 'derivative': derivative, 'l2': l2, 'none': none, } CONSTRAINTS = {'convex': convex, 'concave': concave, 'monotonic_inc': monotonic_inc, 'monotonic_dec': monotonic_dec, 'circular': circular, 'none': none } class GAM(Core): """Generalized Additive Model Parameters ---------- callbacks : list of strings or list of CallBack objects, default: ['deviance', 'diffs'] Names of callback objects to call during the optimization loop. constraints : str or callable, or iterable of str or callable, default: None Names of constraint functions to call during the optimization loop. Must be in {'convex', 'concave', 'monotonic_inc', 'monotonic_dec', 'circular', 'none'} If None, then the model will apply no constraints. If only one str or callable is specified, then is it copied for all features. distribution : str or Distribution object, default: 'normal' Distribution to use in the model. link : str or Link object, default: 'identity' Link function to use in the model. dtype : str in {'auto', 'numerical', 'categorical'}, or list of str, default: 'auto' String describing the data-type of each feature. 'numerical' is used for continuous-valued data-types, like in regression. 'categorical' is used for discrete-valued data-types, like in classification. If only one str is specified, then is is copied for all features. lam : float or iterable of floats > 0, default: 0.6 Smoothing strength; must be a positive float, or one positive float per feature. Larger values enforce stronger smoothing. If only one float is specified, then it is copied for all features. fit_intercept : bool, default: True Specifies if a constant (a.k.a. bias or intercept) should be added to the decision function. NOTE: the intercept receives no smoothing penalty. fit_linear : bool or iterable of bools, default: False Specifies if a linear term should be added to any of the feature functions. Useful for including pre-defined feature transformations in the model. If only one bool is specified, then it is copied for all features. NOTE: Many constraints are incompatible with an additional linear fit. eg. if a non-zero linear function is added to a periodic spline function, it will cease to be periodic. this is also possible for a monotonic spline function. fit_splines : bool or iterable of bools, default: True Specifies if a smoother should be added to any of the feature functions. Useful for defining feature transformations a-priori that should not have splines fitted to them. If only one bool is specified, then it is copied for all features. NOTE: fit_splines supercedes n_splines. ie. if n_splines > 0 and fit_splines = False, no splines will be fitted. max_iter : int, default: 100 Maximum number of iterations allowed for the solver to converge. penalties : str or callable, or iterable of str or callable, default: 'auto' Type of penalty to use for each feature. penalty should be in {'auto', 'none', 'derivative', 'l2', } If 'auto', then the model will use 2nd derivative smoothing for features of dtype 'numerical', and L2 smoothing for features of dtype 'categorical'. If only one str or callable is specified, then is it copied for all features. n_splines : int, or iterable of ints, default: 25 Number of splines to use in each feature function; must be non-negative. If only one int is specified, then it is copied for all features. Note: this value is set to 0 if fit_splines is False spline_order : int, or iterable of ints, default: 3 Order of spline to use in each feature function; must be non-negative. If only one int is specified, then it is copied for all features Note: if a feature is of type categorical, spline_order will be set to 0. tol : float, default: 1e-4 Tolerance for stopping criteria. Attributes ---------- coef_ : array, shape (n_classes, m_features) Coefficient of the features in the decision function. If fit_intercept is True, then self.coef_[0] will contain the bias. statistics_ : dict Dictionary containing model statistics like GCV/UBRE scores, AIC/c, parameter covariances, estimated degrees of freedom, etc. logs_ : dict Dictionary containing the outputs of any callbacks at each optimization loop. The logs are structured as `{callback: [...]}` References ---------- Simon N. Wood, 2006 Generalized Additive Models: an introduction with R Hastie, Tibshirani, Friedman The Elements of Statistical Learning http://statweb.stanford.edu/~tibs/ElemStatLearn/printings/ESLII_print10.pdf Paul Eilers & Brian Marx, 2015 International Biometric Society: A Crash Course on P-splines http://www.ibschannel2015.nl/project/userfiles/Crash_course_handout.pdf """ def __init__(self, lam=0.6, max_iter=100, n_splines=25, spline_order=3, penalties='auto', tol=1e-4, distribution='normal', link='identity', callbacks=['deviance', 'diffs'], fit_intercept=True, fit_linear=False, fit_splines=True, dtype='auto', constraints=None): self.max_iter = max_iter self.tol = tol self.lam = lam self.n_splines = n_splines self.spline_order = spline_order self.penalties = penalties self.distribution = distribution self.link = link self.callbacks = callbacks self.constraints = constraints self.fit_intercept = fit_intercept self.fit_linear = fit_linear self.fit_splines = fit_splines self.dtype = dtype # created by other methods self._n_coeffs = [] # useful for indexing into model coefficients self._edge_knots = [] self._lam = [] self._n_splines = [] self._spline_order = [] self._penalties = [] self._constraints = [] self._dtype = [] self._fit_linear = [] self._fit_splines = [] self._fit_intercept = None # internal settings self._constraint_lam = 1e9 # regularization intensity for constraints self._constraint_l2 = 1e-3 # diagononal loading to improve conditioning self._constraint_l2_max = 1e-1 # maximum loading self._opt = 0 # use 0 for numerically stable optimizer, 1 for naive # call super and exclude any variables super(GAM, self).__init__() def _expand_attr(self, attr, n, dt_alt=None, msg=None): """ tool to parse and duplicate initialization arguments into model parameters. typically we use this tool to take a single attribute like: self.lam = 0.6 and make one copy per feature, ie: self._lam = [0.6, 0.6, 0.6] for a model with 3 features. if self.attr is an iterable of values of length n, then copy it verbatim to self._attr. otherwise extend the single value to a list of length n, and copy that to self._attr dt_alt is an alternative value for dtypes of type categorical (ie discrete). so if our 3-feature dataset is of types ['numerical', 'numerical', 'categorical'], we could use this method to turn self.lam = 0.6 into self.lam = [0.6, 0.6, 0.3] by calling self._expand_attr('lam', 3, dt_alt=0.3) Parameters ---------- attr : string name of the attribute to expand n : int number of time to repeat the attribute dt_alt : object, deafult: None object to subsitute attribute for categorical features. if dt_alt is None, categorical features are treated the same as numerical features. msg: string, default: None custom error message to report if self.attr is iterable BUT len(self.attr) != n if msg is None, default message is used: 'expected "attr" to have length X.shape[1], but found {}'.format(len(self.attr)) Returns ------- None """ data = deepcopy(getattr(self, attr)) _attr = '_' + attr if isiterable(data): if not (len(data) == n): if msg is None: msg = 'expected {} to have length X.shape[1], '\ 'but found {}'.format(attr, len(data)) raise ValueError(msg) else: data = [data] * n if dt_alt is not None: data = [d if dt != 'categorical' else dt_alt for d,dt in zip(data, self._dtype)] setattr(self, _attr, data) @property def _is_fitted(self): """ simple way to check if the GAM has been fitted Parameters --------- None Returns ------- bool : whether or not the model is fitted """ return hasattr(self, 'coef_') def _validate_params(self): """ method to sanitize model parameters Parameters --------- None Returns ------- None """ # fit_intercep if not isinstance(self.fit_intercept, bool): raise ValueError('fit_intercept must be type bool, but found {}'\ .format(self.fit_intercept.__class__)) # max_iter self.max_iter = check_param(self.max_iter, param_name='max_iter', dtype='int', constraint='>=1', iterable=False) # lam self.lam = check_param(self.lam, param_name='lam', dtype='float', constraint='>0') # n_splines self.n_splines = check_param(self.n_splines, param_name='n_splines', dtype='int', constraint='>=0') # spline_order self.spline_order = check_param(self.spline_order, param_name='spline_order', dtype='int', constraint='>=0') # n_splines + spline_order if not (np.atleast_1d(self.n_splines) > np.atleast_1d(self.spline_order)).all(): raise ValueError('n_splines must be > spline_order. '\ 'found: n_splines = {} and spline_order = {}'\ .format(self.n_splines, self.spline_order)) # distribution if not ((self.distribution in DISTRIBUTIONS) or isinstance(self.distribution, Distribution)): raise ValueError('unsupported distribution {}'.format(self.distribution)) if self.distribution in DISTRIBUTIONS: self.distribution = DISTRIBUTIONS[self.distribution]() # link if not ((self.link in LINK_FUNCTIONS) or isinstance(self.link, Link)): raise ValueError('unsupported link {}'.format(self.link)) if self.link in LINK_FUNCTIONS: self.link = LINK_FUNCTIONS[self.link]() # callbacks if not isiterable(self.callbacks): raise ValueError('Callbacks must be iterable, but found {}'\ .format(self.callbacks)) if not all([c in CALLBACKS or isinstance(c, CallBack) for c in self.callbacks]): raise ValueError('unsupported callback(s) {}'.format(self.callbacks)) for i, c in enumerate(self.callbacks): if c in CALLBACKS: self.callbacks[i] = CALLBACKS[c]() self.callbacks = [validate_callback(c) for c in self.callbacks] # penalties if not (isiterable(self.penalties) or hasattr(self.penalties, '__call__') or self.penalties in PENALTIES or self.penalties is None): raise ValueError('penalties must be iterable or callable, '\ 'but found {}'.format(self.penalties)) if isiterable(self.penalties): for i, p in enumerate(self.penalties): if not (hasattr(p, '__call__') or (p in PENALTIES) or (p is None)): raise ValueError("penalties must be callable or in "\ "{}, but found {} for {}th penalty"\ .format(list(PENALTIES.keys()), p, i)) # constraints if not (isiterable(self.constraints) or hasattr(self.constraints, '__call__') or self.constraints in CONSTRAINTS or self.constraints is None): raise ValueError('constraints must be iterable or callable, '\ 'but found {}'.format(self.constraints)) if isiterable(self.constraints): for i, c in enumerate(self.constraints): if not (hasattr(c, '__call__') or (c in CONSTRAINTS) or (c is None)): raise ValueError("constraints must be callable or in "\ "{}, but found {} for {}th constraint"\ .format(list(CONSTRAINTS.keys()), c, i)) # dtype if not (self.dtype in ['auto', 'numerical', 'categorical'] or isiterable(self.dtype)): raise ValueError("dtype must be in ['auto', 'numerical', "\ "'categorical'] or iterable of those strings, "\ "but found dtype = {}".format(self.dtype)) if isiterable(self.dtype): for dt in self.dtype: if dt not in ['auto', 'numerical', 'categorical']: raise ValueError("elements of iterable dtype must be in "\ "['auto', 'numerical', 'categorical], "\ "but found dtype = {}".format(self.dtype)) def _validate_data_dep_params(self, X): """ method to validate and prepare data-dependent parameters Parameters --------- X : array-like containing the input dataset Returns ------- None """ n_samples, m_features = X.shape # set up dtypes and check types if 'auto' self._expand_attr('dtype', m_features) for i, (dt, x) in enumerate(zip(self._dtype, X.T)): if dt == 'auto': dt = check_dtype(x)[0] if dt == 'categorical': warnings.warn('detected catergorical data for feature {}'\ .format(i), stacklevel=2) self._dtype[i] = dt assert len(self._dtype) == m_features # sanity check # set up lambdas self._expand_attr('lam', m_features) # add intercept term if self.fit_intercept: self._lam = [0.] + self._lam # set up penalty matrices self._expand_attr('penalties', m_features) # set up constraints self._expand_attr('constraints', m_features, dt_alt=None) # set up fit_linear and fit_splines, copy fit_intercept self._fit_intercept = self.fit_intercept self._expand_attr('fit_linear', m_features, dt_alt=False) self._expand_attr('fit_splines', m_features) for i, (fl, c) in enumerate(zip(self._fit_linear, self._constraints)): if bool(c) and (c is not 'none'): if fl: warnings.warn('cannot do fit_linear with constraints. '\ 'setting fit_linear=False for feature {}'\ .format(i)) self._fit_linear[i] = False line_or_spline = [bool(line + spline) for line, spline in \ zip(self._fit_linear, self._fit_splines)] # problems if not all(line_or_spline): bad = [i for i, l_or_s in enumerate(line_or_spline) if not l_or_s] raise ValueError('a line or a spline must be fit on each feature. '\ 'Neither were found on feature(s): {}' \ .format(bad)) # expand spline_order, n_splines, and prepare edge_knots self._expand_attr('spline_order', X.shape[1], dt_alt=0) self._expand_attr('n_splines', X.shape[1], dt_alt=0) self._edge_knots = [gen_edge_knots(feat, dtype) for feat, dtype in \ zip(X.T, self._dtype)] # update our n_splines correcting for categorical features, no splines for i, (fs, dt, ek) in enumerate(zip(self._fit_splines, self._dtype, self._edge_knots)): if fs: if dt == 'categorical': self._n_splines[i] = len(ek) - 1 if not fs: self._n_splines[i] = 0 # compute number of model coefficients self._n_coeffs = [] for n_splines, fit_linear, fit_splines in zip(self._n_splines, self._fit_linear, self._fit_splines): self._n_coeffs.append(n_splines * fit_splines + fit_linear) if self._fit_intercept: self._n_coeffs = [1] + self._n_coeffs def _loglikelihood(self, y, mu): """ compute the log-likelihood of the dataset using the current model Parameters --------- y : array-like of shape (n,) containing target values mu : array-like of shape (n_samples,) expected value of the targets given the model and inputs Returns ------- log-likelihood : np.array of shape (n,) containing log-likelihood scores """ return np.log(self.distribution.pdf(y=y, mu=mu)).sum() def _linear_predictor(self, X=None, modelmat=None, b=None, feature=-1): """linear predictor compute the linear predictor portion of the model ie multiply the model matrix by the spline basis coefficients Parameters --------- at least 1 of (X, modelmat) and at least 1 of (b, feature) X : array-like of shape (n_samples, m_features), default: None containing the input dataset if None, will attempt to use modelmat modelmat : array-like, default: None contains the spline basis for each feature evaluated at the input values for each feature, ie model matrix if None, will attempt to construct the model matrix from X b : array-like, default: None contains the spline coefficients if None, will use current model coefficients feature : int, deafult: -1 feature for which to compute the linear prediction if -1, will compute for all features Returns ------- lp : np.array of shape (n_samples,) """ if modelmat is None: modelmat = self._modelmat(X, feature=feature) if b is None: b = self.coef_[self._select_feature(feature)] return modelmat.dot(b).flatten() def predict_mu(self, X): """ preduct expected value of target given model and input X Parameters --------- X : array-like of shape (n_samples, m_features), default: None containing the input dataset Returns ------- y : np.array of shape (n_samples,) containing expected values under the model """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') X = check_X(X, n_feats=len(self._n_coeffs) - self._fit_intercept) lp = self._linear_predictor(X) return self.link.mu(lp, self.distribution) def predict(self, X): """ preduct expected value of target given model and input X often this is done via expected value of GAM given input X Parameters --------- X : array-like of shape (n_samples, m_features), default: None containing the input dataset Returns ------- y : np.array of shape (n_samples,) containing predicted values under the model """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') X = check_X(X, n_feats=len(self._n_coeffs) - self._fit_intercept) return self.predict_mu(X) def _modelmat(self, X, feature=-1): """ Builds a model matrix, B, out of the spline basis for each feature B = [B_0, B_1, ..., B_p] Parameters --------- X : array-like of shape (n_samples, m_features), default: None containing the input dataset feature : int, default: -1 feature index for which to compute the model matrix if -1, will create the model matrix for all features Returns ------- modelmat : np.array of len n_samples containing model matrix of the spline basis for selected features """ X = check_X(X, n_feats=len(self._n_coeffs) - self._fit_intercept) if feature >= len(self._n_coeffs) or feature < -1: raise ValueError('feature {} out of range for X with shape {}'\ .format(feature, X.shape)) # for all features, build matrix recursively if feature == -1: modelmat = [] for feat in range(X.shape[1] + self._fit_intercept): modelmat.append(self._modelmat(X, feature=feat)) return sp.sparse.hstack(modelmat, format='csc') # intercept if (feature == 0) and self._fit_intercept: return sp.sparse.csc_matrix(np.ones((X.shape[0], 1))) # return only the basis functions for 1 feature feature = feature - self._fit_intercept featuremat = [] if self._fit_linear[feature]: featuremat.append(sp.sparse.csc_matrix(X[:, feature][:,None])) if self._fit_splines[feature]: featuremat.append(b_spline_basis(X[:,feature], edge_knots=self._edge_knots[feature], spline_order=self._spline_order[feature], n_splines=self._n_splines[feature], sparse=True)) return sp.sparse.hstack(featuremat, format='csc') def _cholesky(self, A, **kwargs): """ method to handle potential problems with the cholesky decomposition. will try to increase L2 regularization of the penalty matrix to do away with non-positive-definite errors Parameters ---------- A : np.array Returns ------- np.array """ # create appropriate-size diagonal matrix if sp.sparse.issparse(A): diag = sp.sparse.eye(A.shape[0]) else: diag = np.eye(A.shape[0]) constraint_l2 = self._constraint_l2 while constraint_l2 <= self._constraint_l2_max: try: L = cholesky(A, **kwargs) self._constraint_l2 = constraint_l2 return L except NotPositiveDefiniteError: warnings.warn('Matrix is not positive definite. \n'\ 'Increasing l2 reg by factor of 10.', stacklevel=2) A -= constraint_l2 * diag constraint_l2 *= 10 A += constraint_l2 * diag raise NotPositiveDefiniteError('Matrix is not positive \n' 'definite.') def _C(self): """ builds the GAM block-diagonal constraint matrix in quadratic form out of constraint matrices specified for each feature. behaves like a penalty, but with a very large lambda value, ie 1e6. Parameters --------- None Returns ------- C : sparse CSC matrix containing the model constraints in quadratic form """ Cs = [] if self._fit_intercept: Cs.append(np.array(0.)) for i, c in enumerate(self._constraints): fit_linear = self._fit_linear[i] dtype = self._dtype[i] n = self._n_coeffs[i + self._fit_intercept] coef = self.coef_[self._select_feature(i + self._fit_intercept)] coef = coef[fit_linear:] if c is None: c = 'none' if c in CONSTRAINTS: c = CONSTRAINTS[c] c = wrap_penalty(c, fit_linear)(n, coef) * self._constraint_lam Cs.append(c) Cs = sp.sparse.block_diag(Cs) # improve condition if Cs.nnz > 0: Cs += sp.sparse.diags(self._constraint_l2 * np.ones(Cs.shape[0])) return Cs def _P(self): """ builds the GAM block-diagonal penalty matrix in quadratic form out of penalty matrices specified for each feature. each feature penalty matrix is multiplied by a lambda for that feature. the first feature is the intercept. so for m features: P = block_diag[lam0 * P0, lam1 * P1, lam2 * P2, ... , lamm * Pm] Parameters --------- None Returns ------- P : sparse CSC matrix containing the model penalties in quadratic form """ Ps = [] if self._fit_intercept: Ps.append(np.array(0.)) for i, p in enumerate(self._penalties): fit_linear = self._fit_linear[i] dtype = self._dtype[i] n = self._n_coeffs[i + self._fit_intercept] coef = self.coef_[self._select_feature(i + self._fit_intercept)] coef = coef[fit_linear:] if p == 'auto': if dtype == 'numerical': p = derivative if dtype == 'categorical': p = l2 if p is None: p = 'none' if p in PENALTIES: p = PENALTIES[p] p = wrap_penalty(p, fit_linear)(n, coef) Ps.append(p) P_matrix = tuple([np.multiply(P, lam) for lam, P in zip(self._lam, Ps)]) P_matrix = sp.sparse.block_diag(P_matrix) return P_matrix def _pseudo_data(self, y, lp, mu): """ compute the pseudo data for a PIRLS iterations Parameters --------- y : array-like of shape (n,) containing target data lp : array-like of shape (n,) containing linear predictions by the model mu : array-like of shape (n_samples,) expected value of the targets given the model and inputs Returns ------- pseudo_data : np.array of shape (n,) """ return lp + (y - mu) * self.link.gradient(mu, self.distribution) def _weights(self, mu): """ compute the PIRLS weights for model predictions. TODO lets verify the formula for this. if we use the square root of the mu with the stable opt, we get the same results as when we use non-sqrt mu with naive opt. this makes me think that they are equivalent. also, using non-sqrt mu with stable opt gives very small edofs for even lam=0.001 and the parameter variance is huge. this seems strange to me. computed [V * d(link)/d(mu)] ^(-1/2) by hand and the math checks out as hoped. ive since moved the square to the naive pirls method to make the code modular. Parameters --------- mu : array-like of shape (n_samples,) expected value of the targets given the model and inputs Returns ------- weights : np.array of shape (n,) """ return sp.sparse.diags((self.link.gradient(mu, self.distribution)**2 * self.distribution.V(mu=mu))**-0.5) def _mask(self, weights): """ identifies the mask at which the weights are greater than sqrt(machine epsilon) and not NaN Parameters --------- weights : array-like of shape (n,) containing weights in [0,1] Returns ------- mask : boolean np.array of shape (n,) of good weight values """ mask = (np.abs(weights) >= np.sqrt(EPS)) * (weights != np.nan) assert mask.sum() != 0, 'increase regularization' return mask def _pirls(self, X, Y): """ Performs stable PIRLS iterations to estimate GAM coefficients Parameters --------- X : array-like of shape (n_samples, m_features) containing input data y : array-like of shape (n,) containing target data Returns ------- None """ modelmat = self._modelmat(X) # build a basis matrix for the GLM n, m = modelmat.shape min_n_m = np.min([m,n]) # initialize GLM coefficients if not self._is_fitted or len(self.coef_) != sum(self._n_coeffs): self.coef_ = np.ones(m) * np.sqrt(EPS) # allow more training # do our penalties require recomputing cholesky? chol_pen = np.ravel([np.ravel(p) for p in self._penalties]) chol_pen = any([cp in ['convex', 'concave', 'monotonic_inc', 'monotonic_dec', 'circular']for cp in chol_pen]) P = self._P() # create penalty matrix # base penalty S = sp.sparse.diags(np.ones(m) * np.sqrt(EPS)) # improve condition # S += self._H # add any user-chosen minumum penalty to the diagonal # if we dont have any constraints, then do cholesky now if not any(self._constraints) and not chol_pen: E = self._cholesky(S + P, sparse=False) Dinv = np.zeros((min_n_m + m, m)).T for _ in range(self.max_iter): # recompute cholesky if needed if any(self._constraints) or chol_pen: P = self._P() C = self._C() E = self._cholesky(S + P + C, sparse=False) # forward pass y = deepcopy(Y) # for simplicity lp = self._linear_predictor(modelmat=modelmat) mu = self.link.mu(lp, self.distribution) weights = self._weights(mu) # check for weghts == 0, nan, and update mask = self._mask(weights.diagonal()) y = y[mask] # update lp = lp[mask] # update mu = mu[mask] # update # PIRLS Wood pg 183 weights = self._weights(mu) pseudo_data = weights.dot(self._pseudo_data(y, lp, mu)) # log on-loop-start stats self._on_loop_start(vars()) WB = weights.dot(modelmat[mask,:]) # common matrix product Q, R = np.linalg.qr(WB.todense()) U, d, Vt = np.linalg.svd(np.vstack([R, E.T])) svd_mask = d <= (d.max() * np.sqrt(EPS)) # mask out small singular values np.fill_diagonal(Dinv, d**-1) # invert the singular values U1 = U[:min_n_m,:] # keep only top portion of U B = Vt.T.dot(Dinv).dot(U1.T).dot(Q.T) coef_new = B.dot(pseudo_data).A.flatten() diff = np.linalg.norm(self.coef_ - coef_new)/np.linalg.norm(coef_new) self.coef_ = coef_new # update # log on-loop-end stats self._on_loop_end(vars()) # check convergence if diff < self.tol: break # estimate statistics even if not converged self._estimate_model_statistics(Y, modelmat, inner=None, BW=WB.T, B=B) if diff < self.tol: return print('did not converge') return def _pirls_naive(self, X, y): """ Performs naive PIRLS iterations to estimate GAM coefficients Parameters --------- X : array-like of shape (n_samples, m_features) containing input data y : array-like of shape (n,) containing target data Returns ------- None """ modelmat = self._modelmat(X) # build a basis matrix for the GLM m = modelmat.shape[1] # initialize GLM coefficients if not self._is_fitted or len(self.coef_) != sum(self._n_coeffs): self.coef_ = np.ones(m) * np.sqrt(EPS) # allow more training P = self._P() # create penalty matrix P += sp.sparse.diags(np.ones(m) * np.sqrt(EPS)) # improve condition for _ in range(self.max_iter): lp = self._linear_predictor(modelmat=modelmat) mu = self.link.mu(lp, self.distribution) mask = self._mask(mu) mu = mu[mask] # update lp = lp[mask] # update if self.family == 'binomial': self.acc.append(self.accuracy(y=y[mask], mu=mu)) # log the training accuracy self.dev.append(self.deviance_(y=y[mask], mu=mu, scaled=False)) # log the training deviance weights = self._weights(mu)**2 # PIRLS, added square for modularity pseudo_data = self._pseudo_data(y, lp, mu) # PIRLS BW = modelmat.T.dot(weights).tocsc() # common matrix product inner = sp.sparse.linalg.inv(BW.dot(modelmat) + P) # keep for edof coef_new = inner.dot(BW).dot(pseudo_data).flatten() diff = np.linalg.norm(self.coef_ - coef_new)/np.linalg.norm(coef_new) self.diffs.append(diff) self.coef_ = coef_new # update # check convergence if diff < self.tol: self.edof_ = self._estimate_edof(modelmat, inner, BW) self.aic_ = self._estimate_AIC(X, y, mu) self.aicc_ = self._estimate_AICc(X, y, mu) return print('did not converge') def _on_loop_start(self, variables): """ performs on-loop-start actions like callbacks variables contains local namespace variables. Parameters --------- variables : dict of available variables Returns ------- None """ for callback in self.callbacks: if hasattr(callback, 'on_loop_start'): self.logs_[str(callback)].append(callback.on_loop_start(**variables)) def _on_loop_end(self, variables): """ performs on-loop-end actions like callbacks variables contains local namespace variables. Parameters --------- variables : dict of available variables Returns ------- None """ for callback in self.callbacks: if hasattr(callback, 'on_loop_end'): self.logs_[str(callback)].append(callback.on_loop_end(**variables)) def fit(self, X, y): """Fit the generalized additive model. Parameters ---------- X : array-like, shape = [n_samples, m_features] Training vectors, where n_samples is the number of samples and m_features is the number of features. y : array-like, shape = [n_samples] Target values (integers in classification, real numbers in regression) For classification, labels must correspond to classes. Returns ------- self : object Returns fitted GAM object """ # validate parameters self._validate_params() # validate data y = check_y(y, self.link, self.distribution) X = check_X(X) check_X_y(X, y) # validate data-dependent parameters self._validate_data_dep_params(X) # set up logging if not hasattr(self, 'logs_'): self.logs_ = defaultdict(list) # optimize if self._opt == 0: self._pirls(X, y) if self._opt == 1: self._pirls_naive(X, y) return self def deviance_residuals(self, X, y, scaled=False): """ method to compute the deviance residuals of the model these are analogous to the residuals of an OLS. Parameters ---------- X : array-like input data array of shape (n_saples, m_features) y : array-like output data vector of shape (n_samples,) scaled : bool, default: False whether to scale the deviance by the (estimated) distribution scale Returns ------- deviance_residuals : np.array with shape (n_samples,) """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') y = check_y(y, self.link, self.distribution) X = check_X(X, n_feats=len(self._n_coeffs) - self._fit_intercept) check_X_y(X, y) mu = self.predict_mu(X) sign = np.sign(y-mu) return sign * self.distribution.deviance(y, mu, summed=False, scaled=scaled)**0.5 def _estimate_model_statistics(self, y, modelmat, inner=None, BW=None, B=None): """ method to compute all of the model statistics results are stored in the 'statistics_' attribute of the model, as a dictionary keyed by: - edof: estimated degrees freedom - scale: distribution scale, if applicable - cov: coefficient covariances - AIC: Akaike Information Criterion - AICc: corrected Akaike Information Criterion - r2: explained_deviance Pseudo R-squared - GCV: generailized cross-validation or - UBRE: Un-Biased Risk Estimator Parameters ---------- y : array-like output data vector of shape (n_samples,) modelmat : array-like, default: None contains the spline basis for each feature evaluated at the input inner : array of intermediate computations from naive optimization BW : array of intermediate computations from either optimization B : array of intermediate computations from stable optimization Returns ------- None """ self.statistics_ = {} lp = self._linear_predictor(modelmat=modelmat) mu = self.link.mu(lp, self.distribution) self.statistics_['edof'] = self._estimate_edof(BW=BW, B=B) # self.edof_ = np.dot(U1, U1.T).trace().A.flatten() # this is wrong? if not self.distribution._known_scale: self.distribution.scale = self.distribution.phi(y=y, mu=mu, edof=self.statistics_['edof']) self.statistics_['scale'] = self.distribution.scale self.statistics_['cov'] = (B.dot(B.T)).A * self.distribution.scale # parameter covariances. no need to remove a W because we are using W^2. Wood pg 184 self.statistics_['se'] = self.statistics_['cov'].diagonal()**0.5 self.statistics_['AIC']= self._estimate_AIC(y=y, mu=mu) self.statistics_['AICc'] = self._estimate_AICc(y=y, mu=mu) self.statistics_['pseudo_r2'] = self._estimate_r2(y=y, mu=mu) self.statistics_['GCV'], self.statistics_['UBRE'] = self._estimate_GCV_UBRE(modelmat=modelmat, y=y) def _estimate_edof(self, modelmat=None, inner=None, BW=None, B=None, limit=50000): """ estimate effective degrees of freedom. computes the only diagonal of the influence matrix and sums. allows for subsampling when the number of samples is very large. Parameters ---------- modelmat : array-like, default: None contains the spline basis for each feature evaluated at the input inner : array of intermediate computations from naive optimization BW : array of intermediate computations from either optimization B : array of intermediate computations from stable optimization limit : int, default: 50000 number of samples required before subsampling the model matrix. this requires less computation. Returns ------- None """ size = BW.shape[1] # number of samples max_ = np.min([limit, size]) # since we only compute the diagonal, we can afford larger matrices if max_ == limit: # subsampling scale = np.float(size)/max_ idxs = range(size) np.random.shuffle(idxs) if B is None: return scale * modelmat.dot(inner).tocsr()[idxs[:max_]].T.multiply(BW[:,idxs[:max_]]).sum() else: return scale * BW[:,idxs[:max_]].multiply(B[:,idxs[:max_]]).sum() else: # no subsampling if B is None: return modelmat.dot(inner).T.multiply(BW).sum() else: return BW.multiply(B).sum() def _estimate_AIC(self, y, mu): """ estimate the Akaike Information Criterion Parameters ---------- y : array-like of shape (n_samples,) output data vector mu : array-like of shape (n_samples,) expected value of the targets given the model and inputs Returns ------- None """ estimated_scale = not(self.distribution._known_scale) # if we estimate the scale, that adds 2 dof return -2*self._loglikelihood(y=y, mu=mu) + 2*self.statistics_['edof'] + 2*estimated_scale def _estimate_AICc(self, y, mu): """ estimate the corrected Akaike Information Criterion relies on the estimated degrees of freedom, which must be computed before. Parameters ---------- y : array-like of shape (n_samples,) output data vector mu : array-like of shape (n_samples,) expected value of the targets given the model and inputs Returns ------- None """ edof = self.statistics_['edof'] if self.statistics_['AIC'] is None: self.statistics_['AIC'] = self._estimate_AIC(y, mu) return self.statistics_['AIC'] + 2*(edof + 1)*(edof + 2)/(y.shape[0] - edof -2) def _estimate_r2(self, X=None, y=None, mu=None): """ estimate some pseudo R^2 values currently only computes explained deviance. results are stored Parameters ---------- y : array-like of shape (n_samples,) output data vector mu : array-like of shape (n_samples,) expected value of the targets given the model and inputs Returns ------- None """ if mu is None: mu = self.predict_mu_(X=X) n = len(y) null_mu = y.mean() * np.ones_like(y) null_d = self.distribution.deviance(y=y, mu=null_mu) full_d = self.distribution.deviance(y=y, mu=mu) r2 = OrderedDict() r2['explained_deviance'] = 1. - full_d/null_d return r2 def _estimate_GCV_UBRE(self, X=None, y=None, modelmat=None, gamma=1.4, add_scale=True): """ Generalized Cross Validation and Un-Biased Risk Estimator. UBRE is used when the scale parameter is known, like Poisson and Binomial families. Parameters ---------- modelmat : array-like, default: None contains the spline basis for each feature evaluated at the input add_scale : boolean, default: True UBRE score can be negative because the distribution scale is subtracted. to keep things positive we can add the scale back. gamma : float, default: 1.4 serves as a weighting to increase the impact of the influence matrix on the score: Returns ------- score : float Either GCV or UBRE, depending on if the scale parameter is known. Notes ----- Sometimes the GCV or UBRE selected model is deemed to be too wiggly, and a smoother model is desired. One way to achieve this, in a systematic way, is to increase the amount that each model effective degree of freedom counts, in the GCV or UBRE score, by a factor γ ≥ 1 see Wood 2006 pg. 177-182, 220 for more details. """ if gamma < 1: raise ValueError('gamma scaling should be greater than 1, '\ 'but found gamma = {}',format(gamma)) if modelmat is None: modelmat = self._modelmat(X) lp = self._linear_predictor(modelmat=modelmat) mu = self.link.mu(lp, self.distribution) n = y.shape[0] edof = self.statistics_['edof'] GCV = None UBRE = None if self.distribution._known_scale: # scale is known, use UBRE scale = self.distribution.scale UBRE = 1./n * self.distribution.deviance(mu=mu, y=y, scaled=False) \ - (~add_scale)*(scale) + 2.*gamma/n * edof * scale else: # scale unkown, use GCV GCV = (n * self.distribution.deviance(mu=mu, y=y, scaled=False)) \ / (n - gamma * edof)**2 return (GCV, UBRE) def prediction_intervals(self, X, width=.95, quantiles=None): """ estimate prediction intervals for LinearGAM Parameters ---------- X : array-like of shape (n_samples, m_features) input data matrix width : float on [0,1], default: 0.95 quantiles : array-like of floats in [0, 1], default: None instead of specifying the prediciton width, one can specify the quantiles. so width=.95 is equivalent to quantiles=[.025, .975] Returns ------- intervals: np.array of shape (n_samples, 2 or len(quantiles)) """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') X = check_X(X, n_feats=len(self._n_coeffs) - self._fit_intercept) return self._get_quantiles(X, width, quantiles, prediction=True) def confidence_intervals(self, X, width=.95, quantiles=None): """ estimate confidence intervals for the model. Parameters ---------- X : array-like of shape (n_samples, m_features) input data matrix width : float on [0,1], default: 0.95 quantiles : array-like of floats in [0, 1], default: None instead of specifying the prediciton width, one can specify the quantiles. so width=.95 is equivalent to quantiles=[.025, .975] Returns ------- intervals: np.array of shape (n_samples, 2 or len(quantiles)) """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') X = check_X(X, n_feats=len(self._n_coeffs) - self._fit_intercept) return self._get_quantiles(X, width, quantiles, prediction=False) def _get_quantiles(self, X, width, quantiles, modelmat=None, lp=None, prediction=False, xform=True, feature=-1): """ estimate prediction intervals for LinearGAM Parameters ---------- X : array input data of shape (n_samples, m_features) y : array label data of shape (n_samples,) width : float on [0,1] quantiles : array-like of floats in [0, 1] instead of specifying the prediciton width, one can specify the quantiles. so width=.95 is equivalent to quantiles=[.025, .975] modelmat : array of shape Returns ------- intervals: np.array of shape (n_samples, 2 or len(quantiles)) """ if quantiles is not None: quantiles = np.atleast_1d(quantiles) else: alpha = (1 - width)/2. quantiles = [alpha, 1 - alpha] for quantile in quantiles: if (quantile > 1) or (quantile < 0): raise ValueError('quantiles must be in [0, 1], but found {}'\ .format(quantiles)) if modelmat is None: modelmat = self._modelmat(X, feature=feature) if lp is None: lp = self._linear_predictor(modelmat=modelmat, feature=feature) idxs = self._select_feature(feature) cov = self.statistics_['cov'][idxs][:,idxs] var = (modelmat.dot(cov) * modelmat.todense().A).sum(axis=1) if prediction: var += self.distribution.scale lines = [] for quantile in quantiles: t = sp.stats.t.ppf(quantile, df=self.statistics_['edof']) lines.append(lp + t * var**0.5) lines = np.vstack(lines).T if xform: lines = self.link.mu(lines, self.distribution) return lines def _select_feature(self, feature): """ tool for indexing by feature function. many coefficients and parameters are organized by feature. this tool returns all of the indices for a given feature. GAM intercept is considered the 0th feature. Parameters ---------- feature : int feature to select from the data. when fit_intercept=True, 0 corresponds to the intercept when feature=-1, all features are selected Returns ------- np.array indices into self.coef_ corresponding to the chosen feature """ if feature >= len(self._n_coeffs) or feature < -1: raise ValueError('feature {} out of range for X with shape {}'\ .format(feature, X.shape)) if feature == -1: # special case for selecting all features return np.arange(np.sum(self._n_coeffs), dtype=int) a = np.sum(self._n_coeffs[:feature]) b = np.sum(self._n_coeffs[feature]) return np.arange(a, a+b, dtype=int) def partial_dependence(self, X, feature=-1, width=None, quantiles=None): """ Computes the feature functions for the GAM and possibly their confidence intervals. if both width=None and quantiles=None, then no confidence intervals are computed Parameters ---------- X : array input data of shape (n_samples, m_features) feature : array-like of ints, default: -1 feature for which to compute the partial dependence functions if feature == -1, then all features are selected, excluding the intercept if feature == 0 and gam.fit_intercept is True, then the intercept's patial dependence is returned width : float in [0, 1], default: None width of the confidence interval if None, defaults to 0.95 quantiles : array-like of floats in [0, 1], default: None instead of specifying the prediciton width, one can specify the quantiles. so width=.95 is equivalent to quantiles=[.025, .975] if None, defaults to width Returns ------- pdeps : np.array of shape (n_samples, len(feature)) conf_intervals : list of length len(feature) containing np.arrays of shape (n_samples, 2 or len(quantiles)) """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') m = len(self._n_coeffs) - self._fit_intercept X = check_X(X, n_feats=m) p_deps = [] compute_quantiles = (width is not None) or (quantiles is not None) conf_intervals = [] if feature == -1: feature = np.arange(m) + self._fit_intercept # convert to array feature = np.atleast_1d(feature) # ensure feature exists if (feature >= len(self._n_coeffs)).any() or (feature < -1).any(): raise ValueError('feature {} out of range for X with shape {}'\ .format(feature, X.shape)) for i in feature: modelmat = self._modelmat(X, feature=i) lp = self._linear_predictor(modelmat=modelmat, feature=i) p_deps.append(lp) if compute_quantiles: conf_intervals.append(self._get_quantiles(X, width=width, quantiles=quantiles, modelmat=modelmat, lp=lp, feature=i, xform=False)) pdeps = np.vstack(p_deps).T if compute_quantiles: return (pdeps, conf_intervals) return pdeps def summary(self): """ produce a summary of the model statistics #TODO including feature significance via F-Test Parameters ---------- None Returns ------- None """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') keys = ['edof', 'AIC', 'AICc'] if self.distribution._known_scale: keys.append('UBRE') else: keys.append('GCV') keys.append('scale') sub_data = OrderedDict([[k, self.statistics_[k]] for k in keys]) print_data(sub_data, title='Model Statistics') print('') print_data(self.statistics_['pseudo_r2'], title='Pseudo-R^2') def gridsearch(self, X, y, return_scores=False, keep_best=True, objective='auto', **param_grids): """ performs a grid search over a space of parameters for a given objective NOTE: gridsearch method is lazy and will not remove useless combinations from the search space, eg. n_splines=np.arange(5,10), fit_splines=[True, False] will result in 10 loops, of which 5 are equivalent because even though fit_splines==False it is not recommended to search over a grid that alternates between known scales and unknown scales, as the scores of the cadidate models will not be comparable. Parameters ---------- X : array input data of shape (n_samples, m_features) y : array label data of shape (n_samples,) return_scores : boolean, default False whether to return the hyperpamaters and score for each element in the grid keep_best : boolean whether to keep the best GAM as self. default: True objective : string, default: 'auto' metric to optimize. must be in ['AIC', 'AICc', 'GCV', 'UBRE', 'auto'] if 'auto', then grid search will optimize GCV for models with unknown scale and UBRE for models with known scale. **kwargs : dict, default {'lam': np.logspace(-3, 3, 11)} pairs of parameters and iterables of floats, or parameters and iterables of iterables of floats. if iterable of iterables of floats, the outer iterable must have length m_features. the method will make a grid of all the combinations of the parameters and fit a GAM to each combination. Returns ------- if return_values == True: model_scores : dict Contains each fitted model as keys and corresponding objective scores as values else: self, ie possibly the newly fitted model """ # validate objective if objective not in ['auto', 'GCV', 'UBRE', 'AIC', 'AICc']: raise ValueError("objective mut be in "\ "['auto', 'GCV', 'UBRE', 'AIC', 'AICc'], '\ 'but found objective = {}".format(objective)) # check if model fitted if not self._is_fitted: self._validate_params() # check objective if self.distribution._known_scale: if objective == 'GCV': raise ValueError('GCV should be used for models with'\ 'unknown scale') if objective == 'auto': objective = 'UBRE' else: if objective == 'UBRE': raise ValueError('UBRE should be used for models with '\ 'known scale') if objective == 'auto': objective = 'GCV' # if no params, then set up default gridsearch if not bool(param_grids): param_grids['lam'] = np.logspace(-3, 3, 11) # validate params admissible_params = self.get_params() params = [] grids = [] for param, grid in list(param_grids.items()): if param not in (admissible_params): raise ValueError('unknown parameter: {}'.format(param)) if not (isiterable(grid) and (len(grid) > 1)): \ raise ValueError('{} grid must either be iterable of ' 'iterables, or an iterable of lengnth > 1, '\ 'but found {}'.format(param, grid)) # prepare grid if any(isiterable(g) for g in grid): # cast to np.array grid = [np.atleast_1d(g) for g in grid] # set grid to combination of all grids grid = combine(*grid) # save param name and grid params.append(param) grids.append(grid) # build a list of dicts of candidate model params param_grid_list = [] for candidate in combine(*grids): param_grid_list.append(dict(zip(params,candidate))) # set up data collection best_model = None # keep the best model best_score = np.inf scores = [] models = [] # check if our model has been fitted already and store it if self._is_fitted: models.append(self) scores.append(self.statistics_[objective]) # our model is currently the best best_model = models[-1] best_score = scores[-1] # loop through candidate model params pbar = ProgressBar() for param_grid in pbar(param_grid_list): # define new model gam = deepcopy(self) gam.set_params(self.get_params()) gam.set_params(**param_grid) # warm start with parameters from previous build if models: coef = models[-1].coef_ gam.set_params(coef_=coef, force=True) try: # try fitting gam.fit(X, y) except ValueError as error: msg = str(error) + '\non model:\n' + str(gam) msg += '\nskipping...\n' warnings.warn(msg) continue # record results models.append(gam) scores.append(gam.statistics_[objective]) # track best if scores[-1] < best_score: best_model = models[-1] best_score = scores[-1] # problems if len(models) == 0: msg = 'No models were fitted.' warnings.warn(msg) return self # copy over the best if keep_best: self.set_params(deep=True, force=True, **best_model.get_params(deep=True)) if return_scores: return OrderedDict(zip(models, scores)) else: return self class LinearGAM(GAM): """ Linear GAM model """ def __init__(self, lam=0.6, max_iter=100, n_splines=25, spline_order=3, penalties='auto', dtype='auto', tol=1e-4, scale=None, callbacks=['deviance', 'diffs'], fit_intercept=True, fit_linear=False, fit_splines=True, constraints=None): self.scale = scale super(LinearGAM, self).__init__(distribution=NormalDist(scale=self.scale), link='identity', lam=lam, dtype=dtype, max_iter=max_iter, n_splines=n_splines, spline_order=spline_order, penalties=penalties, tol=tol, callbacks=callbacks, fit_intercept=fit_intercept, fit_linear=fit_linear, fit_splines=fit_splines, constraints=constraints) self._exclude += ['distribution', 'link'] def _validate_params(self): """ method to sanitize model parameters Parameters --------- None Returns ------- None """ self.distribution = NormalDist(scale=self.scale) super(LinearGAM, self)._validate_params() class LogisticGAM(GAM): """ Logistic GAM model """ def __init__(self, lam=0.6, max_iter=100, n_splines=25, spline_order=3, penalties='auto', dtype='auto', tol=1e-4, callbacks=['deviance', 'diffs', 'accuracy'], fit_intercept=True, fit_linear=False, fit_splines=True, constraints=None): # call super super(LogisticGAM, self).__init__(distribution='binomial', link='logit', lam=lam, dtype=dtype, max_iter=max_iter, n_splines=n_splines, spline_order=spline_order, penalties=penalties, tol=tol, callbacks=callbacks, fit_intercept=fit_intercept, fit_linear=fit_linear, fit_splines=fit_splines, constraints=constraints) # ignore any variables self._exclude += ['distribution', 'link'] def accuracy(self, X=None, y=None, mu=None): """ computes the accuracy of the LogisticGAM Parameters ---------- note: X or mu must be defined. defaults to mu X : array-like of shape (n_samples, m_features), default: None containing input data y : array-like of shape (n,) containing target data mu : array-like of shape (n_samples,), default: None expected value of the targets given the model and inputs Returns ------- float in [0, 1] """ if not self._is_fitted: raise AttributeError('GAM has not been fitted. Call fit first.') y = check_y(y, self.link, self.distribution) if X is not None: X = check_X(X, n_feats=len(self._n_coeffs) - self._fit_intercept) if mu is None: mu = self.predict_mu(X) check_X_y(mu, y) return ((mu > 0.5).astype(int) == y).mean() def predict(self, X): """ preduct binary targets given model and input X Parameters --------- X : array-like of shape (n_samples, m_features), default: None containing the input dataset Returns ------- y : np.array of shape (n_samples,) containing binary targets under the model """ return self.predict_mu(X) > 0.5 def predict_proba(self, X): """ preduct targets given model and input X Parameters --------- X : array-like of shape (n_samples, m_features), default: None containing the input dataset Returns ------- y : np.array of shape (n_samples,) containing expected values under the model """ return self.predict_mu(X) class PoissonGAM(GAM): """ Poisson GAM model """ def __init__(self, lam=0.6, max_iter=100, n_splines=25, spline_order=3, penalties='auto', dtype='auto', tol=1e-4, callbacks=['deviance', 'diffs', 'accuracy'], fit_intercept=True, fit_linear=False, fit_splines=True, constraints=None): # call super super(PoissonGAM, self).__init__(distribution='poisson', link='log', lam=lam, dtype=dtype, max_iter=max_iter, n_splines=n_splines, spline_order=spline_order, penalties=penalties, tol=tol, callbacks=callbacks, fit_intercept=fit_intercept, fit_linear=fit_linear, fit_splines=fit_splines, constraints=constraints) # ignore any variables self._exclude += ['distribution', 'link'] class GammaGAM(GAM): """ Gamma GAM model """ def __init__(self, lam=0.6, max_iter=100, n_splines=25, spline_order=3, penalties='auto', dtype='auto', tol=1e-4, scale=None, callbacks=['deviance', 'diffs'], fit_intercept=True, fit_linear=False, fit_splines=True, constraints=None): self.scale = scale super(GammaGAM, self).__init__(distribution=GammaDist(scale=self.scale), link='inverse', lam=lam, dtype=dtype, max_iter=max_iter, n_splines=n_splines, spline_order=spline_order, penalties=penalties, tol=tol, callbacks=callbacks, fit_intercept=fit_intercept, fit_linear=fit_linear, fit_splines=fit_splines, constraints=constraints) self._exclude += ['distribution', 'link'] def _validate_params(self): """ method to sanitize model parameters Parameters --------- None Returns ------- None """ self.distribution = GammaDist(scale=self.scale) super(GammaGAM, self)._validate_params() class InvGaussGAM(GAM): """ Inverse Gaussian GAM model """ def __init__(self, lam=0.6, max_iter=100, n_splines=25, spline_order=3, penalties='auto', dtype='auto', tol=1e-4, scale=None, callbacks=['deviance', 'diffs'], fit_intercept=True, fit_linear=False, fit_splines=True, constraints=None): self.scale = scale super(InvGaussGAM, self).__init__(distribution=InvGaussDist(scale=self.scale), link='inv_squared', lam=lam, dtype=dtype, max_iter=max_iter, n_splines=n_splines, spline_order=spline_order, penalties=penalties, tol=tol, callbacks=callbacks, fit_intercept=fit_intercept, fit_linear=fit_linear, fit_splines=fit_splines, constraints=constraints) self._exclude += ['distribution', 'link'] def _validate_params(self): """ method to sanitize model parameters Parameters --------- None Returns ------- None """ self.distribution = InvGaussDist(scale=self.scale) super(InvGaussGAM, self)._validate_params() PKFJ(UKUKpygam/utils.py""" Pygam utilities """ from __future__ import division from copy import deepcopy import warnings import scipy as sp from scipy import sparse import numpy as np from numpy.linalg import LinAlgError try: from sksparse.cholmod import cholesky as spcholesky from sksparse.test_cholmod import CholmodNotPositiveDefiniteError SKSPIMPORT = True except: SKSPIMPORT = False class NotPositiveDefiniteError(ValueError): """Exception class to raise if a matrix is not positive definite """ def cholesky(A, sparse=True): """ Choose the best possible cholesky factorizor. if possible, import the Scikit-Sparse sparse Cholesky method. Permutes the output L to ensure A = L . L.H otherwise defaults to numpy's non-sparse version Parameters ---------- A : array-like array to decompose sparse : boolean, default: True whether to return a sparse array """ if False: A = sp.sparse.csc_matrix(A) F = spcholesky(A) # permutation matrix P P = sp.sparse.lil_matrix(A.shape) p = F.P() P[np.arange(len(p)), p] = 1 # permute try: L = F.L() L = P.T.dot(L) except CholmodNotPositiveDefiniteError as e: raise NotPositiveDefiniteError('Matrix is not positive definite') if sparse: return L return L.todense() else: msg = 'Could not import Scikit-Sparse or Suite-Sparse.\n'\ 'This will slow down optimization for models with '\ 'monotonicity/convexity penalties and many splines.\n'\ 'See installation instructions for installing '\ 'Scikit-Sparse and Suite-Sparse via Conda.' warnings.warn(msg) if sp.sparse.issparse(A): A = A.todense() try: L = np.linalg.cholesky(A) except LinAlgError as e: raise NotPositiveDefiniteError('Matrix is not positive definite') if sparse: return sp.sparse.csc_matrix(L) return L def generate_X_grid(gam, n=500): """ tool to create a nice grid of X data if no X data is supplied array is sorted by feature and uniformly spaced, so the marginal and joint distributions are likely wrong Parameters ---------- gam : GAM instance n : int, default: 500 number of data points to create Returns ------- np.array of shape (n, n_features) """ X = [] for ek in gam._edge_knots: X.append(np.linspace(ek[0], ek[-1], num=n)) return np.vstack(X).T def check_dtype(X, ratio=.95): """ tool to identify the data-types of the features in data matrix X. checks for float and int data-types. Parameters ---------- X : array of shape (n_samples, n_features) ratio : float in [0, 1], default: 0.95 minimum ratio of unique values to samples before a feature is considered categorical. Returns ------- dtypes : list of types of length n_features """ if X.ndim == 1: X = X[:,None] dtypes = [] for feat in X.T: dtype = feat.dtype.type if not issubclass(dtype, (np.int, np.float)): raise ValueError('data must be type int or float, '\ 'but found type: {}'.format(dtype)) # if issubclass(dtype, np.int) or \ # (len(np.unique(feat))/len(feat) < ratio): if (len(np.unique(feat))/len(feat) < ratio) and \ ((np.min(feat)) == 0) and (np.max(feat) == len(np.unique(feat)) - 1): dtypes.append('categorical') continue dtypes.append('numerical') return dtypes def check_y(y, link, dist, min_samples=1): """ tool to ensure that the targets: - are in the domain of the link function - are numerical - have at least min_samples Parameters ---------- y : array-like link : Link object dist : Distribution object min_samples : int, default: 1 Returns ------- y : array containing validated y-data """ y = np.ravel(y) if y.dtype.kind not in['f', 'i']: try: y = y.astype('float') except ValueError as e: raise ValueError("Targets must be type int or float, "\ "but found {}".format(y)) warnings.filterwarnings('ignore', 'divide by zero encountered in log') if np.any(np.isnan(link.link(y, dist))): raise ValueError('y data is not in domain of {} link function. ' \ 'Expected domain: {}, but found {}' \ .format(link, get_link_domain(link, dist), [float('%.2f'%np.min(y)), float('%.2f'%np.max(y))])) warnings.resetwarnings() if len(y) < min_samples: raise ValueError('targets should have at least {} samples, '\ 'but found {}'.format(min_samples, len(y))) return y def make_2d(array): """ tiny tool to expand 1D arrays the way i want Parameters ---------- array : array-like Returns ------- np.array of with ndim = 2 """ array = np.asarray(array) if array.ndim < 2: msg = 'Expected 2D input data array, but found {}D. '\ 'Expanding to 2D.'.format(array.ndim) warnings.warn(msg) array = np.atleast_1d(array)[:,None] return array def check_X(X, n_feats=None, min_samples=1): """ tool to ensure that X: - is 2 dimensional - contains float-compatible data-types - has at least min_samples - has n_feats Parameters ---------- X : array-like n_feats : int. default: None represents number of features that X should have. not enforced if n_feats is None. min_samples : int, default: 1 Returns ------- X : array with ndims == 2 containing validated X-data """ X = make_2d(X) if X.ndim > 2: raise ValueError('X must be a matrix or vector. '\ 'found shape {}'.format(X.shape)) n, m = X.shape if n_feats is not None: if m != n_feats: raise ValueError('X data must have {} features, '\ 'but found {}'.format(n_feats, m)) dtype = X.dtype if dtype.kind not in ['i', 'f']: try: X = X.astype('float') except ValueError as e: raise ValueError('X data must be type int or float, '\ 'but found type: {}\n'\ 'Try transforming data with a LabelEncoder first.'\ .format(dtype.type)) if n < min_samples: raise ValueError('X data should have at least {} samples, '\ 'but found {}'.format(min_samples, n)) return X def check_X_y(X, y): """ tool to ensure input and output data have the same number of samples Parameters ---------- X : array-like y : array-like Returns ------- None """ if len(X) != len(y): raise ValueError('Inconsistent input and output data shapes. '\ 'found X: {} and y: {}'.format(X.shape, y.shape)) def check_param(param, param_name, dtype, iterable=True, constraint=None): """ checks the dtype of a parameter, and whether it satisfies a numerical contraint Parameters --------- param : object param_name : str, name of the parameter dtype : str, desired dtype of the parameter iterable : bool, default: True whether to allow iterable param contraint : str, default: None numerical constraint of the parameter. if None, no constraint is enforced Returns ------- list of validated and converted parameter(s) """ msg = [] msg.append(param_name + " must be "+ dtype) if iterable: msg.append(" or iterable of " + dtype + "s") msg.append(", but found " + param_name + " = {}".format(repr(param))) if constraint is not None: msg = (" " + constraint).join(msg) else: msg = ''.join(msg) # check param is numerical try: param_dt = np.array(param).astype(dtype) except ValueError: raise ValueError(msg) # check iterable if (not iterable) and (param_dt.size != 1): raise ValueError(msg) # check param is correct dtype if not (param_dt == np.array(param).astype(float)).all(): raise ValueError(msg) # check constraint if constraint is not None: if not (eval('np.' + repr(param_dt) + constraint)).all(): raise ValueError(msg) return param_dt.tolist() def get_link_domain(link, dist): """ tool to identify the domain of a given monotonic link function Parameters ---------- link : Link object dist : Distribution object Returns ------- domain : list of length 2, representing the interval of the domain. """ domain = np.array([-np.inf, -1, 0, 1, np.inf]) domain = domain[~np.isnan(link.link(domain, dist))] return [domain[0], domain[-1]] def round_to_n_decimal_places(array, n=3): """ tool to keep round a float to n decimal places. n=3 by default Parameters ---------- array : np.array n : int. number of decimal places to keep Returns ------- array : rounded np.array """ # check if in scientific notation if issubclass(array.__class__, float) and '%.e'%array == str(array): return array # do nothing shape = np.shape(array) out = ((np.atleast_1d(array) * 10**n).round().astype('int') / (10.**n)) return out.reshape(shape) def print_data(data_dict, width=-5, keep_decimals=3, fill=' ', title=None): """ tool to print a dictionary with a nice formatting Parameters: ----------- data_dict: dict. Dictionary to be printed. width: int. Desired total line width. A negative value will fill to minimum required width + neg(width) default: -5 keep_decimals: int. number of decimal places to keep: default: 3 fill: string. the character to fill between keys and values. Must have length 1. default: ' ' title: string. default: None Returns ------- None """ # find max length keys = np.array(list(data_dict.keys()), dtype='str') values = np.array(list(data_dict.values())) values = round_to_n_decimal_places(values).astype('str') M = max([len(k + v) for k, v in zip(keys, values)]) if width < 0: # this is for a dynamic filling. # fill to minimum required width + neg(width) width = M - width if M >= width: raise ValueError('desired width is {}, '\ 'but max data length is {}'.format(width, M)) fill = str(fill) assert len(fill) == 1, 'fill must contain exactly one symbol' if title is not None: print(title) print('-' * width) for k, v in zip(keys, values): nk = len(k) nv = len(v) filler = fill*(width - nk - nv) print(k + filler + v) def gen_edge_knots(data, dtype): """ generate uniform knots from data including the edges of the data for discrete data, assumes k categories in [0, k-1] interval Parameters ---------- data : array-like with one dimension dtype : str in {'categorical', 'numerical'} Returns ------- np.array containing ordered knots """ if dtype not in ['categorical', 'numerical']: raise ValueError('unsupported dtype: {}'.format(dtype)) if dtype == 'categorical': return np.r_[np.min(data) - 0.5, np.unique(data) + 0.5] else: return np.r_[np.min(data), np.max(data)] def b_spline_basis(x, edge_knots, n_splines=20, spline_order=3, sparse=True, clamped=False): """ tool to generate b-spline basis using vectorized De Boor recursion the basis functions extrapolate linearly past the end-knots. Parameters ---------- x : array-like, with ndims == 1. edge_knots : array-like contaning locations of the 2 edge knots. n_splines : int. number of splines to generate. must be >= spline_order+1 default: 20 spline_order : int. order of spline basis to create default: 3 sparse : boolean. whether to return a sparse basis matrix or not. default: True clamped : boolean, default: False whether to force repeated knots at the ends of the domain. NOTE: when Flase this results in interpretable basis functions where creating a linearly incrasing function ammounts to assigning linearly increasing coefficients. when clamped, this is no longer true and constraints that depend on this property, like monotonicity and convexity are no longer valid. Returns ------- basis : sparse csc matrix or array containing b-spline basis functions with shape (len(x), n_splines) """ if np.ravel(x).ndim != 1: raise ValueError('data must be 1-D, but found {}'\ .format(np.ravel(x).ndim)) if (n_splines < 1) or (type(n_splines) is not int): raise ValueError('n_splines must be int >= 1') if (spline_order < 0) or (type(spline_order) is not int): raise ValueError('spline_order must be int >= 1') if n_splines < spline_order + 1: raise ValueError('n_splines must be >= spline_order + 1. '\ 'found: n_splines = {} and spline_order = {}'\ .format(n_splines, spline_order)) if n_splines == 0: warnings.warn('requested 1 spline. this is equivalent to '\ 'fitting an intercept', stacklevel=2) # rescale edge_knots to [0,1], and generate boundary knots edge_knots = np.sort(deepcopy(edge_knots)) offset = edge_knots[0] scale = edge_knots[-1] - edge_knots[0] boundary_knots = np.linspace(0, 1, 1 + n_splines - spline_order) diff = np.diff(boundary_knots[:2])[0] # rescale x as well x = (np.ravel(deepcopy(x)) - offset) / scale # append 0 and 1 in order to get derivatives for extrapolation x = np.r_[x, 0., 1.] # determine extrapolation indices x_extrapolte_l = (x < 0) x_extrapolte_r = (x > 1) x_interpolate = ~(x_extrapolte_r + x_extrapolte_l) # formatting x = np.atleast_2d(x).T n = len(x) # augment knots if clamped: aug_knots = np.r_[np.zeros(spline_order), boundary_knots, np.ones(spline_order)] else: aug = np.arange(1, spline_order + 1) * diff aug_knots = np.r_[-aug[::-1], boundary_knots, 1 + aug] aug_knots[-1] += 1e-9 # want last knot inclusive # prepare Haar Basis bases = (x >= aug_knots[:-1]).astype(np.int) * \ (x < aug_knots[1:]).astype(np.int) bases[-1] = bases[-2][::-1] # force symmetric bases at 0 and 1 # do recursion from Hastie et al. vectorized maxi = len(aug_knots) - 1 for m in range(2, spline_order + 2): maxi -= 1 # bookkeeping to avoid div by 0 mask_l = aug_knots[m - 1 : maxi + m - 1] != aug_knots[:maxi] mask_r = aug_knots[m : maxi + m] != aug_knots[1 : maxi + 1] # left sub-basis num = (x - aug_knots[:maxi][mask_l]) * bases[:, :maxi][:, mask_l] denom = aug_knots[m-1 : maxi+m-1][mask_l] - aug_knots[:maxi][mask_l] left = np.zeros((n, maxi)) left[:, mask_l] = num/denom # right sub-basis num = (aug_knots[m : maxi+m][mask_r]-x) * bases[:, 1:maxi+1][:, mask_r] denom = aug_knots[m:maxi+m][mask_r] - aug_knots[1 : maxi+1][mask_r] right = np.zeros((n, maxi)) right[:, mask_r] = num/denom # track previous bases and update prev_bases = bases[-2:] bases = left + right # extrapolate # since we have repeated end-knots, only the last 2 basis functions are # non-zero at the end-knots, and they have equal and opposite gradient. if (any(x_extrapolte_r) or any(x_extrapolte_l)) and spline_order>0: bases[~x_interpolate] = 0. if not clamped: denom = (aug_knots[spline_order:-1] - aug_knots[: -spline_order - 1]) left = prev_bases[:, :-1] / denom denom = (aug_knots[spline_order+1:] - aug_knots[1: -spline_order]) right = prev_bases[:, 1:] / denom grads = (spline_order) * (left - right) if any(x_extrapolte_l): val = grads[0] * x[x_extrapolte_l] + bases[-2] bases[x_extrapolte_l] = val if any(x_extrapolte_r): val = grads[1] * (x[x_extrapolte_r] - 1) + bases[-1] bases[x_extrapolte_r] = val else: grad = -spline_order/diff if any(x_extrapolte_l): bases[x_extrapolte_l, :1] = grad * x[x_extrapolte_l] + 1 bases[x_extrapolte_l, 1:2] = -grad * x[x_extrapolte_l] if any(x_extrapolte_r): bases[x_extrapolte_r, -1:] = -grad * (x[x_extrapolte_r] - 1) + 1 bases[x_extrapolte_r, -2:-1] = grad * (x[x_extrapolte_r] - 1) # get rid of the added values at 0, and 1 bases = bases[:-2] if sparse: return sp.sparse.csc_matrix(bases) return bases def ylogydu(y, u): """ tool to give desired output for the limit as y -> 0, which is 0 Parameters ---------- y : array-like of len(n) u : array-like of len(n) Returns ------- np.array len(n) """ mask = (np.atleast_1d(y)!=0.) out = np.zeros_like(u) out[mask] = y[mask] * np.log(y[mask] / u[mask]) return out def combine(*args): """ tool to perform tree search via recursion useful for developing the grid in a grid search Parameters ---------- args : list of lists Returns ------- list of all the combinations of the elements in the input lists """ if hasattr(args, '__iter__') and (len(args) > 1): subtree = combine(*args[:-1]) tree = [] for leaf in subtree: for node in args[-1]: if hasattr(leaf, '__iter__'): tree.append(leaf + [node]) else: tree.append([leaf] + [node]) return tree else: return [[arg] for arg in args[0]] def isiterable(obj, reject_string=True): """ convenience tool to detect if something is iterable. in python3, strings count as iterables to we have the option to exclude them Parameters: ----------- obj : object to analyse reject_string : bool, whether to ignore strings Returns: -------- bool, if the object is itereable. """ iterable = hasattr(obj, '__iter__') if reject_string: iterable *= not isinstance(obj, str) return iterable PKYJA5pygam/.cache/v/cache/lastfailed{ "tests/test_GAM_methods.py::test_LinearGAM_pdeps_shape": true, "tests/test_GAM_methods.py::test_LinearGAM_prediction": true, "tests/test_GAM_methods.py::test_LogisticGAM_accuracy": true, "tests/test_GAM_methods.py::test_conf_intervals_ordered": true, "tests/test_GAM_methods.py::test_conf_intervals_quantiles_width_interchangable": true, "tests/test_GAM_methods.py::test_conf_intervals_return_array": true, "tests/test_GAM_methods.py::test_deviance_residuals": true, "tests/test_GAM_methods.py::test_is_fitted_conf_intervals": true, "tests/test_GAM_methods.py::test_is_fitted_dev_resid": true, "tests/test_GAM_methods.py::test_is_fitted_pdep": true, "tests/test_GAM_methods.py::test_is_fitted_predict": true, "tests/test_GAM_methods.py::test_is_fitted_predict_mu": true, "tests/test_GAM_methods.py::test_is_fitted_summary": true, "tests/test_GAM_methods.py::test_more_splines_than_samples": true, "tests/test_GAM_methods.py::test_partial_dependence_feature_doesnt_exist": true, "tests/test_GAM_methods.py::test_partial_dependence_on_univar_data": true, "tests/test_GAM_methods.py::test_partial_dependence_on_univar_data2": true, "tests/test_GAM_methods.py::test_summary": true, "tests/test_GAM_methods.py::test_summary_returns_12_lines": true }PKgJ /pygam/.ipynb_checkpoints/pyGAM-checkpoint.ipynb{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Examples" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from pygam import GAM\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(-5,5,5000)[:,None]\n", "obs = -.5*x**2 + 5 + 3*np.random.randn(len(x),1)\n", "plt.plot(x, obs)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "GAM(lam=0.6, n_iter=100, n_knots=20, spline_order=1, \n", " callbacks=[Deviance(), Diffs()], link=IdentityLink(), tol=1e-05, \n", " penalty_matrix='auto', distribution=NormalDist(scale=9.083))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gam = GAM(spline_order=1)\n", "gam.fit(x, obs)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model Statistics\n", "------------------\n", "edof 20.9\n", "AIC 25244.084\n", "AICc 25244.285\n", "GCV 1.085\n", "\n", "Pseudo-R^2\n", "----------------------\n", "mcfadden 0.23\n", "mcfadden_adj 0.228\n", "cox_snell 0.778\n", "nagelkerke 0.779\n" ] } ], "source": [ "gam.summary()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nYsBAREREjv4fiSR8jYvDzFQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, obs)\n", "plt.plot(x, gam.predict(x))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.96540000000000004" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a, b = (gam.prediction_intervals(x, width=.95).T)\n", "((obs.ravel() > a) * (obs.ravel() < b)).mean()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nfubWzjH9GXEAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, obs)\n", "plt.plot(x, gam.prediction_intervals(x), color='g')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, obs)\n", "plt.plot(x, gam.confidence_intervals(x), color='g')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "OrderedDict([('mcfadden', 0.22847009061362966),\n", " ('mcfadden_adj', 0.22719884978976412),\n", " ('cox_snell', 0.77742061373698634),\n", " ('nagelkerke', 0.77850514449969777)])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gam._statistics['pseudo_r2']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical Meth" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(-5,5,5000)[:,None]\n", "\n", "log_odds = -5*x**2 + 5# quadratic\n", "# log_odds = 10*x# -5.77104596# linear\n", "p = 1/(1+np.exp(-log_odds)).squeeze()\n", "\n", "obs = (np.random.rand(len(x)) < p).astype(np.int)\n", "# obs[len(x)/2:] = obs[:len(x)/2][::-1]\n", "\n", "plt.plot(x, p)\n", "plt.scatter(x, obs)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pygam import LogisticGAM" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "links.py:46: RuntimeWarning: divide by zero encountered in divide\n", " return np.log(mu / (dist.levels - mu))\n", "links.py:46: RuntimeWarning: divide by zero encountered in log\n", " return np.log(mu / (dist.levels - mu))\n" ] }, { "data": { "text/plain": [ "LogisticGAM(lam=1, n_iter=50, n_knots=50, spline_order=1, \n", " callbacks=[Deviance(), Diffs(), Accuracy()], tol=1e-05, \n", " penalty_matrix='auto')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lgam = LogisticGAM(lam=1, n_iter=50, n_knots=50, tol=1e-5, spline_order=1, penalty_matrix='auto')\n", "lgam.fit(x, obs)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plt.plot(p)\n", "plt.scatter(x, obs)\n", "plt.plot(x, lgam.predict_proba(x))\n", "plt.plot(x, p)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.logs['deviance'])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.logs['diffs'])" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nqtv/D9sj6cmwTArRAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.logs['accuracy'])" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nEgAAoGT/H57tZ73pwnBUAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.predict_proba(x))\n", "plt.plot(lgam.confidence_intervals(x, .99), color='g')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\noWMP1bS9psW2+dSIT6W2+NM5pw83xqeaNnZu1OIPF8em0jZ3bdYbq9+IDWydc1r+0XJ1dhU/0ZKk\nD974IL7TnlUyIzFD0hzn3FxJMrOLJZ0q6UJJMwu0/7ak/3DO3ZT9+UozmyrpUknfinujR956RAM7\nC1fUr9u8rlc5aV+GDxpe8g9l5OCRGtE8QhnLyGTRf822/pz//z0fy/+5ubFZzY2fTLf2PPA61+Pn\nmMdLPffjzo+1dtNaSdLzy5/XGb88Y7vfa9WGVXp33buxv/uydct6lW82mU7b57Sij58w4QQdPe5o\nff+Y75d8rSTZ2Llx6/I91I8hA4aos7tTnV2dampo6u/u9NrN027WzdNujm1z98t3658X/rPWd6wv\n2ua55c/p7lfu1v969H+VfM+42b+1b67Vvj/bd7tLfxc6qei5j+rPdus71mvlxyu3296zTW4FmA+l\njjPDBg7TTs07xbbZ8Bd//emNsgIJM2uSNFnStbltzjlnZg9LOrLI045UNIORb56k00u9372t92rS\npEnldHEbGzo3aGn70tg27ZvatWTtkpKvs2TNktgDZWd3p95d9646uzrl5NTtuuVc9N/cv9zPPR/v\n+fOGzg1b7wORr+eMSKEz9nLbZCyjMUPGRBXs6i4YfI1oHqHDdzlcOwzYoejvL0mTdp6k8cPHx7bZ\nY/ge2rF5x9g2tWjTlk3b1T+g9g1pGiJJuuDeC2IDifEt43Xl8VfW1KzlWfufpbP2j5+N6Ojq0Msf\nvFzwIJuzdtNaPf/e87FnyXPvmau/2u2vCrYpNGa92beFaGcy7TZst5JXvx0/fLyGDhga22b3lt21\n0+D4AGDU4FFe9iMLFy7U5GsnV/06vVXujMRISQ2SeoZoKyVNLPKcsUXaF85ZRAZJ0t2P363nlxct\nvdhG3HR5zJN6bVftWvJ99mjaQyqwr4n7Iyymkt+nojHI807DO/rckM8VfnBz9C/ud1m2bpmWaVls\nv55U8WVt2zwn0Jh1dHWUvLfByx+8XHLqcs1ba7RqzCotHFx8KrmQ9vZ2LVxY3nNQnXLGfNC6QTrc\nDtefF/25aJv1Het16+pb9ceFf4yt2WlubNbEkRMLrtwplsYrFpgUTfsV3ezn9Yu1zyijgdp+9jj3\nOo0djTq46+DCr5/3Zxvbn0J/3oWau172P/9949qvK/jQNtauWau1Wlv8dWRaruXx/enRvsgDvWq/\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.prediction_intervals(x, .95), color='g')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# GCV Loop" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "utils.py:134: RuntimeWarning: divide by zero encountered in divide\n", " left = ((x - aug_knots[:maxi]) / (aug_knots[m-1:maxi+m-1] - aug_knots[:maxi])) * bases[:,:maxi]\n", "utils.py:134: RuntimeWarning: invalid value encountered in divide\n", " left = ((x - aug_knots[:maxi]) / (aug_knots[m-1:maxi+m-1] - aug_knots[:maxi])) * bases[:,:maxi]\n", "utils.py:134: RuntimeWarning: invalid value encountered in multiply\n", " left = ((x - aug_knots[:maxi]) / (aug_knots[m-1:maxi+m-1] - aug_knots[:maxi])) * bases[:,:maxi]\n", "utils.py:137: RuntimeWarning: divide by zero encountered in divide\n", " right = ((aug_knots[m:maxi+m]-x) / (aug_knots[m:maxi+m] - aug_knots[1:maxi+1])) * bases[:,1:maxi+1]\n", "utils.py:137: RuntimeWarning: invalid value encountered in divide\n", " right = ((aug_knots[m:maxi+m]-x) / (aug_knots[m:maxi+m] - aug_knots[1:maxi+1])) * bases[:,1:maxi+1]\n", "utils.py:137: RuntimeWarning: invalid value encountered in multiply\n", " right = ((aug_knots[m:maxi+m]-x) / (aug_knots[m:maxi+m] - aug_knots[1:maxi+1])) * bases[:,1:maxi+1]\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "scores = []\n", "lams = np.logspace(-2,1, 21)\n", "for lam in lams:\n", " lgam = LogisticGAM(lam=lam, n_knots=25)\n", " lgam.fit(x, obs)\n", " scores.append(lgam._statistics['UBRE'])\n", "\n", "plt.plot(lams, scores)\n", "best = np.argmin(scores)\n", "plt.scatter(lams[best], scores[best], facecolor='None')\n", "plt.title('Best Lam: {}'.format(lams[best]))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "LogisticGAM(lam=1.259, n_iter=100, n_knots=20, spline_order=4, \n", " callbacks=[Deviance(), Diffs(), Accuracy()], tol=1e-05, \n", " penalty_matrix='auto')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lgam = LogisticGAM(lam=lams[best])\n", "lgam.fit(x, obs)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "6.783812081178338" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lgam._statistics['edof']" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, lgam.confidence_intervals(x, width=0.95), '--', c='b')\n", "plt.plot(x, lgam.predict_proba(x))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nbvHev1nojhQr59wo7IjuWwvdlxRp63Cztg4rE/5VTfkl8KL2YWmbc+5rwF7ApYXuSxEZgVVTPgSO\nxE/r1pgAAAKcSURBVF67bnbOnR76AAUJBM65axsnibT2Vd848Sbq30+89w83vsGdhSXsrxai74US\n+jNzzn0b2Bb43+jSAna74GL8rjW/ZjDwBPCA9/63hel5UXFonkqIW7D5KV8rdEfSzDm3PRacTvfe\nbyp0f4pIB2Cq9/5y7/107/1vgNuxkBAkydbFufBz7FNsW2bTOFwA/OssR+/9RufcbGBonvqWViE/\nsznAocD+wAa3+Xmhbzjnfu+9PytP/Uur0N81wGbpAs9in+LOz2fHilCSw80EcM79CvgicLD3fmGh\n+5Ny44C+wFTX9CJWAXzOOXcx0NmnefJb4Syk2Xtlo/eBE0MfoCCBwHu/DFiWqV3jeQkbgDHAy433\nVWKnOH2axy6mToyf2X8AP2p21yDsxKuTsbMnykrozw3+VRl4FngdODuf/SpG3vtNjf8mDwcegX+V\nwQ8Hbi5k39KsMQwcD3zeez+30P0pAs9gK8qauxt7c7tOYaBVL2Hvlc2NIcZ7ZaEqBEG896ucc7cC\nP3bOzcO+se9h5ck/FrRzKeW9n9f87865NVhJd7b3fkFhepV+zrmBwHPYqpbvAf2iDyfee336bdLm\n4WayOefcLdiBbscBaxon/ALUeu91tHsLvPdrsJVR/9L4OrbMe7/lJ2BpciPwknPuUuBBbKnrOcQ4\nSDDVgaDRd4FN2F4E2wCvAod572sL2qviokSd2ZHYpJwR2DI6aBobryhUp9Im4HAz2dwF2O/Qc1vc\nfxb2miZh9BqWgff+DefcvwPXYcs05wDf8d7fH/oYqd6HQERERNpH2pcdioiISDtQIBAREREFAhER\nEVEgEBERERQIREREBAUCERERQYFAREREUCAQERERFAhEREQEBQIRERFBgUBERESA/w9wsIOV1LH0\nIAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, lgam.prediction_intervals(x, width=0.95), '--', c='b')\n", "plt.plot(x, lgam.predict_proba(x))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.fill_between(x.squeeze(), *lgam.prediction_intervals(x, width=0.95).T, alpha=0.25)\n", "plt.plot(x, lgam.predict_proba(x))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, lgam.predict_proba(x))\n", "plt.scatter(x, obs)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAFkCAYAAAC0KZhSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XeYXVW9//H3SoNAYugJAQlNQjPgHBRQmhS5KCBIm0HF\ngh3LDSiKoiB4xQtSRER+ohesoyCgoECGakRKmBlAkFATCBgSWkggBEhZvz/WjJkJqTNnn3XK+/U8\n+5nMzpm9vxxO5nzO2t+9VogxIkmS1G1A7gIkSVJ1MRxIkqReDAeSJKkXw4EkSerFcCBJknoxHEiS\npF4MB5IkqRfDgSRJ6sVwIEmSejEcSJKkXvocDkIIu4cQrg4h/DuEsCiEcPBSHnNaCGF6COHVEMIN\nIYQt+1euJEkqWn9GDtYE7gWOA960QEMI4evAF4HPAu8C5gITQghD+nFOSZJUsFCOhZdCCIuAQ2KM\nV/fYNx04K8Z4btf3bwFmAh+LMV7W75NKkqRCFNJzEELYDBgF3NS9L8Y4B7gL2LWIc0qSpPIYVNBx\nR5EuNcxcYv/Mrr9bqhDCusD+wBPAawXVJklSPVod2BSYEGN8oT8HKiocLEtgKf0JPewP/LZCtUiS\nVI8+DPyuPwcoKhzMIAWBkfQePdgAuGc5P/cEwG9+8xu22WabgkrTksaPH8+5556bu4yG4nNeeT7n\nledzXlmTJ0/mIx/5CHS9l/ZHIeEgxjg1hDAD2Af4J/ynIXFn4CfL+dHXALbZZhuampqKKE1LMWLE\nCJ/vCvM5rzyf88rzOc+m35fl+xwOQghrAluSRggANg8h7AC8GGN8CjgPODmE8BgpxZwOPA38uV8V\nS5KkQvVn5GAn4BZSD0EEzu7a/0vgkzHGM0MIawD/D1gL+DtwQIzxjX6cU5IkFazP4SDG+DdWcCtk\njPFU4NS+nkOSJFWeayuIlpaW3CU0HJ/zyvM5rzyf89pVlhkSyyWE0AR0dHR02MQiSdIq6OzspFQq\nAZRijJ39OZYjB5IkqRfDgSRJ6sVwIEmSejEcSCqb116D226DF/o1q7uk3Cq9toKkOjJ/PrS3w803\np+0f/4DXX4eDD4Y/O92ZVLMMB5JW2sKFcN99KQjccgtMnAivvALDh8Oee8IZZ8C8efCtb0FnJ3jT\nkVSbDAeSlilGmDx58cjArbfCrFkwdCjstht885uw995QKsGgrt8mCxbApZfCqafC1VdnLF5SnxkO\nJP1HjDBlyuIwcMstMHMmDB4Mu+wCX/5yCgM77wyrrbb0YwwaBN/+NhxzDHR0pOAgqbYYDiTxxBPw\n3e+mQDBtGgwYADvtBJ/4BLz3vfCe98Caa6788Vpa4HvfS8d09ECqPYYDqcEtWgRHHw1Tp0JzcxoZ\n2GMPGDGi78fsHj346EcdPZBqkeFAanAXXwx33JH6Cfbcs3zHbW6G00939ECqRc5zIDWwmTPhG9+A\nj3+8vMEAFo8eXHNNut1RUu0wHEgN7PjjYeBAOOusYo7f3AxbbZVGDyTVDsOB1KBuuAF+9zv44Q9h\nvfWKOcegQfCd78Bf/uLogVRLDAdSA3rtNfjCF9KlhI99rNhzOXog1R7DgdSAvv99ePJJuOgiCKHY\ncw0cuHj04O67iz2XpPIwHEgNZvJk+MEP4Otfh623rsw5m5th7FhHD6RaYTiQGkiM8PnPwyabpKmP\nK6V79OCvf3X0QKoFhgOpgfzyl/C3v8FPf5rWR6iko45y9ECqFYYDqUE8/zx89atpNsT99qv8+R09\nkGqH4UBqECeemJZcPuecfDV0jx6cemq+GiStmOFAagATJ8Ill6RGxJEj89XRPXpw7bUwaVK+OiQt\nn+FAqnOvvw6f/Szsuit8+tO5q0mjB1tvbe+BVM0MB1KdO+ssePTRNKfBgCr4F+/ogVT9quBXhaSi\nPPYYfO97cMIJMG5c7moWO/LINHpg74FUnQwHUp2KMU2RPGpU+qReTbpHD667Du66K3c1kpZUaDgI\nIQwIIZweQpgSQng1hPBYCOHkIs8pKfn979PiSj/5Cay5Zu5q3uzII2Gbbew9kKpR0SMH3wA+C3wB\n2Bo4ETgxhPDFgs8rNbSXXoLx4+Gww+ADH8hdzdI5eiBVr6LDwa7An2OM18cYp8UYrwTagHcVfF6p\noZ10Erz6KvzoR7krWb4jjnD0QKpGRYeD24F9QghvAwgh7AC8B7i24PNKDeuOO9KdCd/7Hmy0Ue5q\nlq/n6MGdd+auRlK3osPBD4A/AA+FEN4AOoDzYoy/L/i8UkOaPz/NaVAqwXHH5a5m5Th6IFWfQQUf\n/yjgaKAZeBDYEfhRCGF6jPHXy/qh8ePHM2LEiF77WlpaaGlpKbJWqeaddx78619p7YKBA3NXs3IG\nDoRTTknLOt95J+yyS+6KpOrX2tpKa2trr32zZ88u2/FDjLFsB3vTwUOYBnw/xnhRj33fAj4cY9x2\nKY9vAjo6OjpoamoqrC6pHj35JGy7bZoF8bzzclezahYuTPMwbLJJusQgadV1dnZSKpUASjHGzv4c\nq+jLCmsAS6aPRRU4r9RQYoQvfhHWXhtOPz13Nauuu/fg+uvtPZCqQdFv0tcA3wohvD+EMCaEcCgw\nHriy4PNKDeWqq+Avf4Hzz4fhw3NX0zeHH55GPpw1Ucqv6HDwReCPwE9IPQdnAj8Fqmy+Nql2zZkD\nX/oSHHggHHpo7mr6rrv3YMKEdMeFpHwKDQcxxrkxxuNjjJvFGNeMMb4txnhKjHFBkeeVGsm3v50m\nPbrgAgghdzX90z164J0LUl5e+5dqWEdHCgXf/S6MGZO7mv4bMMDRA6kaGA6kGhUjfO5zsP328JWv\n5K6mfOw9kPIzHEg16vHHob093Z0weHDuasqne/SgrQ1uvz13NVJjMhxINaq9PX1997vz1lGEww+H\n7baz90DKxXAg1aiOjtRnsN56uSspvwED4OST0+jBI4/krkZqPIYDqUa1t8NOO+Wuojj775++TpqU\ntw6pERkOpBq0aFEaOajncLD22rD55um/U1JlGQ6kGvToo/Dyy/UdDiCtLmk4kCrPcCDVoO5mxLTG\nSv0qleCee9JIiaTKMRxINaijIw25r7127kqKVSrBK6/YlChVmuFAqkH13ozYrXtkxEsLUmUZDqQa\ns3AhdHY2RjiwKVHKw3Ag1ZiHH4a5cxsjHIBNiVIOhgOpxnS/UTY15a2jUmxKlCrPcCDVmPZ2eNvb\nYMSI3JVURqmUbtt89NHclUiNw3Ag1ZhGaUbs1j1C4qUFqXIMB1INWbAgDbE3UjhYZx3YbDPDgVRJ\nhgOphkyeDPPmNVY4AJsSpUozHEg1pKMDQoB3vCN3JZVVKqXbN21KlCrDcCDVkPZ2GDsWhg/PXUll\ndTclPvZY7kqkxmA4kGpIozUjdrMpUaosw4FUI+bPh3vvbcxwsO66sOmmhgOpUgwHUo3417/g9dcb\nMxyATYlSJRkOpBrR0QEDBsCOO+auJA+bEqXKMRxINaK9HbbZBtZcM3cleZRKMGcOPP547kqk+mc4\nkGpEozYjdnP5ZqlyDAdSDXj9dbjvvsYOB+uuC2PGGA6kSjAcSDXggQfS3QqNHA7ApkSpUgoPByGE\n0SGEX4cQng8hvBpCuC+E0CCLzUrl0dEBAwfCDjvkriSv7qbEGHNXItW3QsNBCGEt4B/A68D+wDbA\nCcCsIs8r1Zv2dthuOxg6NHcleZVKMHu2TYlS0QYVfPxvANNijJ/qse/Jgs8p1Z1Gb0bs1rMpccst\n89Yi1bOiLyscBLSHEC4LIcwMIXSGED61wp+S9B+vvQb33284AFhvPdhkE/sOpKIVHQ42Bz4PPAy8\nD7gIOD+E8JGCzyvVjX/+ExYsMBx0sylRKl7RlxUGAJNijN/u+v6+EMJ2pMDwm2X90Pjx4xkxYkSv\nfS0tLbS0tBRWqFStOjpg8GAYNy53JdWhVIIf/jA1JYaQuxopj9bWVlpbW3vtmz17dtmOX3Q4eAaY\nvMS+ycCHlvdD5557Lk1N3tAgQeo32H57WG213JVUh1IJXnoJpkyBLbbIXY2Ux9I+MHd2dlLqbszp\np6IvK/wDGLvEvrHYlCitNJsRe3OmRKl4RYeDc4FdQggnhRC2CCEcDXwKuKDg80p14dVX02qMhoPF\n1l8f3vpWw4FUpELDQYyxHTgUaAHuB74FfCXG+PsizyvVi/vug4ULDQdLsilRKlbRPQfEGK8Fri36\nPFI96uiAIUNSz4EWK5XgnHNsSpSK4toKUhVrb093KQwZkruS6lIqwaxZMHVq7kqk+mQ4kKqYzYhL\nZ1OiVCzDgVSl5s6FyZMNB0uzwQaw8caGA6kohgOpSt17LyxaZDhYFpsSpeIYDqQq1d6eJj7adtvc\nlVSn7nDg8s1S+RkOpCrV3g477pimTtabdTclPvFE7kqk+mM4kKqUzYjLZ1OiVBzDgVSFXn4ZHn7Y\ncLA8I0fCRhsZDqQiGA6kKnTPPelauuFg+WxKlIphOJCqUHs7DB0KW2+du5LqZlOiVAzDgVSF2tvh\nHe+AQYVPcF7bSiV48UV40nVepbIyHEhVyGbElWNTolQMw4FUZWbPhkcfNRysjFGjYPRow4FUboYD\nqcp0dqavhoOVY1OiVH6GA6nKtLfDmmvCVlvlrqQ22JQolZ/hQKoy7e3Q1AQDB+aupDaUSvDCCzBt\nWu5KpPphOJCqjM2Iq8amRKn8DAdSFXnxRZgyxXCwKjbcMG2GA6l8DAdSFbEZsW9sSpTKy3AgVZH2\ndhg+HLbcMncltcWmRKm8DAdSFWlvT290A/yXuUpKJXj+eXjqqdyVSPXBX0FSFbEZsW9sSpTKy3Ag\nVYnnn09rBBgOVt3o0Wm2RMOBVB6GA6lKdL+xGQ76xqZEqXwMB1KVaG+HtdaCzTfPXUltsilRKh/D\ngVQlupsRQ8hdSW0qleC55+Dpp3NXItU+w4FUJWxG7B+bEqXyqVg4CCGcFEJYFEI4p1LnlGrFzJnp\nE6/hoO9Gj4aRIw0HUjlUJByEEN4JfBq4rxLnk2qNzYj9F4JNiVK5FB4OQgjDgN8AnwJeKvp8Ui1q\nb4d11oExY3JXUttsSpTKoxIjBz8Brokx3lyBc0k1qbvfwGbE/imV4Nln4d//zl2JVNsKDQchhGZg\nR+CkIs8j1TqbEcvDpkSpPAoLByGEjYHzgI/EGOcXdR6p1k2fDs88Yzgoh402gg02MBxI/TWowGOX\ngPWBjhD+M1g6ENgjhPBFYLUYl35lcPz48YwYMaLXvpaWFlpaWgosV8rDZsTysSlRjaK1tZXW1tZe\n+2bPnl2244dlvD/3/8AhrAks2V51KTAZ+EGMcfJSfqYJ6Ojo6KCpqamQuqRqc8op8NOfptsZ7Tno\nv29/Gy6+OI3G+HyqkXR2dlJK19ZKMcbO/hyrsMsKMca5McYHe27AXOCFpQUDqVHZjFhepVIKWtOn\n565Eql2VniHRG4ykHmK0GbHcbEqU+q+i4SDGuHeM8fhKnlOqZv/+d7r1znBQPhtvDOuvbziQ+sO1\nFaSM2tvT1+5Pu+o/mxKl/jMcSBm1t8OoUWldAJWPMyVK/WM4kDKyGbEYpRLMmGFTotRXhgMpE5sR\ni2NTotQ/hgMpk2nT4IUXDAdFeOtbYb31DAdSXxkOpExsRiyOTYlS/xgOpEza29NaAKNG5a6kPhkO\npL4zHEiZ2G9QLJsSpb4zHEgZxJg+1RoOimNTotR3hgMpg6lTYdYsw0GRNtkE1l3XcCD1heFAysBm\nxOLZlCj1neFAyqC9PX2yXX/93JXUN8OB1DeGAykDmxEro1SCZ55Jm6SVZziQKmzRIpsRK8WmRKlv\nDAdShT3+OMyZYziohDFjYJ11DAfSqjIcSBXW3YzY1JS3jkZgU6LUN4YDqcLa22GzzdJtdiqe4UBa\ndYYDqcJuvRV23TV3FY2jVEqzJM6YkbsSqXYYDqQKeu456OyE/ffPXUnjsClRWnWGA6mCbrwxfd1v\nv7x1NJJNN4W11zYcSKvCcCBVUFsbjBsHG26Yu5LG0d2UePfduSuRaofhQKqQGFM4eN/7clfSePbd\nF266CV55JXclUm0wHEgV8q9/pcY4w0HlHXUUzJsH11yTuxKpNhgOpAppa4PVV4fddstdSePZdFPY\nZRf4/e9zVyLVBsOBVCFtbbDHHjB0aO5KGlNzM1x3Hbz0Uu5KpOpnOJAq4LXX4G9/8xbGnI44AhYs\ngD/9KXclUvUzHEgV8Pe/p4Bgv0E+o0enkRsvLUgrZjiQKqCtLd2+uN12uStpbM3Naa6J557LXYlU\n3QoNByGEk0IIk0IIc0IIM0MIV4UQtirynFI16r6FMYTclTS2ww5LX6+4Im8dUrUreuRgd+DHwM7A\nvsBgoC2EYEuWGsYzz8A//2m/QTVYf/0054GXFqTlG1TkwWOM7+/5fQjh48CzQAm4rchzS9XihhvS\n1333zVuHkqOOgmOPTXNOjB6duxqpOlW652AtIAIvVvi8UjZtbdDUlD61Kr9DD4VBg+Dyy3NXIlWv\nioWDEEIAzgNuizE+WKnzSjktWpRGDrxLoXqstRYccICXFqTlKfSywhIuBLYF3rOiB44fP54RI0b0\n2tfS0kJLS0tBpUnF+Oc/4dlnDQfVprkZjj4anngizZ4o1ZrW1lZaW1t77Zs9e3bZjh9ijGU72DJP\nEsIFwEHA7jHGact5XBPQ0dHRQVNTU+F1SUU780w47TR44QVYbbXc1ajbK6/ABhvAqafCiSfmrkYq\nj87OTkqlEkApxtjZn2MVflmhKxh8EHjv8oKBVI8mTIC99jIYVJthw+DAA720IC1L0fMcXAh8GDga\nmBtCGNm1rV7keaVqMHcu3HablxSqVXMz3HMPPPxw7kqk6lP0yMHngLcAtwLTe2xHFnxeKbuJE+GN\nNwwH1eqAA2D4cPjDH3JXIlWfQsNBjHFAjHHgUrZfFXleqRq0tcEmm8DYsbkr0dIMHQqHHJIuLVSg\n9UqqKa6tIBVkwgSnTK52zc0weTI88EDuSqTqYjiQCvDUU+lNx0sK1W3ffWHttW1MlJZkOJAKcMMN\nMGAA7LNP7kq0PEOGpMWYvLQg9WY4kArQ1gbvfCess07uSrQizc0wZQq0t+euRKoehgOpzBYudMrk\nWrLXXjBypHctSD0ZDqQy6+yEF180HNSKgQPh8MNTOFi0KHc1UnUwHEhl1taW7p/feefclWhlNTfD\n00/D7bfnrkSqDoYDqcza2mDvvWHw4NyVaGW9+92w8cbetSB1MxxIZfTyy+nT5/77565Eq2LAADjq\nKLj8cliwIHc1Un6GA6mMbrklvbnYb1B7mpvT8tp/+1vuSqT8DAdSGbW1weabwxZb5K5Eq6pUSv/v\nvLQgGQ6ksmprc9SgVoWQRg+uuCItmCU1MsOBVCZTp8Kjj9pvUMuam2HWrDRPhdTIDAdSmbS1pXvm\n3/ve3JWor7bfHrbd1gmRJMOBVCZtbbDLLjBiRO5K1Ffdlxb+9CeYNy93NVI+hgOpDBYsgJtust+g\nHhx1VLol9brrclci5WM4kMrg7rth9mzDQT3Yait4xzu8a0GNzXAglUFbG6y1VlqJUbWvuRn+8hd4\n5ZXclUh5GA6kMpgwAfbdNzUkqvYdeWTqObjmmtyVSHkYDqR+eukluOsuLynUk003Tc2lXlpQozIc\nSP10881pqV/DQX1pbk5NibNm5a5EqjzDgdRPbW0wdiyMGZO7EpXTEUeku1D+9KfclUiVZziQ+iHG\n1G/gqEH9GT0a9tzTCZHUmAwHUj889hg88YThoF41N8ONN8Jzz+WuRKosw4HUD21tMHgw7LVX7kpU\nhMMOS1+vuCJvHVKlGQ6kfmhrg3e/G4YNy12JirDeeukWVe9aUKMxHEh9NH9+ulPBVRjrW3MzTJwI\n06fnrkSqHMOB1Ed33JFm0LPfoL4dcki6dHT55bkrkSqnIuEghHBcCGFqCGFeCOHOEIKTzKrmtbXB\nuuumefhVv9ZaCw44wEsLaiyFh4MQwlHA2cApwDuA+4AJIYT1ij63VKS2NthvPxjg+FvdO+oouPNO\nmDo1dyVSZVTi19p44P/FGH8VY3wI+BzwKvDJCpxbKsQLL0B7u/0GjeKgg2DoULjsstyVSJVRaDgI\nIQwGSsBN3ftijBG4Edi1yHNLRbrxxjQB0n775a5ElTBsWAoIToikRlH0yMF6wEBg5hL7ZwKjCj63\nVJi2NthuO9hoo9yVqFKam+Gee+Dhh3NXIhVvUKbzBiAu6y/Hjx/PiBEjeu1raWmhpaWl6LqkFYox\nhYMjjshdiSrpgANg+PA0evCd7+SuRo2utbWV1tbWXvtmz55dtuOHNMpfjK7LCq8Ch8UYr+6x/1Jg\nRIzx0CUe3wR0dHR00NTUVFhdUn9MngzbbgvXX2/PQaM55hi4+2548EEIIXc1Um+dnZ2USiWAUoyx\nsz/HKvSyQoxxPtAB7NO9L4QQur6/vchzS0WZMAFWWw123z13Jaq05mZ46CG4997clUjFqsTdCucA\nnwkhHBNC2Bq4CFgDuLQC55bKrq0tBYM11shdiSpt331hiy3gk5+EefNyVyMVp/BwEGO8DDgBOA24\nBxgH7B9jdJ0z1ZzXX4dbb3VWxEY1ZEhahOnhh+ELX0j9J1I9qsj0LTHGC2OMm8YYh8YYd40xtlfi\nvFK5/eMf6ROj4aBx7bADXHQRXHopXHxx7mqkYuS6W0GqSW1tMHIkjBuXuxLldMwxcNdd8KUvpemz\n3+mE8KozTvwqrYIJE9KogZ3qOuecFAwOOwyefz53NVJ5GQ6klTRzZupS95KCIN2x8sc/wmuvQUsL\nLFyYuyKpfAwH0kq68cb01SmT1W3jjdNqjTff7MRIqi+GA2kltbXBjjumngOp2957w/e/n7Y//zl3\nNVJ5GA6kldA9ZbKXFLQ0J54Ihx6aGhUffTR3NVL/GQ6klXDDDTBjhuFASxcCXHIJjBqVGhTnzs1d\nkdQ/hgNpBTo64PDD0/DxnnvmrkbVasQIuPJKePxx+OxnnSBJtc1wIC3Hgw+mxZW23TZdTx7kzCBa\nju22g5//HH77W7jwwtzVSH3nrzppGaZOTXcmjB4N114Lw4blrki1oKUlTZD03/+d5kF497tzVySt\nOkcOpKWYPj0tsrPGGqkRcZ11clekWnLWWbDzznDEEWl+DKnWGA6kJTz/fBoxmD8/zW0walTuilRr\nBg+Gyy5LEyM1N8OCBbkrklaN4UDqYc4c+K//gueeS3cojBmTuyLVqtGjU0D4+9/hm9/MXY20agwH\nUpdXX4WDDoLHHkuXEsaOzV2Rat0ee8CZZ6bLDFdckbsaaeUZDiTgjTfS7Yrt7an5cMcdc1ekejF+\nfOo9+MQn4KGHclcjrRzDgRrewoXwkY/ATTel2xXtLlc5hQC/+EVah+FDH4JXXsldkbRihgM1tBjT\nhDVXXgl/+EO6Q0Eqt+HD02vsqafg2GOdIEnVz3CghhUjnHBC+lR3ySVwyCG5K1I923rr9Dq77DI4\n77zc1UjLZzhQwzrtNDj3XPjJT+CjH81djRrB4YfDV78KX/tauotBqlaGAzWk886DU09Ny+x+4Qu5\nq1EjOeMM2G03OPJIeOaZ3NVIS2c4UMP5v/9LHeRf/zqcdFLuatRoBg1K/S0DBqRLWdOn565IejPD\ngRrK5ZfDpz8Nn/98+gQn5TByJFx1FUybBm9/e3pdStXEcKCGcf318OEPp+lsL7gg3WIm5fKud8ED\nD6SlwI88Mt1O+9JLuauSEsOBGsLf/57uMT/gALj00jSkK+W27rrp7oVf/xquuSaNItx8c+6qJMOB\nGkBHB3zgA7Drrula7+DBuSuSFgshjRrcfz+87W2wzz6pJ2bevNyVqZEZDlTXHnwQ9t8ftt02zX64\n+uq5K5KWbpNN0iqg55wDP/0p7LQT3HNP7qrUqAwHqksLFqS+gve8J62Od+21MGxY7qqk5RswII0a\ndHTAkCGw886pcXbhwtyVqdEYDlR3Jk6Epib48pfTgje33ALrrJO7Kmnlbbcd3HVXmjDp5JPT6o6P\nP567KjWSwsJBCGFMCOHnIYQpIYRXQwiPhhBODSF4xVeFmD493Y2w556wxhowaRL87Gep6UuqNUOG\npEm6Jk6EGTNghx3g4otdl0GVUeTIwdZAAD4NbAuMBz4H/E+B51QDeuMNOOssGDsWbrghTXJ0++3p\nmq1U697zHrj3Xjj6aPjMZ+Dgg2HmzNxVqd4VFg5ijBNijMfGGG+KMT4RY/wL8EPgQ0WdU42nrQ3G\njUszHR57LDzyCHziE96qqPoyfHgaBbv66jQitv328Kc/5a5K9azSv0LXAl6s8DlVh558Eg47LN2J\nMGpU6uo+7zxYa63clUnFOeigNHHSbrvBoYfCJz8Jc+bkrkr1qGLhIISwJfBF4KJKnVP1Z968tJri\n1lvDnXdCa2tqOHz723NXJlXG+uvDlVemy2d//GPqRXCFR5VbiKvY3RJCOAP4+nIeEoFtYoyP9PiZ\njYBbgZtjjJ9dzrGbgI499tiDESNG9Pq7lpYWWlpaVqlW1Y8Y0wxy//3f8PTTcPzxqYvb2xPVyKZO\nhY99DG67LV1OO+GENKeH6l9rayutra299s2ePZuJEycClGKMnf05fl/CwbrAivq/p8QYF3Q9fjRw\nC3B7jPETKzh2E9DR0dFBU1PTKtWl+vXoo/CVr8B118H73gfnn5+aDyWlORAuuADOPDPdsfP+96db\nIPfay/VDGk1nZyelUgnKEA5W+bJCjPGFGOMjK9i6g8FGpGBwN/DJ/hSqxjN3Lnzzm6n5avLktIrd\n9dcbDKSeBg5M4XnqVPjlL9PI2t57Q6kEv/sdzJ+fu0LVoiLnOdiQdClhGnAisEEIYWQIYWRR51R9\niDEtRrP11nDuuSkgPPggHHKIn4SkZRkyBI45Jt322NYGG2yQ5v3YYgs4+2yYPTt3haolRTYkvg/Y\nHNgbeAqYDjzT9VV6k1mz4Ec/SiMFRx2V5il48EE45RQYOjR3dVJtCAH22y+Nst13XxpFOOkkeOtb\n0+WGp57KXaFqQZHzHPwyxjhwiW1AjHFgUedU7YkR/vGP9Iln9Oj0y2u77dIdCFddBZttlrtCqXaN\nG5eWKH9HQsq9AAAPMklEQVTiCTjuOPjFL9K/qQ9/GDr7dUVa9c6pYpTFiy8uHiXYbbcUEE49NV0v\nveyy1EwlqTxGj04LOD31VFr18Y47Uk/C3nvDX/8KixblrlDVxnCgiokx3XJ1zDGw0UaLRwluuCHd\nkfD1r8NIO1KkwgwblhYke+SRFMLnzoUDD0wh/ec/h9dey12hqoXhQIXrOUqw++5p3YOeowT77ut0\nx1IlDRqUViy98840gdLYsWndhjFj0iRjDz+cu0Ll5q9kFWJZowQ33pg+tThKIOUXQrqsd9VV8NBD\naUry//3fdKfQ2LHwta+l8LBwYe5KVWmGA5XVikYJ9tnHUQKpGm21FVx4ITz3XFrgaY894Ne/Tl9H\njoSPfzxN2/zKK7krVSUMyl2Aat+zz6YRgb/8Jf3yWLgwLQpz/vnw3vcaBqRassYaaYGngw5KjYp3\n353CwtVXp0mWhgxJIf/gg9NjNtood8UqwipPn1wkp0+uDW+8kUYEJkxIk6103xL19renW6Q+/nEv\nGUj1aMqUxUFh4sT0QaBUSkHh4IPTIlBOVJZPOadPNhxohWJMfQJtbSkQ3Hpr6nJef/002cr++6ev\nG26Yu1JJlTJrVlrv5Oqr09c5c2CTTRYHhT33TKMMqpxyhgMvK2ipZs2Cm29ePDrw5JMweHBqXjr5\n5BQIdtjBSwZSo1p7bTj66LS98UYaSegeVbjgAhg+PF1WLJUWb6NG5a5aK8twIAAWLIBJkxaPDkya\nlK43jh0LH/xgWg1xzz1dIlnSmw0Zkm5J3nff1JB8//3w5z+nOx1+9KPUqAxpMqaeYaFUcsSxWhkO\nGtQLL6R51//5z/QP+Kab0sIsa62V/oEfe2y6VDBmTO5KJdWSENK0zePGpe9jTCOPHR2Ltx//OP0O\ngjSasGRgGD3a3oXcDAd1bv781C/QHQS6v07vWv5q9dXTP8bjj0+jA+98Z1oCVpLKIQTYdNO0HXZY\n2hcjTJvWOzBceCE8/3z6+5Eje4eFpibYeGMDQyUZDurIc88tfvPvDgIPPpiuB0JalW2HHdLdBOPG\npT9vuWWaLU2SKiWENCo5Zgx86ENpX4xp7YeegeGii9LvNUiXLjbeOP0e67n13LfOOgaIcvFtocbE\nmIb/p01bHAK6g8CMGekxQ4em2wp32gk++ckUAt7+9tRAJEnVKIR0t8Mmm6R5UiD9vnv6abjnnnRp\n4qmn0jZ1amqA/Pe/e8/eOHTosoND9zZiRJ7/vlpjOKgi8+al4f7p09OLfll/njdv8c9sumkaBfjU\np1IIGDcOttjCSwOSal8Ii9/Ul2bhwvSh6OmnFweH7m3y5LSo2zPP9F51cujQFBDe8paV34YPf/O+\n1Var71EKw0GBXn8dXn45TTf68stpe/bZ3m/4Pd/4Z83q/fNrrplmHxs9OiXgnXdOf+7+frvtTMGS\nGtfAgel35EYbpd+PSzN/fgoI3aFhxow0J8OcOel3cvefp0xZ/OfubcGCZZ978ODUszV4cLo0u7Sv\ny/u7JR9zxhnVdedG3YaDGNP/2AUL0ouj+8992ffGG4vf3Lu3nm/4y9o/f/7Saxs0aPGb/OjRaU31\n0aMXB4HuPw8fXt/JVJKKNnjw4ssVqyLGtIT1kiGie5s9O30A7H6f6H7/WPLPy9o3b97iANK9r5rU\nZTiYPh122SWlxHJaffV0n//w4Yu3YcPSp/eNN178fc+/X3Lf+uvDeus5eZAkVbMQ0iWIoUMbczr4\nugwHxx+fEt8ll6QO10GDem/dwzjL+n7JfUOGpDf4wYNz/5dJklS8ugsHN9wAf/gD/OpX8NGP5q5G\nkqTaU1eD26+/Dscdl9Yf/8hHclcjSVJtqquRgzPPTPe/XnWVjXySJPVV3YwcPP44/M//wAknpFv8\nJElS39RFOIgRvvxl2GAD+Pa3c1cjSVJtq4vLClddBddem76uuWbuaiRJqm01P3Lwyivwla/AgQfC\nBz+YuxpJkmpfzYeD005Ly3yef75NiJIklUNFwkEIYUgI4d4QwqIQwrhyHfeBB+Dcc+Hkk2Gzzcp1\nVEmSGlulRg7OBJ4GYrkOGCN8/vNpBcKvfrVcR5UkSYU3JIYQDgD2Aw4D3l+u4/7qV3DbbXDjjWnp\nTEmSVB6FhoMQwkjgZ8DBwLxyHffFF9NoQUsL7LNPuY4qSZKg+MsKlwAXxhjvKedBv/nNtIzy2WeX\n86iSJAn6EA5CCGd0NRYua1sYQtgqhPBlYDjwv90/Wo6C77oLfvYz+N73YMMNy3FESZLUU4hx1XoE\nQwjrAuuu4GFTgcuAA5fYPxBYAPw2xviJpRy7CejYY489GDFiRK+/a2lp4cgjW3jnO9P3kyal5ZQl\nSWo0ra2ttLa29to3e/ZsJk6cCFCKMXb25/irHA5W+sAhbAy8pceu0cAEUmPipBjj9KX8TBPQ0dHR\nQVNT05uO+eMfpwmP7rgDdt65kLIlSapJnZ2dlEolKEM4KOyzd4zx6Z7fhxDmki4tTFlaMFiRZ55J\n8xl85jMGA0mSilTpGRL7PEzx1a+mWxbPOKOc5UiSpCVV7Kp9jPFJUs/BKrvpJvjd7+DSS2Httctb\nlyRJ6q3q11Z4/XU47jjYfXc45pjc1UiSVP+qvt//7LPh8cfhj390YSVJkiqhqkcOpk6F00+H8eNh\n++1zVyNJUmOo2nAQI3zpS7D++vCd7+SuRpKkxlG1lxWuvhr++le48koYNix3NZIkNY6qHDmYNw++\n/GV4//vhkENyVyNJUmOpynBw8cXw7LNpRkSbECVJqqyqDAe/+Q1861uw+ea5K5EkqfFUZTgYPRq+\n9rXcVUiS1JiqMhycdFKaKlmSJFVeVYYDF1aSJCmfqgwHkiQpH8OBJEnqxXAgSZJ6MRxIkqReDAeS\nJKkXw4EkSerFcCBJknoxHEiSpF4MB5IkqRfDgSRJ6sVwIEmSejEcSJKkXgwHkiSpF8OBJEnqxXAg\nSZJ6MRxIkqReDAeitbU1dwkNx+e88nzOK8/nvHYVGg5CCB8IIdwZQng1hPBiCOHKIs+nvvEfcOX5\nnFeez3nl+ZzXrkFFHTiEcBjwM+AbwM3AYGD7os4nSZLKo5BwEEIYCJwHnBBjvLTHXz1UxPkkSVL5\nFHVZoQkYDRBC6AwhTA8hXBtC2Lag80mSpDIp6rLC5kAATgHGA08CXwX+FkJ4W4zxpWX83OoAkydP\nLqgsLc3s2bPp7OzMXUZD8TmvPJ/zyvM5r6we752r9/tgMcaV3oAzgEXL2RYCWwEtXd8f2+NnhwDP\nAp9ezvGPBqKbm5ubm5tbn7ejV+W9fWnbqo4c/BC4ZAWPmULXJQXgPzEmxvhGCGEKsMlyfnYC8GHg\nCeC1VaxNkqRGtjqwKem9tF9WKRzEGF8AXljR40IIHcDrwFjg9q59g0lFP7mC4/9uVWqSJEn/cXs5\nDlJIz0GM8eUQwkXAd0MIT5MCwYmk4Y7LizinJEkqj8LmOSA1IM4HfgUMBe4C9o4xzi7wnJIkqZ9C\nVyOgJEkS4NoKkiRpCYYDSZLUS1WFgxDCcSGEqSGEeV0LNr0zd031KoRwSghh0RLbg7nrqichhN1D\nCFeHEP7d9fwevJTHnNY1g+irIYQbQghb5qi1XqzoOQ8hXLKU1/21ueqtdSGEk0IIk0IIc0IIM0MI\nV4UQtlriMauFEH4SQng+hPByCOGPIYQNctVc61byOb91idf4whDChatynqoJByGEo4CzSbMqvgO4\nD5gQQlgva2H17QFgJDCqa9stbzl1Z03gXuA40p06vYQQvg58Efgs8C5gLuk1P6SSRdaZ5T7nXa6j\n9+u+pTKl1aXdgR8DOwP7khbYawshDO3xmPOADwCHAXuQ5sG5osJ11pOVec4jaeHD7tf5hqQ7Blda\n1TQkhhDuBO6KMX6l6/sAPAWcH2M8M2txdSiEcArwwRhjU+5aGkEIYRFwSIzx6h77pgNnxRjP7fr+\nLcBM4GMxxsvyVFo/lvGcXwKMiDF+KF9l9avrw9yzwB4xxtu6XtPPAc0xxqu6HjOWNEHeLjHGSfmq\nrQ9LPudd+24B7okxHt/X41bFyEHXBEkl4KbufTGllhuBXXPV1QDe1jX8+ngI4TchhLfmLqhRhBA2\nIyX6nq/5OaRbfn3NF2uvruHYh0IIF4YQ1sldUB1Zi/Sp9cWu70ukW+Z7vs4fBqbh67xclnzOu304\nhPBcCOH+EML3lxhZWKEi5zlYFesBA0mfmnqaSZplUeV3J/Bx4GHSkNOpwMQQwvYxxrkZ62oUo0j/\noJf2mh9V+XIaxnWkIe2pwBak9WKuDSHsGqtlGLVGdY32ngfcFmPs7l8aBbzRFXx78nVeBst4zgF+\nS5p8cDowDjiTtO7R4St77GoJB8sSWPZ1Q/VDjLHn3NsPhBAmkV5MR7Li9TNUHF/zBVrics2/Qgj3\nA48DewG3ZCmqflwIbMvK9S75Oi+P7uf8PT13xhh/3uPbf4UQZgA3hhA2izFOXZkDV8VlBeB50oqO\nI5fYvwFv/mSlAnTNXPkIYLd8Zcwg/YL0NZ9R1y/K5/F13y8hhAuA9wN7xRin9/irGcCQrt6Dnnyd\n99MSz/kzK3j4XaTfNyv9Oq+KcBBjnA90APt07+saLtmHMi0ioeULIQwjDbOu6EWmMuh6U5pB79f8\nW0gdyL7mKySEsDGwLr7u+6zrTeqDwHtjjNOW+OsOYAG9X+dbkVbnvaNiRdaZFTznS/MO0kjNSr/O\nq+mywjnAL7tWdJwEjAfWAC7NWVS9CiGcBVxDupSwEfBd0j/i1px11ZMQwpqkpB66dm0eQtgBeDHG\n+BTpWuHJIYTHSMuUnw48Dfw5Q7l1YXnPedd2CqnnYEbX4/6XNGLW7yVuG1HXvfMtwMHA3BBC90jY\n7BjjazHGOSGEXwDnhBBmAS8D5wP/8E6FvlnRcx5C2Bw4GriWtIryDqT317/FGB9Y6RPFGKtmA75A\n+iU5j5Qqd8pdU71upBDwdNdzPY20VPZmueuqpw3YE1hEumTWc/u/Ho85ldQ09CrpDWrL3HXX8ra8\n55y01v31pGDwGjAF+Cmwfu66a3VbxnO9EDimx2NWI92X/zwpHFwObJC79lrdVvScAxsDt5JuIX2V\n1HR+BjBsVc5TNfMcSJKk6lAVPQeSJKl6GA4kSVIvhgNJktSL4UCSJPViOJAkSb0YDiRJUi+GA0mS\n1IvhQJIk9WI4kCRJvRgOJElSL4YDSZLUy/8H9MCnIzlRq58AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam._b)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.partial_dependence(np.sort(x, axis=0))[0])" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.97140000000000004" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lgam.accuracy(x, obs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Multiple Features" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "n = 10000\n", "x = np.random.rand(n, 5) * 10 - 5\n", "cat = np.random.randint(0,4, n)\n", "x = np.c_[x, cat]\n", "\n", "log_odds = (-0.5*x[:,0]**2) + 5 +(-0.5*x[:,1]**2) + np.mod(x[:,-1], 2)*-30\n", "p = 1/(1+np.exp(-log_odds)).squeeze()\n", "\n", "obs = (np.random.rand(len(x)) < p).astype(np.int)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "LogisticGAM(lam=0.6, n_iter=100, n_knots=20, spline_order=4, \n", " callbacks=[Deviance(), Diffs(), Accuracy()], tol=0.0, \n", " penalty_matrix='auto')" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# lgam = GAM(distribution='binomial', link='logit', lam=0.6, n_iter=200, n_knots=20, spline_order=4, penalty_matrix='auto', tol=1e-4)\n", "lgam = LogisticGAM(lam=0.6, n_iter=100, n_knots=20, spline_order=4, penalty_matrix='auto', tol=1e-4)\n", "lgam.fit(x, obs)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhQAAAFkCAYAAAB4sKK5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd4U3UbxvHvSZruRQeFUlr2BtlTQJChKKAoS1GQ8QIK\nMkQURRFUFGUpCqIoKCgiKCqKgqBsZBSBssso0L33yDrvH4ep7DZJW57PdeUqJKc5T5o2ufObiqqq\nCCGEEEIUhs7RBQghhBCi5JNAIYQQQohCk0AhhBBCiEKTQCGEEEKIQpNAIYQQQohCk0AhhBBCiEKT\nQCGEEEKIQpNAIYQQQohCk0AhhBBCiEKTQCGEEEKIQrN5oFAUJVhRlKWKoiQripKrKMoBRVEa2/q8\nQgghhLAfJ1veuaIovsB2YCPQFUgGqgNptjyvEEIIIexLseXmYIqivAu0UlW1vc1OIoQQQgiHs3WX\nR3dgr6Io3ymKkqAoyj5FUYba+JxCCCGEsDNbt1DkASowC1gFtADmAv9TVXXZNY73R+saiQLybVaY\nEEIIUfq4ApWAdaqqptj75LYOFAXAblVV215x3QdAU1VV21zj+CeAr21WkBBCCFH6Pamq6jf2PqlN\nB2UCccDRf113FOh1neOjAJYtW0bt2rVtWJa40rhx45gzZ46jy7iryM/c/uRnbn/yM7evo0ePMmDA\nALjwXmpvtg4U24Ga/7quJnD2OsfnA9SuXZvGjWVmqb34+PjIz9vO5Gduf/Iztz/5mTuMQ4YM2HpQ\n5hygpaIokxRFqXqhS2Mo8JGNzyuEEEIIO7JpoFBVdS/wKNAfiABeBcaoqvqtLc8rhBBCCPuydZcH\nqqquBdba+jxCCCGEcBzZy0PQv39/R5dw15Gfuf3Jz9z+5Gd+d7HptNHbdWGPj/Dw8HAZyCOEEELc\nhn379tGkSROAJqqq7rP3+aWFQgghhBCFJoFCCCGEEIUmgUIIIYQQhSaBQgghhBCFJoFCCCGEEIUm\ngUIIIYQQhSaBQgghhBCFJoFCCCGEEIUmgUIIIYQQhSaBQgghhBCFJoFCCCGEEIUmgUIIIYQQhSaB\nQgghhBCFJoFCCCGEEIUmgUIIIYQQhSaBQgghhBCFJoFCCCGEEIUmgUIIIYQQhSaBQgghhBCFJoFC\nCCGEEIUmgUIIIYQQhSaBQgghhBCFJoFCCCGEEIUmgUIIIYQQhSaBQgghhBCFJoFCCCGEEIUmgUII\n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\nVAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.partial_dependence(np.sort(x, axis=0))[0]);" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nfhKeHD81dgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.partial_dependence(np.sort(x, axis=0))[0][:,-1]);\n", "plt.plot(lgam.partial_dependence(np.sort(x, axis=0), quantiles=np.linspace(.1, .9, 4))[1][-1]);" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "81.090903524784522" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lgam._statistics['edof']" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2190.99197222\n", "2192.36760394\n" ] } ], "source": [ "print lgam._statistics['AIC']\n", "print lgam._statistics['AICc']" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ -7.22314921e+00, -5.76511804e+00, -5.57873643e+00,\n", " -4.88360526e+00, -3.38467372e+00, -1.50542057e+00,\n", " -4.66174440e-01, 9.67681736e-01, 2.05296453e+00,\n", " 3.43623348e+00, 3.44999597e+00, 3.77632890e+00,\n", " 4.19217841e+00, 4.36604087e+00, 3.42113074e+00,\n", " 3.51783541e+00, 3.83930732e+00, 2.10659663e+00,\n", " 9.51131659e-01, 5.04498083e-01, -2.10580707e+00,\n", " -3.53879379e+00, -5.03133955e+00, -5.69032385e+00,\n", " -5.85508074e+00, -5.48686223e+00, -5.24148127e+00,\n", " -4.41073648e+00, -3.63839095e+00, -2.33059316e+00,\n", " -2.00086258e-01, 4.63491907e-01, 1.36372881e+00,\n", " 3.01291560e+00, 4.11926100e+00, 4.11032485e+00,\n", " 4.31850191e+00, 3.77620148e+00, 3.74612931e+00,\n", " 3.25469931e+00, 2.86210123e+00, 2.37586011e+00,\n", " 1.38149382e+00, -4.25198420e-01, -1.84611618e+00,\n", " -3.85297628e+00, -4.40822987e+00, -4.91656629e+00,\n", " -5.25062120e+00, -2.49534201e-01, -5.77389386e-01,\n", " -2.69548715e-01, -5.27220506e-01, -2.11311752e-01,\n", " -8.39042197e-02, -7.25716575e-01, -2.52831775e-01,\n", " -2.08470305e-01, -4.43281447e-01, -5.39530172e-02,\n", " -4.94874101e-01, -1.87821705e-01, -4.52666542e-01,\n", " -1.47111116e-02, -7.43056627e-02, -2.28840499e-01,\n", " 1.30194797e-01, -2.70409679e-01, -7.22408705e-01,\n", " -9.83070060e-02, -8.85019767e-01, -4.53948846e-01,\n", " 1.33131665e-01, -1.42114488e+00, -4.23313030e-01,\n", " -4.03786406e-01, -6.12641212e-01, -3.64670723e-01,\n", " 5.80045552e-03, 3.97037522e-01, -2.26130322e-01,\n", " -1.95797756e-01, -5.06858959e-01, -8.13886855e-01,\n", " 2.90615778e-01, 9.38270146e-02, -8.61770616e-01,\n", " 2.66436934e-01, -2.66799999e-01, -8.58722564e-01,\n", " 2.48847663e-01, -3.77709017e-01, -4.92526831e-01,\n", " -2.47878423e-01, -3.24445344e-01, -3.44904325e-01,\n", " 2.17273175e-01, -3.01911746e-01, -1.13498407e-01,\n", " -4.04290311e-01, -4.04781780e-01, -1.83317086e-01,\n", " -4.80015781e-01, -2.07781180e-01, -3.40742701e-01,\n", " -1.83177581e-01, -1.63592033e-01, -1.68222991e-01,\n", " -4.21764505e-01, -3.39243340e-01, -1.01138926e-01,\n", " -4.45917245e-01, -1.12588092e-01, -8.64518155e-01,\n", " 1.25487323e-01, 1.71936269e-02, -3.91578144e-01,\n", " -3.59021209e-01, -1.34599576e-01, -5.98155493e-01,\n", " -6.45972600e-01, 4.47681355e+00, -4.47135541e+00,\n", " 4.45017695e+00, -4.45563526e+00])" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lgam._b" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAFkCAYAAACjCwibAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XuYXHWd5/H3NxcuEQxKAIG4KgM4kdFAmqtcFBAy6uMF\neZ7BVtZRFnZxmV1scR3FC7sgI+ICDiojrheIzLQyroywsMbB2S5IIMSkDSIkDCh3YkiQCZdASNLf\n/eNUS6fpS1V1dU5X9fv1PPWEOv07p78HNPWp3+97zonMRJIkaTRTyi5AkiS1BkODJEmqiaFBkiTV\nxNAgSZJqYmiQJEk1MTRIkqSaGBokSVJNDA2SJKkmhgZJklQTQ4MkSapJQ6EhIs6KiAci4vmIWBIR\nh4wwdlpEfDEi7q+O/1VEzB9i3F4R8YOIWBcRGyLizoiY10h9kiSp+eoODRFxCnAJcB5wEHAnsDAi\nZg2zy4XAGcBZwBzgSuC6iJg74Ji7AIuBjcD86rhzgKfqrU+SJI2PqPeBVRGxBLgjM8+uvg/gEeDy\nzLx4iPGPARdk5rcGbPsxsCEzP1J9fxFwRGa+reEzkSRJ46qumYaImA50AL/o35ZF6rgZOGKY3ban\nmEEY6HngqAHv3wMsi4hrI2JNRPRGxOn11CZJksbXtDrHzwKmAmsGbV8DvHGYfRYCn4yIW4HfAu8A\nPsDWgWUf4OMUyx4XAocBl0fEC5l5zeADRsSuFMsYDwIv1HkOkiRNZjsArwcWZuaT9exYb2gYTgDD\nrXOcDXwbWAX0UQSH7wEfGzBmCrA0M79QfX9nRBxAESReFhooAsPfN6FuSZImqw8D/1DPDvWGhnXA\nFmCPQdt35+WzDwBk5jrgAxGxHbBrZq6u9jA8MGDYamDloF1XUsxIDOVBgGuuuYY5c+bUdQITVVdX\nF5dddlnZZTRNO51PO50LeD4TWTudC3g+E9XKlSs59dRTofpZWo+6QkNmboqI5cDxwPXwx0bI44HL\nR9n3RWB1tS/iZOCHA368mJcvb7wReGiYw70AMGfOHObNa4+rMmfOnNk25wLtdT7tdC7g+Uxk7XQu\n4Pm0gLqX9xtZnrgUuLoaHpYCXcAM4CqAiFgAPJqZ51bfHwrsDawAZlNcqhnAVwcc8zJgcUR8FriW\noqfhdIpLNSVJ0gRQd2jIzGur92Q4n2KZYgUwPzPXVofMBjYP2GUH4EvAG4BngRuBUzPz6QHHXBYR\nJwEXAV+gWLo4OzMHzkZIkqQSNdQImZlXAFcM87PjBr2/BTighmPeBNzUSD2SJGn8+eyJCaKzs7Ps\nEpqqnc6nnc4FPJ+JrJ3OBTyfdlT3HSEnguozKZYvX7683ZpSVJK+PnjiCXj0UXjsseLV/8/r1sGO\nO8JOO4382nnnl297xStgWrMubJakJujt7aWjowOgIzN769nXv87U9jZuhMcffykEDP7zsceKn28e\n0IkzbRrsvXfx2m03eO45WLMGnn32pdczzxTbR7PDDqMHjuFCx3Cv7bYbv39fkjQcQ4NaViY8/fTQ\nswMD/1y3buv9dtoJZs8uAsH++8Oxx770fu+9i3/ebTeYUsPiXV8fbNiwdZio5fXMM8WfDz889M/7\n+kb+vdOnNx46tt+++HfX11f8OdKrljHNHlfPsdpVRPGaMuWlfx7pVcu4Zh6rnnERZf/b1GD339/4\nvoYGTUiDlwuGCwaDv+nvtttLAeDww18KAQMDwStf2bw6p0x56cO4WTLhhRdGDxzDvVavHnqfgTMp\n463WD5N6P3yGGt9uxhKk6h0v1cvQoG2u0eWCvfZ6KQDMnfvyQLDXXsW36FYXUfRQ7LhjEYKa5cUX\ni/CwcePYP6j9Ztk+xjOUGEwmprvugj//88b2NTSo6R5/HH7zm/qWC/oDwH77FcsFAwNBPcsFGt52\n28Guu5ZdhSaaCJg6tewqtC39/veN72toUFPdcAP8xV8U0+uw9XLBYYfBySe/PBA0c7lAkjR+DA1q\nmquvhv/wH+A974FLLilCQTssF0iSCk74qikuuQQ++tHi9Y//CPvsY2CQpHZjaNCYZMJnPgOf+lTx\n5//6X97MSJLalX+9q2GbN8OZZ8J3v1vMNHzyk2VXJEkaT4YGNeSFF6Czs2h8vPpq+MhHyq5IkjTe\nDA2q29NPw/veB0uWwHXXFY2PkqT2Z2hQXdasgXe+E373O/jnf4ajjiq7IknStmJoUM0eeABOPLG4\nLfEtt8Bb3lJ2RZKkbcmrJ1STu+6CI48srpZYvNjAIEmTkaFBo1q0CI45BvbYowgM++xTdkWSpDIY\nGjSiG2+EE04oHhDV01MEB0nS5GRo0LB+8IPiKon58+FnP4OZM8uuSJJUJkODhnTZZcW9F/7yL+HH\nP4Yddii7IklS2QwN2komnHtucXfHT38avvMdbwstSSr4caA/2rIFPv7x4vkRX/1q8TwJSZL6GRoE\nFLeF/vCH4ac/he9/v3hapSRJAxkaxNNPw/vfD7ffDj/5Cbz3vWVXJEmaiAwNk9wTTxS3hf7tb+Hn\nP4ejjy67IknSRGVomMQefLC4B8Ozz0KlUtyLQZKk4Xj1xCT1m9/AW98KfX3FXR4NDJKk0RgaJqHb\nbiuWIXbf3dtCS5JqZ2iYZG66Cd7xDnjzm4vbQr/mNWVXJElqFYaGSeTv/764LfQJJ8DChbDLLmVX\nJElqJYaGSeJv/xZOPbV4/e//DTvuWHZFkqRWY2hoc5nw+c/DJz4B/+2/wfe+522hJUmNaSg0RMRZ\nEfFARDwfEUsi4pARxk6LiC9GxP3V8b+KiPkjjP9sRPRFxKWN1KaX9N8W+sIL4eKLi1dE2VVJklpV\n3aEhIk4BLgHOAw4C7gQWRsSsYXa5EDgDOAuYA1wJXBcRL7vIrxo+zqgeU2OwcSOcckrxwKnvfa+Y\nZZAkaSwamWnoAq7MzAWZuQo4E9gAnDbM+FOBCzNzYWY+mJnfAm4Czhk4KCJ2Aq4BTgf+rYG6VPXM\nM/Cud8H/+T/FbaE/9rGyK5IktYO6QkNETAc6gF/0b8vMBG4Gjhhmt+2BjYO2PQ8cNWjbN4EbMvNf\n6qlJW3viCTj2WFi2rLgttM+RkCQ1S70tcbOAqcCaQdvXAG8cZp+FwCcj4lbgt8A7gA8wILBExAeB\nA4GD66xHAzz0EJx4IqxfX9wW+sADy65IktROmnX1RAA5zM/OBu4DVlHMOFwOfA/YAhARrwW+Bpya\nmZuaVM+kc/fdxW2hN20q7vJoYJAkNVu9Mw3rKD7s9xi0fXdePvsAQGauAz4QEdsBu2bm6oi4CHig\nOmQesBuwPOKPvf1TgWMi4q+A7atLIC/T1dXFzJkzt9rW2dlJZ2dnnafV2m6/Hd79bnjta+FnP4M9\n9yy7IknSRNDd3U13d/dW29avX9/w8WKYz+Phd4hYAtyRmWdX3wfwMHB5Zn61hv2nA/cAP8zML0TE\nK4DXDRp2FbASuCgzVw5xjHnA8uXLlzNv3ry66m83P/sZnHwydHTA9dd7l0dJ0sh6e3vp6OgA6MjM\n3nr2beQ2P5cCV0fEcmApxdUUMyg+6ImIBcCjmXlu9f2hwN7ACmA2xaWaAXwVIDOfowgRfxQRzwFP\nDhUY9JJ/+Af4y7+Ed74TfvQj7/IoSRpfdYeGzLy2ek+G8ymWKVYA8zNzbXXIbGDzgF12AL4EvAF4\nFriRon/h6ZF+Tb11TTZf/zr81/9ahIbvfMe7PEqSxl9DHzWZeQVwxTA/O27Q+1uAA+o8/nGjj5qc\nMuG88+CCC+Ccc4q7PE7xZuCSpG3A76ctZMsWOOssuPJK+MpX4NOfLrsiSdJkYmhoERs3Fk+o/MlP\n4LvfhdOGu/+mJEnjxNDQAp55Bk46CRYtKh5r/f73l12RJGkyMjRMcGvXFs+RuPfe4vLKt7+97Iok\nSZOVoWECe/jh4rbQTz1V3Bb6oIPKrkiSNJkZGiaoe+4pAsN22xW3hd5337IrkiRNdl6sNwEtWQJH\nHw2vfrWBQZI0cRgaJpiFC+H442HOnGJJwudISJImCkPDBNLdDe95Dxx7LPz85/CqV5VdkSRJLzE0\nTBDf+AZ8+MPQ2QnXXQczZpRdkSRJWzM0TADf/jb8l/8CXV3w/e/D9OllVyRJ0st59cQEcNVVxbLE\n//yfEFF2NZIkDc2ZhpI99xz88pcwf76BQZI0sRkaSnbbbbB5s3d6lCRNfIaGklUqMGsWvOlNZVci\nSdLIDA0lq1TgbW9zaUKSNPEZGkq0YQPccUcRGiRJmugMDSVasgQ2bbKfQZLUGgwNJerpKZ4vccAB\nZVciSdLoDA0lqlTgmGNgiv8VJEktwI+rkjz/fLE84dKEJKlVGBpKcscd8OKLNkFKklqHoaEklUrx\nFMu3vKXsSiRJqo2hoSQ9PXD00fYzSJJahx9ZJXjhhaKfwaUJSVIrMTSUYOnSIjjYBClJaiWGhhJU\nKjBzJsydW3YlkiTVztBQgkql6GeYOrXsSiRJqp2hYRt78cXicdj2M0iSWo2hYRv75S+LGzvZzyBJ\najWGhm2spwd23hkOPLDsSiRJqo+hYRurVOCoo2DatLIrkSSpPoaGbWjTJli82KUJSVJrMjRsQ8uW\nwYYNNkFKklpTQ6EhIs6KiAci4vmIWBIRh4wwdlpEfDEi7q+O/1VEzB805rMRsTQino6INRFxXUTs\n30htE1mlAjvtBPPmlV2JJEn1qzs0RMQpwCXAecBBwJ3AwoiYNcwuFwJnAGcBc4ArgesiYuCtjY4G\nvg4cBrwDmA78PCJ2rLe+iaynB448EqZPL7sSSZLq18hMQxdwZWYuyMxVwJnABuC0YcafClyYmQsz\n88HM/BZwE3BO/4DMfFdm/iAzV2bmXcBHgX8HdDRQ34S0eXPRz+DShCSpVdUVGiJiOsUH+S/6t2Vm\nAjcDRwyz2/bAxkHbngeOGuFX7QIk8Id66pvIenvh2WdtgpQkta56ZxpmAVOBNYO2rwFeM8w+C4FP\nRsS+UTgB+ACw51CDIyKArwGLMvOeOuubsHp6YMYMOPjgsiuRJKkxzbpbQFDMDAzlbODbwCqgD/gt\n8D3gY8OMvwJ4E3DkaL+0q6uLmTNnbrWts7OTzs7O2qrehioV+xkkSdtWd3c33d3dW21bv359w8eL\nYnWhxsHF8sQG4OTMvH7A9quAmZl50gj7bgfsmpmrI+Ii4N2Z+eZBY74BvAc4OjMfHuFY84Dly5cv\nZ14LXIqweTO8+tXw138Nn/tc2dVIkiaz3t5eOjo6ADoys7eefetansjMTcBy4Pj+bdXlhOOB20bZ\n98VqYJgOnAz808CfVwPD+4BjRwoMrWjFCnjmGZsgJUmtrZHliUuBqyNiObCU4mqKGcBVABGxAHg0\nM8+tvj8U2BtYAcymuFQzgK/2HzAirgA6gfcCz0XEHtUfrc/MFxqocULp6YEdd4RDhr2bhSRJE1/d\noSEzr63ek+F8YA+KMDA/M9dWh8wGNg/YZQfgS8AbgGeBG4FTM/PpAWPOpOiJ6Bn06z4GLKi3xomm\nUoEjjoDtty+7EkmSGtdQI2RmXkHRsDjUz44b9P4W4IBRjte2t7PesgVuvRXOOWf0sZIkTWRt+2E9\nUdx5J6xfbz+DJKn1GRrGWaUCO+wAhx5adiWSJI2NoWGc9fTA4YcXwUGSpFZmaBhHfX1FP4NLE5Kk\ndmBoGEd33QVPPeXzJiRJ7cHQMI56emC77eCww8quRJKksTM0jKNKpehn2HHHsiuRJGnsDA3jpK+v\nCA32M0iS2oWhYZzcfTf84Q+GBklS+zA0jJNKpXgM9hFHlF2JJEnNYWgYJz09xQ2dZswouxJJkprD\n0DAOMouZBi+1lCS1E0PDOLjnHli3zn4GSVJ7MTSMg0oFpk2Dt7617EokSWoeQ8M46OmBQw6BV7yi\n7EokSWoeQ0OT9fczuDQhSWo3hoYmu/deeOIJmyAlSe3H0NBkPT0wdar9DJKk9mNoaLJKBQ4+GHbe\nuexKJElqLkNDE2UWMw32M0iS2pGhoYnuuw9+/3tDgySpPRkamqhSgSlT4Kijyq5EkqTmMzQ0UU8P\nzJsHr3xl2ZVIktR8hoYm8XkTkqR2Z2hokt/+Fh57zH4GSVL7MjQ0SaUCEfYzSJLal6GhSSoVOOgg\n2GWXsiuRJGl8GBqawPszSJImA0NDEzz4IDzyiE2QkqT2Zmhogp6eop/h6KPLrkSSpPFjaGiCSgXm\nzoVXvarsSiRJGj+GhiaoVOxnkCS1P0PDGD30UNHTYGiQJLW7hkJDRJwVEQ9ExPMRsSQiDhlh7LSI\n+GJE3F8d/6uImD+WY04klUrx5zHHlFuHJEnjre7QEBGnAJcA5wEHAXcCCyNi1jC7XAicAZwFzAGu\nBK6LiLljOOaE0dMDb34z7Lpr2ZVIkjS+Gplp6AKuzMwFmbkKOBPYAJw2zPhTgQszc2FmPpiZ3wJu\nAs4ZwzEnDJ83IUmaLOoKDRExHegAftG/LTMTuBk4Ypjdtgc2Dtr2PHDUGI45ITzyCPzud/YzSJIm\nh3pnGmYBU4E1g7avAV4zzD4LgU9GxL5ROAH4ALDnGI45IdjPIEmaTKY16TgB5DA/Oxv4NrAK6AN+\nC3wP+NgYjglAV1cXM2fO3GpbZ2cnnZ2dNZQ8dpUKHHAA7LbbNvl1kiTVpbu7m+7u7q22rV+/vuHj\n1Rsa1gFbgD0Gbd+dl88UAJCZ64APRMR2wK6ZuToiLgIeaPSY/S677DLmzZtX3xk0UU8PnHhiab9e\nkqQRDfVFure3l46OjoaOV9fyRGZuApYDx/dvi4iovr9tlH1frAaG6cDJwD+N9ZhleuwxuP9+myAl\nSZNHI8sTlwJXR8RyYCnFlQ8zgKsAImIB8Ghmnlt9fyiwN7ACmE1xWWUAX631mBOR/QySpMmm7tCQ\nmddW759wPsWSwgpgfmaurQ6ZDWwesMsOwJeANwDPAjcCp2bm03Ucc8KpVGDOHNhj8KKKJEltqqFG\nyMy8ArhimJ8dN+j9LcABYznmRFSpwLHHll2FJEnbjs+eaMDq1XDvvd6fQZI0uRgaGnDLLcWfhgZJ\n0mRiaGhATw/svz/sueeoQyVJahuGhgb4vAlJ0mRkaKjTE0/AypUuTUiSJh9DQ536789gaJAkTTaG\nhjpVKrDvvrD33mVXIknStmVoqFNPj7MMkqTJydBQh7Vr4e67bYKUJE1OhoY6eH8GSdJkZmioQ6UC\n++wDr31t2ZVIkrTtGRrqUKk4yyBJmrwMDTV68kn49a8NDZKkycvQUKNbby3+NDRIkiYrQ0ONenrg\nda+D17++7EokSSqHoaFGPm9CkjTZGRpq8NRTcOedLk1IkiY3Q0MNbr0VMg0NkqTJzdBQg0qluDfD\nG95QdiWSJJXH0FCD/udNRJRdiSRJ5TE0jGL9elixwiZISZIMDaNYtAj6+uxnkCTJ0DCKnh7Yay/4\nkz8puxJJksplaBhF//0Z7GeQJE12hoYRPP00LF/u0oQkSWBoGNHixUU/g02QkiQZGkZUqcBrXgP7\n7Vd2JZIklc/QMIKeHvsZJEnqZ2gYxrPPwrJl9jNIktTP0DCMxYthyxZDgyRJ/QwNw6hUYPfd4U//\ntOxKJEmaGAwNw/B5E5Ikbc3QMITnnoNf/tJLLSVJGqih0BARZ0XEAxHxfEQsiYhDRhn/iYhYFREb\nIuLhiLg0IrYf8PMpEXFBRPyuOub+iPh8I7U1w+23w+bN9jNIkjTQtHp3iIhTgEuA/wgsBbqAhRGx\nf2auG2L8h4AvAx8Fbgf2B64G+oBPVYd9BvhPwEeAe4CDgasi4t8y8xv11jhWPT0waxa86U3b+jdL\nkjRxNTLT0AVcmZkLMnMVcCawAThtmPFHAIsy80eZ+XBm3gx0A4cOGvPTzPxZdcxPgJ8PGrPNVCr2\nM0iSNFhdoSEipgMdwC/6t2VmAjdTfPAP5Tago38JIyL2Ad4F3DhozPERsV91zFzgSOCmeuprhg0b\n4I47XJqQJGmwepcnZgFTgTWDtq8B3jjUDpnZHRGzgEUREdX9v5WZXxkw7CLglcCqiNhCEWY+l5k/\nrLO+MVuyBDZtsglSkqTB6u5pGEYAOeQPIt4OnEuxjLEU2Be4PCJWZ+aXqsNOAT4EfJCip+FA4G8j\n4vHM/EGTaqxJpQKvfjUccMC2/K2SJE189YaGdcAWYI9B23fn5bMP/c4HFmTm96vv746InYBvA/2h\n4WLgbzLzHweMeT3wWWDY0NDV1cXMmTO32tbZ2UlnZ2dNJzOU/vszTPFiVElSi+vu7qa7u3urbevX\nr2/4eHWFhszcFBHLgeOB6wGqSw7HA5cPs9sMiislBurr37faEzGDl89U9DFKz8Vll13GvHnz6jmF\nEb3wQtHP8JWvjD5WkqSJbqgv0r29vXR0dDR0vEaWJy4Frq6Gh/5LLmcAVwFExALg0cw8tzr+BqAr\nIlYAdwD7Ucw+/LQaGPrHfC4iHgHuBuZVj/udRk6qUUuWwMaNNkFKkjSUukNDZl5bbWw8n2KZYgUw\nPzPXVofMBjYP2OUCilmDC4C9gbUUsxQDb970V9Wff5NiqeNx4O+q27aZSgVe9Sp4y1u25W+VJKk1\nNNQImZlXAFcM87PjBr3vDwzDBoDMfA74ZPVVmkoFjj7afgZJkobix2PVxo3F7aO91FKSpKEZGqqW\nLi0aIe1nkCRpaIaGqp4emDkT5s4tuxJJkiYmQ0NVfz/D1KllVyJJ0sRkaABefBFuu82lCUmSRmJo\nAH75S3j+eZsgJUkaiaGBYmli553hwAPLrkSSpInL0EDRBHnUUTCtWY/vkiSpDU360LBpEyxe7NKE\nJEmjmfShYdky2LDBJkhJkkYz6UNDpQI77QRNfFimJEltydBQgSOPhOnTy65EkqSJbVKHhs2bYdEi\n+xkkSarFpA4Nvb3w7LP2M0iSVItJHRp6emDGDDj44LIrkSRp4pvUocF+BkmSajdpQ0N/P4NLE5Ik\n1WbShoYVK+Dpp22ClCSpVpM2NFQqsOOOcMghZVciSVJrmLShoacHjjgCttuu7EokSWoNkzI0bNkC\nt97q0oQkSfWYlKHh17+G9ettgpQkqR6TMjT09MAOO8Chh5ZdiSRJrWNShoZKBQ4/vAgOkiSpNpMu\nNPT1wS232M8gSVK9Jl1ouOsueOop+xkkSarXpAsNPT3FZZaHHVZ2JZIktZZJFxr6+xl23LHsSiRJ\nai2TKjT09zO4NCFJUv0mVWi4+2548kmbICVJasSkCg2VSvEY7MMPL7sSSZJaz6QKDT09xQ2dZswo\nuxJJklrPpAkNmd6fQZKksWgoNETEWRHxQEQ8HxFLImLEB0xHxCciYlVEbIiIhyPi0ojYftCYvSLi\nBxGxrjruzoiY10h9Q1m5EtautQlSkqRGTat3h4g4BbgE+I/AUqALWBgR+2fmuiHGfwj4MvBR4HZg\nf+BqoA/4VHXMLsBi4BfAfGAdsB/wVN1nNIyeHpg2Dd761mYdUZKkyaXu0EAREq7MzAUAEXEm8G7g\nNODiIcYfASzKzB9V3z8cEd3AwMdFfQZ4ODNPH7DtoQZqG1alAoccAq94RTOPKknS5FHX8kRETAc6\nKGYEAMjMBG6mCAdDuQ3o6F/CiIh9gHcBNw4Y8x5gWURcGxFrIqI3Ik4f4lgNySxmGlyakCSpcfX2\nNMwCpgJrBm1fA7xmqB0ysxs4D1gUES8C9wH/LzO/MmDYPsDHgXuBE4FvAZdHxKl11jeke++FJ56w\nCVKSpLFoZHliKAHkkD+IeDtwLnAmRQ/EvhSBYHVmfqk6bAqwNDO/UH1/Z0QcQBEkrhlrcZUKTJ1q\nP4MkSWNRb2hYB2wB9hi0fXdePvvQ73xgQWZ+v/r+7ojYCfg20B8aVgMrB+23EvjASMV0dXUxc+bM\nrbZ1dnbS2dm51baeHjj4YNh555GOJklSe+nu7qa7u3urbevXr2/4eHWFhszcFBHLgeOB6wEiIqrv\nLx9mtxkUV0oM1Ne/b7UnYjHwxkFj3sgozZCXXXYZ8+aNfFVmZjHT8O///YjDJElqO0N9ke7t7aWj\no6Oh4zWyPHEpcHU1PPRfcjkDuAogIhYAj2bmudXxNwBdEbECuIPiUsrzgZ9WAwPAZcDiiPgscC1w\nGHA6cEYjJzXQfffB6tX2M0iSNFZ1h4bMvDYiZlF88O8BrADmZ+ba6pDZwOYBu1xAMbNwAbA3sJZi\nluLzA465LCJOAi4CvgA8AJydmT+s+4wGqVRgyhQ48sixHkmSpMmtoUbIzLwCuGKYnx036H1/YLhg\nlGPeBNzUSD0jqVRg3jx45SubfWRJkiaXtn72RP/9GVyakCRp7No6NPzud/DYY97USZKkZmjr0NDT\nU/QzHHVU2ZVIktT62jo0VCpw4IGwyy5lVyJJUutr29Dg8yYkSWqutg0NDz4IjzxiE6QkSc3StqGh\nUoEIOProsiuRJKk9tG1o6OmBuXPhVa8quxJJktpD24aGSsV+BkmSmqktQ8NDDxU9DfYzSJLUPG0Z\nGiqV4k/7GSRJap62DQ1vfjPsumvZlUiS1D7aMjT4vAlJkpqv7ULDI48Uz5ywCVKSpOZqu9DQ389w\nzDHl1iFJUrtpy9BwwAGw225lVyJJUntpy9Dg0oQkSc3XVqHh8cfhvvtsgpQkaTy0VWiwn0GSpPHT\nVqGhpwfmzIE99ii7EkmS2k9bhQb7GSRJGj9tExp+/3u4915DgyRJ46VtQkN/P4OhQZKk8dFWoWH/\n/WHPPcuuRJKk9tQ2ocHnTUiSNL7aIjQ88QSsXOnShCRJ46ktQoP9DJIkjb+2CQ377gt77112JZIk\nta+2CQ3OMkiSNL5aPjSsWwe/+Y1NkJIkjbeWDw233FL86UyDJEnjq+VDQ08P7LMPvPa1ZVciSVJ7\na/nQYD+DJEnbRkuHhvXr4a67DA2SJG0LDYWGiDgrIh6IiOcjYklEHDLK+E9ExKqI2BARD0fEpRGx\n/TBjPxsRfRFx6Wh19PZCpqFBkqRtoe7QEBGnAJcA5wEHAXcCCyNi1jDjPwR8uTr+T4HTgFOAC4cY\newhwRvWYo+rthde9Dl7/+nrPQpIk1auRmYYu4MrMXJCZq4AzgQ0UYWAoRwCLMvNHmflwZt4MdAOH\nDhwUETsFPZUdAAAK00lEQVQB1wCnA/9WSyHLlnmppSRJ20pdoSEipgMdwC/6t2VmAjdThIOh3AZ0\n9C9hRMQ+wLuAGweN+yZwQ2b+S631/Ou/ujQhSdK2Mq3O8bOAqcCaQdvXAG8caofM7K4uXSyKiKju\n/63M/Er/mIj4IHAgcHCd9TjTIEnSNlJvaBhOADnkDyLeDpxLsYyxFNgXuDwiVmfmlyJiNvA14ITM\n3FTPL91uuy7OPnvmVts6Ozvp7Oys/wwkSWoz3d3ddHd3b7Vt/fr1DR8vitWFGgcXyxMbgJMz8/oB\n268CZmbmSUPscwtwe2b+9YBtH6boi9gpIt4H/ATYQhE+oJiNyOq27XNQkRExD1j+zncu56ab5tVc\nvyRJk11vby8dHR0AHZnZW8++dfU0VGcClgPH92+rLjkcT9G7MJQZQN+gbX3VXYOiP+LNFMsTc6uv\nZRRNkXMHB4aBDq57MUOSJDWqkeWJS4GrI2I5xXJDF0UwuAogIhYAj2bmudXxNwBdEbECuAPYDzgf\n+Gk1EDwL3DPwF0TEc8CTmblypEKKoCRJkraFukNDZl5bbWw8H9gDWAHMz8y11SGzgc0DdrmAYmbh\nAmBvYC1wPfD5kX5NLbXMnl1f7ZIkqXENNUJm5hXAFcP87LhB7/sDwwV1HP+40UdBxOhjJElSc7T0\nsyckSdK2Y2iQJEk1MTRIkqSaGBokSVJNDA2SJKkmhgZJklQTQ4MkSaqJoUGSJNXE0CBJkmpiaJAk\nSTUxNEiSpJoYGiRJUk0MDZIkqSaGBkmSVBNDgyRJqomhQZIk1cTQIEmSamJokCRJNTE0SJKkmhga\nJElSTQwNkiSpJoYGSZJUE0ODJEmqiaFBkiTVxNAgSZJqYmiQJEk1MTRIkqSaGBokSVJNDA2SJKkm\nhgZJklQTQ4MkSaqJoUGSJNXE0DBBdHd3l11CU7XT+bTTuYDnM5G107mA59OOGgoNEXFWRDwQEc9H\nxJKIOGSU8Z+IiFURsSEiHo6ISyNi+wE//2xELI2IpyNiTURcFxH7N1Jbq2q3/zG20/m007mA5zOR\ntdO5gOfTjuoODRFxCnAJcB5wEHAnsDAiZg0z/kPAl6vj/xQ4DTgFuHDAsKOBrwOHAe8ApgM/j4gd\n661PkiSNj2kN7NMFXJmZCwAi4kzg3RRh4OIhxh8BLMrMH1XfPxwR3cCh/QMy810Dd4iIjwJPAB3A\nogZqlCRJTVbXTENETKf4IP9F/7bMTOBminAwlNuAjv4ljIjYB3gXcOMIv2oXIIE/1FOfJEkaP/XO\nNMwCpgJrBm1fA7xxqB0ys7u6dLEoIqK6/7cy8ytDja+O+RrF7MQ9w9SxA8DKlSvrLH/iWr9+Pb29\nvWWX0TTtdD7tdC7g+Uxk7XQu4PlMVAM+O3eoe+fMrPkF7An0AYcN2n4xcNsw+7wdWA18DDgAeB/w\nEPD5Ycb/HfA7YM8R6vgQxUyEL1++fPny5aux14fqyQCZWfdMwzpgC7DHoO278/LZh37nAwsy8/vV\n93dHxE7AlcCXBg6MiG9QLF0cnZmrR6hjIfBh4EHghXpOQJKkSW4H4PUUn6V1qSs0ZOamiFgOHA9c\nD39cTjgeuHyY3WZQzE4M1FfdNao9Ef2B4X3A2zLz4VHqeBL4h3pqlyRJf3RbIzs1cvXEpcDV1fCw\nlOJqihnAVQARsQB4NDPPrY6/AeiKiBXAHcB+FLMPPx0QGK4AOoH3As9FRP9MxvrMdCZBkqQJoO7Q\nkJnXVhsbz6dYplgBzM/MtdUhs4HNA3a5gGJm4QJgb2AtxSzF5weMOZNifaVn0K/7GLCg3holSVLz\nRfXLviRJ0oh89oQkSaqJoUGSJNWkJUNDvQ/Mmqgi4uiIuD4iHouIvoh4b9k1NardHjoWEWdGxJ0R\nsb76ui0i/rzsupqh+t+qLyIuLbuWRkTEedX6B76GuxFcS4iIvSLiBxGxrvpgvzsjYl7ZdTWi+nfz\n4P8+fRHx9bJrq1dETImICyLid9X/LvdHxOdH33PiioidIuJrEfFg9ZwWRcTBte7fcqGh3gdmTXCv\noGgkPYuiEbSVtdtDxx4B/pritukdwL8AP42IOaVWNUbVgH0Gxf9vWtlvKBqxX1N9HVVuOY2LiF2A\nxcBGYD4wBzgHeKrMusbgYF767/Ia4ASKv9+uLbOoBn0G+E/Af6Z44OKngU9HxF+VWtXYfJfiNgkf\nBv4M+Gfg5ojYs5adW64RMiKWAHdk5tnV90HxF/zlmTnUA7NaQkT0Ae/PzOvLrqUZqiHuCeCYzGyL\nh45FxJPApwbcqKylVG+qthz4OPAF4FeZ+clyq6pfRJwHvC8zW/Kb+GARcRFwRGa+rexaxkNEfA14\nV2a23MxjRNwA/D4zzxiw7cfAhsz8SHmVNSYidgCeAd6TmT8bsH0ZcFNmfnG0Y7TUTEODD8xSOdrm\noWPVKcoPUtyP5Pay6xmDbwI3ZOa/lF1IE+xXXdb7bURcExGvLbugMXgPsCwirq0u7fVGxOllF9UM\n1b+zP0zx7bYV3QYcHxH7AUTEXOBI4KZSq2rcNIrnP20ctP15apyta+TmTmWq+4FZ2vZqfOjYhBcR\nf0YREvrT+UmZuarcqhpTDT0HUkwdt7olwEeBeymeh/PfgVsi4s8y87kS62rUPhSzP5cAF1Is8V0e\nES9k5jWlVjZ2JwEzgavLLqRBFwGvBFZFxBaKL9qfy8wflltWYzLz2Yi4HfhCRKyi+Oz8EMWX7vtq\nOUarhYbhBK3fE9BOrgDeRJHIW9kqYC7FrMnJwIKIOKbVgkNEzKYIcSdk5qay6xmrzBx4v/zfRMRS\niofg/QXQiktHU4ClmfmF6vs7I+IAiiDR6qHhNOD/Zubvyy6kQadQfKh+ELiHInj/bUQ8npk/KLWy\nxp0KfA94jOJGjL0Uj2Woabmv1UJDIw/M0jZUx0PHJrzM3EzxxFWA3og4FDib4i/zVtIB7AYsr84C\nQTFjd0y1oWv7bLXmpgEyc31E/Cuwb9m1NGg1sHLQtpXAB0qopWki4t9RNEW/v+xaxuBi4G8y8x+r\n7++OiNcDnwVaMjRk5gPAsdUm9Vdm5pqI+CHwQC37t1RPQ/VbUv8Ds4CtHpjV0MM31DwDHjp27GgP\nHWtRU4Dtyy6iATcDb6b4ljS3+lpG8S12bisHBvhjg+efUHz4tqLFvHx59Y0Usyet7DSKL3Otuv4P\nRR/T4P9/9NFin51Dycznq4HhVRRX7fxTLfu12kwDjPLArFYSEa+g+HbU/+1vn2qjzR8y85HyKqtf\ntNlDxyLiQuD/UlyZszNFM9fbgBPLrKsR1XX+rXpLIuI54MnMHPwNd8KLiK9SPAjvIYrn2fwPimnW\n7jLrGoPLgMUR8VmKyxIPA06nuDS2JVW/zH0UuCozBz/luJXcAHwuIh4B7qaYwu8CvlNqVWMQESdS\nfObcS/EAyYspZrauqmX/lgsNNTwwq5UcDPw/iiSbFI1QUDQNnVZWUQ1qt4eO7UFR957AeuDXwIlt\ncuUBtHYP0GyKNdhdKR6Atwg4PDOfLLWqBmXmsog4iaLp7gsU08Rnt2qzXdU7gNfSmj0mA/0VxcMW\nv0mxDP448HfVba1qJvBlisD9B+DHwOczc0stO7fcfRokSVI5Wn5dRpIkbRuGBkmSVBNDgyRJqomh\nQZIk1cTQIEmSamJokCRJNTE0SJKkmhgaJElSTQwNkiSpJoYGSZJUE0ODJEmqyf8HKiSLHAfGf6YA\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.logs['accuracy'])" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.logs['deviance'])" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nX/YAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(lgam.logs['diffs'])" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model Statistics\n", "-----------------\n", "edof 81.091\n", "AIC 2190.992\n", "AICc 2192.368\n", "UBRE 2.365\n", "\n", "Pseudo-R^2\n", "----------------------\n", "mcfadden 0.771\n", "mcfadden_adj 0.752\n", "cox_snell 0.494\n", "nagelkerke 0.842\n" ] } ], "source": [ "lgam.summary()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.95550000000000002" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lgam.accuracy(x, obs)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "LogisticGAM(lam=0.6, n_iter=100, n_knots=20, spline_order=4, \n", " callbacks=[Deviance(), Diffs(), Accuracy()], tol=1e-05, \n", " penalty_matrix='auto')" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LogisticGAM()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "o" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" }, "toc": { "toc_cell": false, "toc_number_sections": true, "toc_threshold": 6, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 0 } PKTJpygam/tests/__init__.pyPK"J;- - pygam/tests/conftest.py# -*- coding: utf-8 -*- import pytest import pandas as pd import numpy as np from pygam import * @pytest.fixture def mcycle(): # y is real # recommend LinearGAM motor = pd.read_csv('datasets/mcycle.csv', index_col=0) X = motor.times.values y = motor.accel return X, y @pytest.fixture def coal(): # y is counts # recommend PoissonGAM coal = pd.read_csv('datasets/coal.csv', index_col=0) y, x = np.histogram(coal.values, bins=150) X = x[:-1] + np.diff(x)/2 # get midpoints of bins return X, y @pytest.fixture def faithful(): # y is counts # recommend PoissonGAM faithful = pd.read_csv('datasets/faithful.csv', index_col=0) y, x = np.histogram(faithful.values, bins=200) X = x[:-1] + np.diff(x)/2 # get midpoints of bins return X, y @pytest.fixture def wage(): # y is real # recommend LinearGAM wage = pd.read_csv('datasets/wage.csv', index_col=0) X = wage[['year', 'age', 'education']].values X[:,-1] = np.unique(X[:,-1], return_inverse=True)[1] y = wage['wage'].values return X, y @pytest.fixture def trees(): # y is real. # recommend InvGaussGAM, or GAM(distribution='gamma', link='log') trees = pd.read_csv('datasets/trees.csv', index_col=0) y = trees.Volume.values X = trees[['Girth', 'Height']].values return X, y @pytest.fixture def default(): # y is binary # recommend LogisticGAM default = pd.read_csv('datasets/default.csv', index_col=0) default = default.values default[:,0] = np.unique(default[:,0], return_inverse=True)[1] default[:,1] = np.unique(default[:,1], return_inverse=True)[1] X = default[:,1:] y = default[:,0] return X, y @pytest.fixture def cake(): # y is real # recommend LinearGAM cake = pd.read_csv('datasets/cake.csv', index_col=0) X = cake[['recipe', 'replicate', 'temperature']].values X[:,0] = np.unique(cake.values[:,1], return_inverse=True)[1] X[:,1] -= 1 y = cake['angle'].values return X, y @pytest.fixture def hepatitis(): # y is real # recommend LinearGAM hep = pd.read_csv('datasets/hepatitis_A_bulgaria.csv').astype(float) # eliminate 0/0 mask = (hep.total > 0).values hep = hep[mask] X = hep.age.values y = hep.hepatitis_A_positive.values / hep.total.values return X, y PK"J2pygam/tests/test_GAM_methods.py# -*- coding: utf-8 -*- import sys import numpy as np import pytest from pygam import * @pytest.fixture def mcycle_gam(mcycle): X, y = mcycle gam = LinearGAM().fit(X,y) return gam def test_LinearGAM_pdeps_shape(wage): """ check that we get the expected number of partial dependence functions """ X, y = wage gam = LinearGAM().fit(X, y) pdeps = gam.partial_dependence(X) assert(X.shape == pdeps.shape) def test_LinearGAM_prediction(mcycle, mcycle_gam): """ check that we the predictions we get are correct shape """ X, y = mcycle preds = mcycle_gam.predict(X) assert(preds.shape == y.shape) def test_LogisticGAM_accuracy(default): """ check that we can compute accuracy correctly """ X, y = default gam = LogisticGAM().fit(X, y) preds = gam.predict(X) acc0 = (preds == y).mean() acc1 = gam.accuracy(X, y) assert(acc0 == acc1) def test_summary(mcycle, mcycle_gam): """ check that we can get a summary if we've fitted the model, else not """ X, y = mcycle gam = LinearGAM() try: gam.summary() except AttributeError: assert(True) mcycle_gam.summary() assert(True) def test_more_splines_than_samples(mcycle): """ check that gridsearch returns the expected number of models """ X, y = mcycle n = len(X) gam = LinearGAM(n_splines=n+1).fit(X, y) assert(gam._is_fitted) def test_deviance_residuals(mcycle, mcycle_gam): """ for linear GAMs, the deviance residuals should be equal to the y - y_pred """ X, y = mcycle res = mcycle_gam.deviance_residuals(X, y) err = y - mcycle_gam.predict(X) assert((res == err).all()) def test_conf_intervals_return_array(mcycle, mcycle_gam): """ make sure that the confidence_intervals method returns an array """ X, y = mcycle conf_ints = mcycle_gam.confidence_intervals(X) assert(conf_ints.ndim == 2) def test_conf_intervals_quantiles_width_interchangable(mcycle, mcycle_gam): """ getting confidence_intervals via width or specifying quantiles should return the same result """ X, y = mcycle conf_ints_a = mcycle_gam.confidence_intervals(X, width=.9) conf_ints_b = mcycle_gam.confidence_intervals(X, quantiles=[.05, .95]) assert(np.allclose(conf_ints_a, conf_ints_b)) def test_conf_intervals_ordered(mcycle, mcycle_gam): """ comfidence intervals returned via width should be ordered """ X, y = mcycle conf_ints = mcycle_gam.confidence_intervals(X) assert((conf_ints[:,0] <= conf_ints[:,1]).all()) def test_partial_dependence_on_univar_data(mcycle, mcycle_gam): """ partial dependence with univariate data should equal the overall model if fit intercept is false """ X, y = mcycle gam = LinearGAM(fit_intercept=False).fit(X,y) pred = gam.predict(X) pdep = gam.partial_dependence(X) assert((pred == pdep.ravel()).all()) def test_partial_dependence_on_univar_data2(mcycle, mcycle_gam): """ partial dependence with univariate data should NOT equal the overall model if fit intercept is false """ X, y = mcycle gam = LinearGAM(fit_intercept=True).fit(X,y) pred = gam.predict(X) pdep = gam.partial_dependence(X) assert((pred != pdep.ravel()).all()) def test_partial_dependence_feature_doesnt_exist(mcycle, mcycle_gam): """ partial dependence should raise ValueError when requesting a nonexistent feature """ X, y = mcycle try: mcycle_gam.partial_dependence(X, feature=10) except ValueError: assert(True) def test_summary_returns_12_lines(mcycle_gam): """ check that the summary method works and returns 12 lines like: 'Model Statistics', '-----------------', 'edof 12.376', 'AIC 1223.761', 'AICc 1227.003', 'GCV 624.359', 'scale 520.733', '', 'Pseudo-R^2', '----------------------------', 'explained_deviance 0.796', '' """ if sys.version_info.major == 2: from StringIO import StringIO if sys.version_info.major == 3: from io import StringIO stdout = sys.stdout #keep a handle on the real standard output sys.stdout = StringIO() #Choose a file-like object to write to mcycle_gam.summary() assert(len(sys.stdout.getvalue().split('\n')) == 12) def test_is_fitted_predict(mcycle): """ test predict requires fitted model """ X, y = mcycle gam = LinearGAM() try: gam.predict(X) except AttributeError: assert(True) def test_is_fitted_predict_mu(mcycle): """ test predict_mu requires fitted model """ X, y = mcycle gam = LinearGAM() try: gam.predict_mu(X) except AttributeError: assert(True) def test_is_fitted_dev_resid(mcycle): """ test deviance_residuals requires fitted model """ X, y = mcycle gam = LinearGAM() try: gam.deviance_residuals(X, y) except AttributeError: assert(True) def test_is_fitted_conf_intervals(mcycle): """ test confidence_intervals requires fitted model """ X, y = mcycle gam = LinearGAM() try: gam.confidence_intervals(X) except AttributeError: assert(True) def test_is_fitted_pdep(mcycle): """ test partial_dependence requires fitted model """ X, y = mcycle gam = LinearGAM() try: gam.partial_dependence(X) except AttributeError: assert(True) def test_is_fitted_summary(mcycle): """ test summary requires fitted model """ X, y = mcycle gam = LinearGAM() try: gam.summary() except AttributeError: assert(True) def test_set_params_with_external_param(): """ test set_params sets a real parameter """ gam = GAM(lam=1) gam.set_params(lam=420) assert(gam.lam == 420) def test_set_params_with_hidden_param(): """ test set_params should not set any params that are not exposed to the user """ gam = GAM() gam.set_params(_lam=420) assert(gam._lam != 420) def test_set_params_with_phony_param(): """ test set_params should not set any phony param """ gam = GAM() gam.set_params(cat=420) assert(not hasattr(gam, 'cat')) def test_set_params_with_hidden_param_deep(): """ test set_params can set hidden params if we use the deep=True """ gam = GAM() assert(gam._lam != 420) gam.set_params(_lam=420, deep=True) assert(gam._lam == 420) def test_set_params_with_phony_param_force(): """ test set_params can set phony params if we use the force=True """ gam = GAM() assert(not hasattr(gam, 'cat')) gam.set_params(cat=420, force=True) assert(gam.cat == 420) def test_get_params(): """ test gam gets our params """ gam = GAM(lam=420) params = gam.get_params() assert(params['lam'] == 420) def test_get_params_hidden(): """ test gam gets our params only if we do deep=True """ gam = GAM() params = gam.get_params() assert('_lam' not in list(params.keys())) params = gam.get_params(deep=True) assert('_lam' in list(params.keys())) # TODO test linear gam pred intervals PK"J= pygam/tests/test_GAM_params.py# -*- coding: utf-8 -*- import numpy as np import pytest from pygam import * def test_expand_params(cake): """ check that gam expands lam, dtype, n_splines, fit_linear, fit_splines penalties, spline_order """ X, y = cake m = X.shape[1] gam = LinearGAM().fit(X, y) for param in ['dtype', 'n_splines', 'spline_order', 'fit_linear', 'fit_splines', 'penalties',]: assert(len(getattr(gam, '_' + param)) == m) assert(len(gam._lam) == (m + gam.fit_intercept)) def test_lam_non_neg_array_like(cake): """ lambda must be a non-negative float or array of floats """ X, y = cake try: gam = LinearGAM(lam=-1).fit(X, y) except ValueError: assert(True) try: gam = LinearGAM(lam=['hi']).fit(X, y) except ValueError: assert(True) def test_wrong_length_param(cake): """ If input param is iterable, then it must have have length equal to the number of features. """ X, y = cake m = X.shape[1] n_splines = [20] * (m+1) gam = LinearGAM(n_splines=n_splines) try: gam.fit(X, y) except ValueError: n_splines = [20] * (m) gam = LinearGAM(n_splines=n_splines).fit(X, y) assert(True) def test_penalties_must_be_or_contain_callable_or_auto(mcycle): """ penalty matrix must be/contain callable or auto, otherwise raise ValueError """ X, y = mcycle gam = LinearGAM(penalties='continuous') try: gam.fit(X, y) except ValueError: gam = LinearGAM(penalties='auto').fit(X, y) assert(True) # now do iterable gam = LinearGAM(penalties=['continuous']) try: gam.fit(X, y) except ValueError: gam = LinearGAM(penalties=['auto']).fit(X, y) assert(True) def test_line_or_spline(mcycle): """ a line or spline must be fit on each feature """ X, y = mcycle gam = LinearGAM(fit_linear=False ,fit_splines=False) try: gam.fit(X, y) except ValueError: gam = LinearGAM(fit_linear=False ,fit_splines=True).fit(X, y) assert(True) def test_linear_regression(mcycle): """ should be able to do linear regression """ X, y = mcycle gam = LinearGAM(fit_linear=True, fit_splines=False).fit(X, y) assert(gam._is_fitted) def test_compute_stats_even_if_not_enough_iters(default): """ should be able to do linear regression """ X, y = default gam = LogisticGAM(max_iter=1).fit(X, y) assert(hasattr(gam, 'statistics_')) # TODO categorical dtypes get no fit linear even if fit linear TRUE # TODO categorical dtypes get their own number of splines # TODO can force continuous dtypes on categorical vars if wanted # TODO WHO WINS??!?!! fit_splines=False or n_splines=0 PKJNjer66pygam/tests/test_GAMs.py# -*- coding: utf-8 -*- import pytest from pygam import * def test_can_build_sub_models(): """ check that the inits of all the sub-models are correct """ LinearGAM() LogisticGAM() PoissonGAM() GammaGAM() InvGaussGAM() assert(True) def test_LinearGAM_uni(mcycle): """ check that we can fit a Linear GAM on real, univariate data """ X, y = mcycle gam = LinearGAM().fit(X, y) assert(gam._is_fitted) def test_LinearGAM_multi(wage): """ check that we can fit a Linear GAM on real, multivariate data """ X, y = wage gam = LinearGAM().fit(X, y) assert(gam._is_fitted) def test_LogisticGAM(default): """ check that we can fit a Logistic GAM on real data """ X, y = default gam = LogisticGAM().fit(X, y) assert(gam._is_fitted) def test_PoissonGAM(coal): """ check that we can fit a Poisson GAM on real data """ X, y = coal gam = PoissonGAM().fit(X, y) assert(gam._is_fitted) def test_InvGaussGAM(trees): """ check that we can fit a InvGauss GAM on real data """ X, y = trees gam = InvGaussGAM().fit(X, y) assert(gam._is_fitted) def test_GammaGAM(trees): """ check that we can fit a Gamma GAM on real data """ X, y = trees gam = GammaGAM().fit(X, y) assert(gam._is_fitted) def test_CustomGAM(trees): """ check that we can fit a Custom GAM on real data """ X, y = trees gam = GAM(distribution='gamma', link='log').fit(X, y) assert(gam._is_fitted) # TODO check dicts: DISTRIBUTIONS etc PKJ bbpygam/tests/test_core.py# -*- coding: utf-8 -*- import numpy as np import pytest from pygam.core import * def test_Core_class(): """ test attributes of core class """ c = Core() assert(c._name == None) c = Core(name='cat', line_width=70, line_offset=3) assert(c._name == 'cat') assert(c._line_width == 70) assert(c._line_offset == 3) def test_nice_repr(): """ test a simple repr for a fake object """ param_kvs = {} out = nice_repr('hi', param_kvs, line_width=30, line_offset=5, decimals=3) assert(out == "hi()") def test_nice_repr_more_attrs(): """ test a simple repr for a fake object with more attrs """ param_kvs = {'color': 'blue', 'n_ears': 3, 'height':1.3336} out = nice_repr('hi', param_kvs, line_width=60, line_offset=5, decimals=3) assert(out == "hi(color='blue', height=1.334, n_ears=3)") PKJ!pygam/tests/test_gridsearch.py# -*- coding: utf-8 -*- import numpy as np import pytest from pygam import * def test_gridsearch_returns_scores(mcycle): """ check that gridsearch returns the expected number of models """ n = 5 X, y = mcycle gam = LinearGAM() scores = gam.gridsearch(X, y, lam=np.logspace(-3,3, n), return_scores=True) assert(len(scores) == n) def test_gridsearch_returns_extra_score_if_fitted(mcycle): """ check that gridsearch returns an extra score if our model is pre-fitted """ n = 5 X, y = mcycle gam = LinearGAM().fit(X, y) scores = gam.gridsearch(X, y, lam=np.logspace(-3,3, n), return_scores=True) assert(len(scores) == n + 1) def test_gridsearch_keep_best(mcycle): """ check that gridsearch returns worse model if keep_best=False """ n = 5 X, y = mcycle gam = LinearGAM(lam=1000000).fit(X, y) score1 = gam.statistics_['GCV'] scores = gam.gridsearch(X, y, lam=np.logspace(-3,3, n), keep_best=False, return_scores=True) assert(np.min(list(scores.values())) < score1) def test_gridsearch_improves_objective(mcycle): """ check that gridsearch improves model objective """ n = 11 X, y = mcycle gam = LinearGAM().fit(X, y) objective_0 = gam.statistics_['GCV'] gam = LinearGAM().gridsearch(X, y, lam=np.logspace(-3,3, n)) objective_1 = gam.statistics_['GCV'] assert(objective_1 <= objective_0) def test_gridsearch_all_dimensions_same(cake): """ check that gridsearch searches all dimensions of lambda with equal values """ n = 5 X, y = cake scores = LinearGAM().gridsearch(X, y, lam=np.logspace(-3,3, n), return_scores=True) assert(len(scores) == n) assert(X.shape[1] > 1) def test_gridsearch_all_dimensions_independent(cake): """ check that gridsearch searches all dimensions of lambda independently """ n = 3 X, y = cake m = X.shape[1] scores = LinearGAM().gridsearch(X, y, lam=[np.logspace(-3,3, n)]*m, return_scores=True) assert(len(scores) == n**m) assert(m > 1) def test_GCV_objective_is_for_unknown_scale(mcycle, default, coal, trees): """ check that we use the GCV objective only for models with unknown scale & attempting to use it for models with known scale should return ValueError """ lam = np.linspace(1e-3, 1e3, 2) unknown_scale = [(LinearGAM, mcycle), (GammaGAM, trees), (InvGaussGAM, trees)] known_scale = [(LogisticGAM, default), (PoissonGAM, coal)] for gam, (X, y) in unknown_scale: scores1 = list(gam().gridsearch(X, y, lam=lam, objective='auto', return_scores=True).values()) scores2 = list(gam().gridsearch(X, y, lam=lam, objective='GCV', return_scores=True).values()) assert(np.allclose(scores1, scores2)) for gam, (X, y) in known_scale: try: list(gam().gridsearch(X, y, lam=lam, objective='GCV', return_scores=True).values()) except ValueError: assert(True) def test_UBRE_objective_is_for_known_scale(mcycle, default, coal, trees): """ check that we use the UBRE objective only for models with known scale & attempting to use it for models with unknown scale should return ValueError """ lam = np.linspace(1e-3, 1e3, 2) unknown_scale = [(LinearGAM, mcycle), (GammaGAM, trees), (InvGaussGAM, trees)] known_scale = [(LogisticGAM, default), (PoissonGAM, coal)] for gam, (X, y) in known_scale: scores1 = list(gam().gridsearch(X, y, lam=lam, objective='auto', return_scores=True).values()) scores2 = list(gam().gridsearch(X, y, lam=lam, objective='UBRE', return_scores=True).values()) assert(np.allclose(scores1, scores2)) for gam, (X, y) in unknown_scale: try: list(gam().gridsearch(X, y, lam=lam, objective='UBRE', return_scores=True).values()) except ValueError: assert(True) def test_no_models_fitted(mcycle): """ test no models fitted returns orginal gam """ X, y = mcycle scores = LinearGAM().gridsearch(X, y, lam=[-3, -2,-1], return_scores=True) # scores is not a dict of scores but an (unfitted) gam! assert(not isinstance(scores, dict)) assert(isinstance(scores, LinearGAM)) assert(not scores._is_fitted) PK"JRHO O pygam/tests/test_penalties.py# -*- coding: utf-8 -*- import numpy as np import pytest from pygam import * from pygam.penalties import derivative from pygam.penalties import l2 from pygam.penalties import monotonic_inc from pygam.penalties import monotonic_dec from pygam.penalties import convex from pygam.penalties import concave from pygam.penalties import circular from pygam.penalties import none from pygam.penalties import wrap_penalty from pygam.utils import generate_X_grid def test_single_spline_penalty(): """ check that feature functions with only 1 basis are penalized correctly derivative penalty should be 0. l2 should penalty be 1. monotonic_ and convexity_ should be 0. """ coef = np.array(1.) assert(np.alltrue(derivative(1, coef).A == 0.)) assert(np.alltrue(l2(1, coef).A == 1.)) assert(np.alltrue(monotonic_inc(1, coef).A == 0.)) assert(np.alltrue(monotonic_dec(1, coef).A == 0.)) assert(np.alltrue(convex(1, coef).A == 0.)) assert(np.alltrue(concave(1, coef).A == 0.)) assert(np.alltrue(circular(1, coef).A == 0.)) assert(np.alltrue(none(1, coef).A == 0.)) def test_wrap_penalty(): """ check that wrap penalty indeed reduces inserts the desired penalty into the linear term when fit_linear is True, and 0, when fit_linear is False. """ coef = np.array(1.) n = 2 linear_penalty = -1 fit_linear = True p = wrap_penalty(none, fit_linear, linear_penalty=linear_penalty) P = p(n, coef).A assert(P.sum() == linear_penalty) fit_linear = False p = wrap_penalty(none, fit_linear, linear_penalty=linear_penalty) P = p(n, coef).A assert(P.sum() == 0.) def test_monotonic_inc(hepatitis): """ check that monotonic_inc constraint produces monotonic increasing function """ X, y = hepatitis gam = LinearGAM(constraints='monotonic_inc') gam.fit(X, y) XX = generate_X_grid(gam) Y = gam.predict(np.sort(XX)) diffs = np.diff(Y, n=1) assert(((diffs >= 0) + np.isclose(diffs, 0.)).all()) def test_monotonic_dec(hepatitis): """ check that monotonic_dec constraint produces monotonic decreasing function """ X, y = hepatitis gam = LinearGAM(constraints='monotonic_dec') gam.fit(X, y) XX = generate_X_grid(gam) Y = gam.predict(np.sort(XX)) diffs = np.diff(Y, n=1) assert(((diffs <= 0) + np.isclose(diffs, 0.)).all()) def test_convex(hepatitis): """ check that convex constraint produces convex function """ X, y = hepatitis gam = LinearGAM(constraints='convex') gam.fit(X, y) XX = generate_X_grid(gam) Y = gam.predict(np.sort(XX)) diffs = np.diff(Y, n=2) assert(((diffs >= 0) + np.isclose(diffs, 0.)).all()) def test_concave(hepatitis): """ check that concave constraint produces concave function """ X, y = hepatitis gam = LinearGAM(constraints='concave') gam.fit(X, y) XX = generate_X_grid(gam) Y = gam.predict(np.sort(XX)) diffs = np.diff(Y, n=2) assert(((diffs <= 0) + np.isclose(diffs, 0.)).all()) # TODO penalties gives expected matrix structure # TODO circular constraints PKJ"pygam/tests/test_utils.py# -*- coding: utf-8 -*- import numpy as np import pytest from pygam import * # TODO check dtypes works as expected # TODO checkX, checky, check XY expand as needed, call out bad domain PKYJœ%pygam/tests/.cache/v/cache/lastfailed{ "test_GAM_methods.py::test_LinearGAM_pdeps_shape": true, "test_GAM_methods.py::test_LinearGAM_prediction": true, "test_GAM_methods.py::test_LogisticGAM_accuracy": true, "test_GAM_methods.py::test_conf_intervals_return_array": true, "test_GAM_methods.py::test_deviance_residuals": true, "test_GAM_methods.py::test_more_splines_than_samples": true, "test_GAM_methods.py::test_summary": true }PK!H|&Ubpygam-0.2.11.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,Q034 /, (-JLR()*M ILR(4KM̫#DPK!H oZpygam-0.2.11.dist-info/METADATAn0E .ۅnMNP>C x;\ 'HY`Pp?*0R.ł1F7O؝3xP5:EiV:ӝ mI{={ͅS܀b%,JB+OD/$TipA[0~  -4ݏ~*D없K/,ޏD\xk;~ogA4&y+eߞW_?5{r@z~[U~ C McPL1pR[)xÌn0=,}/(i9 ApFRS.=I$7^o[h'+E>GZ/ ydDwgh[)!FܟQضHNE6l8u@)S ~2~ NʲeP =Rv_#6v"i E@(8O/ɑ;$ YQX9#f&WVx$L\oFQi+,z,]5[rӺM/bY˧]Vf+><H_c}aU"Nf|o(j ybuVx,Ram tGTaPעu;>1(wwR u{ ާ(|§%V8N%cE٘§5`HGK3(&Uv~~O,ajT\SnvHg@bR D"M=kwhHnL6GF+MeGX9n~aB(#k[ PKiJjmpygam/.DS_StorePKcMJIX1pygam/__init__.pyPK"Jt