Пример #1
0
    def apply_as_distribution(self, model):
        if model.kind() == 'ddp_model':
            if len(model.xx) != len(self.yy):
                raise ValueError("Wrong number of values.")

            for ii in range(len(model.xx)):
                if model.get_xx()[ii] != self.get_yy()[ii]:
                    raise ValueError("Wrong values in distribution.")

            vv = self.lin_p().dot(model.lin_p())

            return DDPModel('ddp1',
                            'distribution',
                            self.xx_is_categorical,
                            self.get_xx(),
                            model.yy_is_categorical,
                            model.get_yy(),
                            vv,
                            scaled=self.scaled)

        elif model.kind() == 'spline_model':
            if len(model.xx) != len(self.yy):
                raise ValueError("Wrong number of values.")

            for ii in range(len(model.xx)):
                if model.get_xx()[ii] not in self.get_yy():
                    raise ValueError("Wrong values in distribution.")

            pp = self.lin_p()
            conditionals = []

            for ii in range(len(self.xx)):
                conds = []

                for jj in range(len(model.xx)):
                    original = model.get_conditional(model.get_xx()[jj])
                    conditional = SplineModelConditional(
                        original.y0s, original.y1s, original.coeffs)
                    conditional.scale(
                        pp[ii, self.get_yy().index(model.get_xx()[jj])])
                    conds.append(conditional)

                conditionals.append(
                    SplineModelConditional.approximate_sum(conds))

            return SplineModel(self.xx_is_categorical,
                               self.get_xx(),
                               conditionals,
                               scaled=self.scaled)

        else:
            raise ValueError("Unknown model type in apply_as_distribution")
Пример #2
0
def test_tc(modelfile, distfile):
    with open(modelfile, "r") as modelfp:
        model = DDPModel()
        model.init_from(modelfp, ',')
        
    with open(distfile, "r") as distfp:
        dist = DistributionModel()
        dist.init_from(distfp, ',')

    output = StringIO.StringIO()

    dist.apply_as_distribution(model).write(output, ',')
    print output.getvalue()

    output.close()