Esempio n. 1
0
    def analyze(self, test_size=0.05):
        X_train, X_test, y_train, y_test = train_test_split(
            self.X,
            self.y,
            test_size=test_size,
        )
        self.logit.fit(X_train, y_train)

        #---------------------------------------------------------
        # Show precision/recall
        #---------------------------------------------------------
        print('\n(1) Classification result for different classes')
        y_pred = self.logit.predict(X_test)
        print(metrics.classification_report(y_test, y_pred))

        #---------------------------------------------------------
        # Examine probabilities
        #---------------------------------------------------------
        print('\n(2) Prediction probabilities of samples')
        y_prob = self.logit.predict_proba(X_test)

        for c in self.logit.classes_:
            print('{}'.format(c[0:6]), end='\t')
        print('ClassLabel     \tCorrect')
        values = []
        for i in range(len(y_prob)):
            v = [round(p, 2) for p in y_prob[i]]
            v.append(y_test.values[i])
            v.append('Y' if y_test.values[i] == y_pred[i] else 'no')
            v.append(max(y_prob[i]))
            values.append(v)

        values.sort(key=lambda v: v[-1], reverse=True)

        n = len(self.logit.classes_)
        for v in values:
            for i in range(n):
                print(v[i], end='\t')
            print('{:10s}\t{}'.format(v[n], v[n + 1]))

        #---------------------------------------------------------
        # Visualize decisions
        #---------------------------------------------------------
        print('\n(3) Visualize the decision making process')
        output_dt = os.path.join(OUTPUT_DIR, 'decision_tree')
        self.dt.fit(X_train, y_train)
        draw_tree.draw(self.dt, self.dt.classes_, X_train.columns, output_dt)
        print('Decision process is saved to {}.png'.format(output_dt))

        #---------------------------------------------------------
        # Compare random decision trees
        #---------------------------------------------------------
        print('\n(4) Compare decision trees in a random forest')
        self.rf.fit(X_train, y_train)
        for i, m in enumerate(self.rf.estimators_):
            output_rf = os.path.join(OUTPUT_DIR, 'random_tree_' + str(i))
            draw_tree.draw(m, self.rf.classes_, X_train.columns, output_rf)
            print('Decision process is saved to {}.png'.format(output_rf))

        print()
Esempio n. 2
0
def ajax():
    if check_passwd(request.get_cookie("mdp")) == False:
        return template('authentification', get_url=app.get_url)
    reader = codecs.getreader("utf-8")
    query = json.load(reader(request.body))

    if query['type'] == "question":
        if query['method'] == 'PE':
            return methods.PE(float(query['min_interval']),
                              float(query['max_interval']),
                              float(query['proba']), int(query['choice']),
                              str(query['mode']))
        elif query['method'] == 'LE':
            return methods.LE(float(query['min_interval']),
                              float(query['max_interval']),
                              float(query['proba']), int(query['choice']),
                              str(query['mode']))
        elif query['method'] == 'CE_Constant_Prob':
            return methods.CE(float(query['min_interval']),
                              float(query['max_interval']),
                              float(query['gain']), int(query['choice']),
                              str(query['mode']))
        else:
            return query['method']

    elif query['type'] == "calc_util":
        return fit.regressions(query['points'])

    elif query['type'] == "calc_util_multi":
        return fit.multipoints(query['points'])

    elif query['type'] == "k_calculus":
        if query['number'] == 2:
            return kcalc.calculk2(query['k']['k1'], query['k']['k2'])
        elif query['number'] == 3:
            return kcalc.calculk3(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'])
        elif query['number'] == 4:
            return kcalc.calculk4(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'], query['k']['k4'])
        elif query['number'] == 5:
            return kcalc.calculk5(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'], query['k']['k4'],
                                  query['k']['k5'])
        elif query['number'] == 6:
            return kcalc.calculk6(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'], query['k']['k4'],
                                  query['k']['k5'], query['k']['k6'])

    elif query['type'] == "utility_calculus_multiplicative":
        return kcalc.calculUtilityMultiplicative(query['k'], query['utility'])
    elif query['type'] == "utility_calculus_multilinear":
        return kcalc.calculUtilityMultilinear(query['k'], query['utility'])

    elif query['type'] == "svg":
        dictionary = query['data']
        min = float(query['min'])
        max = float(query['max'])
        liste_cord = query['liste_cord']
        width = query['width']
        return plot.generate_svg_plot(dictionary, min, max, liste_cord, width)

    elif query['type'] == "svgg":
        dictionary = query['data']
        min = float(query['min'])
        max = float(query['max'])
        liste_cord = query['liste_cord']
        width = query['width']
        choice = query['choice']
        return plot.generate_svg_plot2(dictionary, min, max, liste_cord, width,
                                       choice)

    elif query['type'] == "svg_QUALI":
        dictionary = query['data']
        list_names = query['list_names']
        width = query['width']
        return plot.generate_svg_plot_QUALI(dictionary, list_names, width)

    elif query['type'] == "pie_chart":
        names = query['names']
        probas = query['probas']
        return plot.pie_chart(names, probas)

    elif query['type'] == "export_xlsx":
        return export_xlsx.generate_fichier(query['data'])

    elif query['type'] == "export_xlsx_option":
        return export_xlsx.generate_fichier_with_specification(query['data'])

    elif query['type'] == "latex_render":
        return latex_render.render(query['formula'])

    elif query['type'] == "tree":
        return draw_tree.draw(query['gain'], query['upper_label'],
                              query['bottom_label'], query['upper_proba'],
                              query['bottom_proba'], query['assess_type'])
Esempio n. 3
0
def ajax():
    if check_passwd(request.get_cookie("mdp")) == False:
        return template('authentification', get_url=app.get_url)
    reader = codecs.getreader("utf-8")
    query = json.load(reader(request.body))
    """
    query = {'type': 'export_xlsx', 
             'data': 
                 {'attributes': 
                  [{'type': 'Quantitative', 'name': 'pieniche', 'unit': 'euros', 'val_min': 20, 'val_med': ['40', '60', '80'], 'val_max': 100, 'method': 'PE', 'mode': 'Normal', 'completed': 'False', 'checked': True, 'questionnaire': {'number': 3, 'points': {'40': 0.43, '60': 0.86, '80': 0.82}, 'utility': {}}, 'fonction': 'exponential', 'numero': 0, 'pts': {'points': [1, 2, 3], 'coord': [[40, 0.43], [60, 0.86], [80, 0.82], [20, 0], [100, 1]], 'exp': {'a': -1.963679476149352, 'b': 0.028213793872664365, 'c': 1.116885624561104, 'r2': 0.9669098127318985}, 'quad': {'a': -0.5720588230939125, 'b': 0.00016102941154695627, 'c': 0.03182352938563475, 'r2': 0.9609977126945451}, 'pow': {'a': 2.2107646754127557, 'b': 1.3371874567609472, 'c': -4.168783582605269, 'r2': 0.9633217332780892}, 'lin': {'a': 0.0125, 'b': -0.25, 'r2': 0.7480678661997344}, 'expo-power': {'a': -1825.2176950884375, 'b': -7.508435131653395, 'c': 4.5317707067475485e-05, 'r2': 0.9498855834689701}}}, 
                   {'type': 'Quantitative', 'name': 'ccxw', 'unit': 'cxw', 'val_min': 10, 'val_med': ['32.5', '55', '77.5'], 'val_max': 100, 'method': 'PE', 'mode': 'Normal', 'completed': 'False', 'checked': True, 'questionnaire': {'number': 3, 'points': {'55': 0.76, '32.5': 0.32, '77.5': 0.96}, 'utility': {}}, 'fonction': '', 'numero': 0}], 
                  'k_calculus': 
                  [{'method': 'multiplicative', 'active': True, 'k': [], 'GK': None, 'GU': None}, 
                   {'method': 'multilinear', 'active': False, 'k': [], 'GK': None, 'GU': None}], 
                  'settings': 
                   {'decimals_equations': '2', 'decimals_dpl': '8', 'proba_ce': '0.3', 'proba_le': '0.3', 'language': 'french', 'display': 'trees'}
                 }
            }
    """

    if query['type'] == "question":
        if query['method'] == 'PE':
            return methods.PE(float(query['min_interval']),
                              float(query['max_interval']),
                              float(query['proba']), int(query['choice']),
                              str(query['mode']))
        elif query['method'] == 'LE':
            return methods.LE(float(query['min_interval']),
                              float(query['max_interval']),
                              float(query['proba']), int(query['choice']),
                              str(query['mode']))
        elif query['method'] == 'CE_Constant_Prob':
            return methods.CE(float(query['min_interval']),
                              float(query['max_interval']),
                              float(query['gain']), int(query['choice']),
                              str(query['mode']))
        else:
            return query['method']

    elif query['type'] == "calc_util":
        return fit.regressions(query['points'])

    elif query['type'] == "calc_util_multi":
        return fit.multipoints(query['points'])

    elif query['type'] == "k_calculus":
        if query['number'] == 2:
            return kcalc.calculk2(query['k']['k1'], query['k']['k2'])
        elif query['number'] == 3:
            return kcalc.calculk3(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'])
        elif query['number'] == 4:
            return kcalc.calculk4(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'], query['k']['k4'])
        elif query['number'] == 5:
            return kcalc.calculk5(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'], query['k']['k4'],
                                  query['k']['k5'])
        elif query['number'] == 6:
            return kcalc.calculk6(query['k']['k1'], query['k']['k2'],
                                  query['k']['k3'], query['k']['k4'],
                                  query['k']['k5'], query['k']['k6'])

    elif query['type'] == "utility_calculus_multiplicative":
        return kcalc.calculUtilityMultiplicative(query['k'], query['utility'],
                                                 query['virgule'])
    elif query['type'] == "utility_calculus_multilinear":
        return kcalc.calculUtilityMultilinear(query['k'], query['utility'],
                                              query['virgule'])

    elif query['type'] == "svg":
        dictionary = query['data']
        min_ = float(query['min'])
        max_ = float(query['max'])
        liste_cord = query['liste_cord']
        width = query['width']
        liste = query['liste']
        return plot.generate_svg_plot(dictionary, min_, max_, liste_cord,
                                      width, liste)

    elif query['type'] == "svgg":
        dictionary = query['data']
        min = float(query['min'])
        max = float(query['max'])
        liste_cord = query['liste_cord']
        width = query['width']
        choice = query['choice']
        return plot.generate_svg_plot2(dictionary, min, max, liste_cord, width,
                                       choice)

    elif query['type'] == "svg_QUALI":
        dictionary = query['data']
        list_names = query['list_names']
        width = query['width']
        return plot.generate_svg_plot_QUALI(dictionary, list_names, width)

    elif query['type'] == "pie_chart":
        names = query['names']
        probas = query['probas']
        return plot.pie_chart(names, probas)

    elif query['type'] == "demande_de_transformation":
        return selecteur.selecteur1(query['data'], query['numero'])

    elif query['type'] == "export_xlsx":
        return export_xlsx.generate_fichier(query['data'])

    elif query['type'] == "export_xlsx_option":
        return export_xlsx.generate_fichier_with_specification(query['data'])

    elif query['type'] == "latex_render":
        return latex_render.render(query['formula'])

    elif query['type'] == "tree":
        return draw_tree.draw(query['gain'], query['upper_label'],
                              query['bottom_label'], query['upper_proba'],
                              query['bottom_proba'], query['assess_type'])