... just lots of stuff
This commit is contained in:
+59
-50
@@ -18,6 +18,39 @@ from packer import Packer
|
||||
import blmplots
|
||||
|
||||
|
||||
class NewStyleModel(Function):
|
||||
def __init__(self, id='johndoe', name='JohnDoe'):
|
||||
Function.__init__(self, id, name)
|
||||
self.name = name
|
||||
self.options = Options
|
||||
self.input_data = []
|
||||
self.parts = {}
|
||||
self.io_table = {}
|
||||
self.datasets = []
|
||||
self.plots = []
|
||||
|
||||
def create_dataset(self, param, Dataset=Dataset):
|
||||
for ds in self.datasets:
|
||||
if ds.get_name()==param: return ds
|
||||
if not param in self.parts.keys():
|
||||
logger.log('notice', 'Parameter: %s not present' %param)
|
||||
return
|
||||
if not param in self.io_table.keys():
|
||||
logger.log('notice', 'Parameter: %s not in defined in io table' %param)
|
||||
|
||||
identifiers = self.io_table.get(param)
|
||||
data = self.parts.get(param)
|
||||
ds = Dataset(data, identifiers=identifiers, name=param)
|
||||
self.datasets.append(dataset)
|
||||
return ds
|
||||
|
||||
def create_plot(self, blmplot):
|
||||
if blmplot.validate_model(self.parts):
|
||||
plt = blmplot(self.parts)
|
||||
self.plots.append(plt)
|
||||
return plt
|
||||
|
||||
|
||||
class Model(Function):
|
||||
"""Base class of bilinear models.
|
||||
"""
|
||||
@@ -68,7 +101,7 @@ class PCA(Model):
|
||||
logger.log('notice', 'Aopt at first component!')
|
||||
|
||||
def confidence(self, aopt, n_sets, alpha, p_center,
|
||||
crot, strict, cov_center ):
|
||||
crot, strict, cov_center):
|
||||
"""Returns a confidence measure for model parameters.
|
||||
Based on aopt.
|
||||
|
||||
@@ -80,7 +113,7 @@ class PCA(Model):
|
||||
|
||||
jk_segments = pca_jkP(self.model['E0'], aopt, n_sets)
|
||||
Pcal = self.model['P'][:,:aopt]
|
||||
# add the scale to P
|
||||
# ensure scaled P
|
||||
tnorm = scipy.apply_along_axis(norm, 0, self.model['T'][:,:aopt])
|
||||
Pcal = Pcal*tnorm
|
||||
tsq = hotelling(jk_segments, Pcal, p_center,
|
||||
@@ -90,33 +123,14 @@ class PCA(Model):
|
||||
def make_model(self, amax, mode, scale):
|
||||
"""Model on optimal number of components.
|
||||
"""
|
||||
dat = pca(self.model['E0'], amax, scale, mode)
|
||||
|
||||
# explained variance
|
||||
var_x, exp_var_x = variances(self.model['E0'], dat['T'], dat['P'])
|
||||
dat['var_x'] = var_x
|
||||
dat['exp_var_x'] = exp_var_x
|
||||
|
||||
#fixme###
|
||||
do_lev_s = False
|
||||
do_lev_v = False
|
||||
#####
|
||||
if do_lev_s:
|
||||
# sample leverages
|
||||
tnorm = scipy.apply_along_axis(norm, 0, dat['T']) # norm of Ts
|
||||
s_lev = leverage(amax, tnorm)
|
||||
dat['s_lev'] = s_lev
|
||||
if do_lev_v:
|
||||
# variable leverages
|
||||
v_lev = leverage(amax, dat['P'])
|
||||
dat['v_lev'] = v_lev
|
||||
|
||||
dat = pca(self.model['E0'], amax, scale, mode)
|
||||
self.model.update(dat)
|
||||
|
||||
def as_dataset(self, param, dtype='dataset'):
|
||||
"""Return model parameter as Dataset.
|
||||
"""
|
||||
if not param in self.model.keys():
|
||||
logger.log('notice', 'Parameter: %s not in model' %param)
|
||||
return
|
||||
DX = self._dataset['X'] #input dataset
|
||||
dim_name_0, dim_name_1 = DX.get_dim_name()
|
||||
@@ -128,17 +142,18 @@ class PCA(Model):
|
||||
pc_ids = ['_amax', map(str,range(self._options['amax'])) ]
|
||||
pc_ids_opt = ['_aopt', map(str, range(self._options['aopt'])) ]
|
||||
zero_dim = ['_doe', ['0']] # null dim, vector (hidden)
|
||||
match_ids = {'E':[ids_0, ids_1],
|
||||
'E0':[ids_0, ids_1],
|
||||
'P':[ids_1, pc_ids],
|
||||
'T':[ids_0, pc_ids],
|
||||
'W':[ids_1, pc_ids],
|
||||
'p_tsq':[ids_1, zero_dim],
|
||||
'rmsep':[pc_ids, zero_dim],
|
||||
'var_leverages':[ids_1, zero_dim],
|
||||
'sample_leverages':[pc_ids, zero_dim],
|
||||
'exp_var_x': [pc_ids, zero_dim],
|
||||
'var_x': [pc_ids, zero_dim],
|
||||
match_ids = {'E' : [ids_0, ids_1],
|
||||
'E0' : [ids_0, ids_1],
|
||||
'P' : [ids_1, pc_ids],
|
||||
'T' : [ids_0, pc_ids],
|
||||
'W' : [ids_1, pc_ids],
|
||||
'p_tsq' : [ids_1, zero_dim],
|
||||
'rmsep' : [pc_ids, zero_dim],
|
||||
'var_leverages' : [ids_1, zero_dim],
|
||||
'sample_leverages' : [pc_ids, zero_dim],
|
||||
'exp_var_x' : [pc_ids, zero_dim],
|
||||
'var_x' : [pc_ids, zero_dim],
|
||||
'eigvals' : [pc_ids, zero_dim]
|
||||
}
|
||||
|
||||
out = Dataset(self.model[param], match_ids[param], name=param)
|
||||
@@ -256,7 +271,7 @@ class PLS(Model):
|
||||
def make_model(self, a, b, amax, scale, mode, engine):
|
||||
"""Make model on amax components.
|
||||
"""
|
||||
print "MAking model"
|
||||
print "Making model"
|
||||
dat = engine(a, b, amax, scale, mode)
|
||||
self.model.update(dat)
|
||||
|
||||
@@ -478,13 +493,6 @@ class LPLS(Model):
|
||||
self._data['Z'] = c.asarray()
|
||||
self.validation(options)
|
||||
self.make_model(options)
|
||||
print self.model['evx']
|
||||
evx_str = [str(i)[:3] for i in self.model['evx']]
|
||||
logger.log('notice', 'Explained variance:X\n\t: ' + str(evx_str))
|
||||
evy_str = [str(i)[:3] for i in self.model['evy']]
|
||||
logger.log('notice', 'Explained variance:Y\n\t: ' + str(evy_str))
|
||||
evz_str = [str(i)[:3] for i in self.model['evz']]
|
||||
logger.log('notice', 'Explained variance:Z\n\t: ' + str(evz_str))
|
||||
|
||||
if options['calc_conf']:
|
||||
self.confidence(options)
|
||||
@@ -553,13 +561,15 @@ class PcaOptions(Options):
|
||||
opt['all_plots'] = [(blmplots.PcaScorePlot, 'Scores', True),
|
||||
(blmplots.PcaLoadingPlot, 'Loadings', True),
|
||||
(blmplots.LineViewXc, 'Line view', True),
|
||||
(blmplots.PredictionErrorPlot, 'Residual Error', False)
|
||||
(blmplots.PredictionErrorPlot, 'Residual Error', False),
|
||||
(blmplots.PcaScreePlot, 'Scree', True)
|
||||
]
|
||||
|
||||
opt['out_data'] = ['T','P', 'p_tsq']
|
||||
opt['out_plots'] = [blmplots.PcaScorePlot,
|
||||
blmplots.PcaLoadingPlot,
|
||||
blmplots.LineViewXc]
|
||||
blmplots.LineViewXc,
|
||||
blmplots.PcaScreePlot]
|
||||
|
||||
self.update(opt)
|
||||
|
||||
@@ -621,7 +631,8 @@ class PlsOptions(Options):
|
||||
|
||||
# (class, name, sensitive, ticked)
|
||||
opt['all_plots'] = [(blmplots.PlsScorePlot, 'Scores', True),
|
||||
(blmplots.PlsLoadingPlot, 'Loadings', True),
|
||||
(blmplots.PlsXLoadingPlot, 'X-Loadings', True),
|
||||
(blmplots.PlsYLoadingPlot, 'Y-Loadings', True),
|
||||
(blmplots.LineViewXc, 'Line view', True),
|
||||
(blmplots.PredictionErrorPlot, 'Residual Error', False),
|
||||
(blmplots.RMSEPPlot, 'RMSEP', False),
|
||||
@@ -629,7 +640,7 @@ class PlsOptions(Options):
|
||||
]
|
||||
|
||||
opt['out_data'] = ['T','P', 'w_tsq']
|
||||
opt['out_plots'] = [blmplots.PlsScorePlot,blmplots.PlsLoadingPlot,blmplots.LineViewXc]
|
||||
opt['out_plots'] = [blmplots.PlsScorePlot,blmplots.PlsXLoadingPlot,blmplots.PlsYLoadingPlot,blmplots.LineViewXc]
|
||||
|
||||
#opt['out_data'] = None
|
||||
|
||||
@@ -699,11 +710,9 @@ class LplsOptions(Options):
|
||||
]
|
||||
|
||||
# (class, name, sensitive, ticked)
|
||||
opt['all_plots'] = [(blmplots.PlsScorePlot, 'Scores', True),
|
||||
(blmplots.PlsLoadingPlot, 'Loadings', True),
|
||||
opt['all_plots'] = [(blmplots.LplsScorePlot, 'Scores', True),
|
||||
(blmplots.LplsXLoadingPlot, 'Loadings', True),
|
||||
(blmplots.LineViewXc, 'Line view', True),
|
||||
(blmplots.PredictionErrorPlot, 'Residual Error', False),
|
||||
(blmplots.RMSEPPlot, 'RMSEP', False),
|
||||
(blmplots.LplsHypoidCorrelationPlot, 'Hypoid corr.', False),
|
||||
(blmplots.LplsXCorrelationPlot, 'X corr.', True),
|
||||
(blmplots.LplsZCorrelationPlot, 'Z corr.', True)
|
||||
|
||||
Reference in New Issue
Block a user