from __future__ import print_function import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View import math as m Id = ot.IdentityMatrix(2) atoms = [ ot.Normal([1.0, 2.0], [0.5, 0.8], Id), ot.Normal([1.0, -2.0], [0.9, 0.8], Id), ot.Normal([-1.0, 0.0], [0.5, 0.6], Id) ] weights = [0.3, 0.3, 0.4] mixture = ot.Mixture(atoms, weights) data = mixture.getSample(1000) classifier = ot.MixtureClassifier(mixture) graph = mixture.drawPDF(data.getMin(), data.getMax()) graph.setLegendPosition("") graph.setTitle("MixtureClassifier example") classes = classifier.classify(data) palette = ot.Drawable.BuildDefaultPalette(len(atoms)) symbols = ot.Drawable.GetValidPointStyles() for i in range(classes.getSize()): index = classes[i] graph.add( ot.Cloud([data[i]], palette[index % len(palette)], symbols[index % len(symbols)])) fig = plt.figure(figsize=(4, 4)) axis = fig.add_subplot(111) axis.set_xlim(auto=True)
#! /usr/bin/env python from __future__ import print_function import openturns as ot R = ot.CorrelationMatrix(2) R[0, 1] = -0.99 d1 = ot.Normal([-1.0, 1.0], [1.0, 1.0], R) R[0, 1] = 0.99 d2 = ot.Normal([1.0, 1.0], [1.0, 1.0], R) distribution = ot.Mixture([d1, d2], [1.0] * 2) classifier = ot.MixtureClassifier(distribution) f1 = ot.SymbolicFunction(['x'], ['-x']) f2 = ot.SymbolicFunction(['x'], ['x']) experts = ot.Basis([f1, f2]) moe = ot.ExpertMixture(experts, classifier) moeNMF = ot.Function(moe) print('Mixture of experts=', moe) # Evaluate the mixture of experts on some points for i in range(2): p = [-0.3 + 0.8 * i / 4.0] print('moe ( %.6g )=' % p[0], moe(p)) print('moeNMF( %.6g )=' % p[0], moeNMF(p)) # and on a sample x = [[-0.3], [0.1]] print('x=', ot.Sample(x), 'moeNMF(x)=', moeNMF(x)) # non-supervised mode (2d) f1 = ot.SymbolicFunction(['x1', 'x2'], ['-8'])