def _compute_coefs(self, xx, yy, p=None, var=1): x, y = np.atleast_1d(xx, yy) x = x.ravel() dx = np.diff(x) must_sort = (dx < 0).any() if must_sort: ind = x.argsort() x = x[ind] y = y[..., ind] dx = np.diff(x) n = len(x) # ndy = y.ndim szy = y.shape nd = prod(szy[:-1]) ny = szy[-1] if n < 2: raise ValueError('There must be >=2 data points.') elif (dx <= 0).any(): raise ValueError('Two consecutive values in x can not be equal.') elif n != ny: raise ValueError('x and y must have the same length.') dydx = np.diff(y) / dx if (n == 2): # % straight line coefs = np.vstack([dydx.ravel(), y[0, :]]) else: dx1 = 1. / dx D = sparse.spdiags(var * ones(n), 0, n, n) # The variance u, p = self._compute_u(p, D, dydx, dx, dx1, n) dx1.shape = (n - 1, -1) dx.shape = (n - 1, -1) zrs = zeros(nd) if p < 1: # faster than yi-6*(1-p)*Q*u Qu = D * diff(vstack( [zrs, diff(vstack([zrs, u, zrs]), axis=0) * dx1, zrs]), axis=0) ai = (y - (6 * (1 - p) * Qu).T).T else: ai = y.reshape(n, -1) # The piecewise polynominals are written as # fi=ai+bi*(x-xi)+ci*(x-xi)^2+di*(x-xi)^3 # where the derivatives in the knots according to Carl de Boor are: # ddfi = 6*p*[0;u] = 2*ci; # dddfi = 2*diff([ci;0])./dx = 6*di; # dfi = diff(ai)./dx-(ci+di.*dx).*dx = bi; ci = np.vstack([zrs, 3 * p * u]) di = (diff(vstack([ci, zrs]), axis=0) * dx1 / 3) bi = (diff(ai, axis=0) * dx1 - (ci + di * dx) * dx) ai = ai[:n - 1, ...] if nd > 1: di = di.T ci = ci.T ai = ai.T if not any(di): if not any(ci): coefs = vstack([bi.ravel(), ai.ravel()]) else: coefs = vstack([ci.ravel(), bi.ravel(), ai.ravel()]) else: coefs = vstack( [di.ravel(), ci.ravel(), bi.ravel(), ai.ravel()]) return coefs, x
def _compute_coefs(self, xx, yy, p=None, var=1): x, y = np.atleast_1d(xx, yy) x = x.ravel() dx = np.diff(x) must_sort = (dx < 0).any() if must_sort: ind = x.argsort() x = x[ind] y = y[..., ind] dx = np.diff(x) n = len(x) #ndy = y.ndim szy = y.shape nd = prod(szy[:-1]) ny = szy[-1] if n < 2: raise ValueError('There must be >=2 data points.') elif (dx <= 0).any(): raise ValueError('Two consecutive values in x can not be equal.') elif n != ny: raise ValueError('x and y must have the same length.') dydx = np.diff(y) / dx if (n == 2): # % straight line coefs = np.vstack([dydx.ravel(), y[0, :]]) else: dx1 = 1. / dx D = sp.spdiags(var * ones(n), 0, n, n) # The variance u, p = self._compute_u(p, D, dydx, dx, dx1, n) dx1.shape = (n - 1, -1) dx.shape = (n - 1, -1) zrs = zeros(nd) if p < 1: # faster than yi-6*(1-p)*Q*u ai = (y - (6 * (1 - p) * D * diff(vstack([zrs, diff(vstack([zrs, u, zrs]), axis=0) * dx1, zrs]), axis=0)).T).T else: ai = y.reshape(n, -1) # The piecewise polynominals are written as # fi=ai+bi*(x-xi)+ci*(x-xi)^2+di*(x-xi)^3 # where the derivatives in the knots according to Carl de Boor are: # ddfi = 6*p*[0;u] = 2*ci; # dddfi = 2*diff([ci;0])./dx = 6*di; # dfi = diff(ai)./dx-(ci+di.*dx).*dx = bi; ci = np.vstack([zrs, 3 * p * u]) di = (diff(vstack([ci, zrs]), axis=0) * dx1 / 3) bi = (diff(ai, axis=0) * dx1 - (ci + di * dx) * dx) ai = ai[:n - 1, ...] if nd > 1: di = di.T ci = ci.T ai = ai.T if not any(di): if not any(ci): coefs = vstack([bi.ravel(), ai.ravel()]) else: coefs = vstack([ci.ravel(), bi.ravel(), ai.ravel()]) else: coefs = vstack( [di.ravel(), ci.ravel(), bi.ravel(), ai.ravel()]) return coefs, x
feature_list = [] if options.features: print options.features feature_list = map(lambda s : int(s), options.features.split(',')) print feature_list if options.prefix: prefix = options.prefix #prefix = 'data/tallinn_201s_title_rdist_10000' X, y = load_data(prefix + '.train', feature_list=feature_list) #print y.shape #X, y = load_svmlight_file(prefix + '.train') testX, testY = load_data(prefix + '.test', feature_list=feature_list) X = vstack((X, testX)) X = preprocessing.scale(X) print X #y = vstack((y, testY)) #y = y + testY #y = y.transpose() #print y.shape, testY.shape y = hstack((y, testY)) print y if options.data: log('loading ' + str(options.data)) X, y = load_data(options.data, feature_list=feature_list) if False: pos_start = 0