Деконструкция if / else Python - PullRequest
0 голосов
/ 29 мая 2018

У меня есть программа, которая выводит некоторые условия, подобные этим ( это фактический вывод, это псевдокод ):

if ( first occurance of 'AB' <= -0.5 ) {
    return [ 0.]
} else {
    if ( number of products viewed <= 1.5 ) {
        if ( similarity to 'AB' <= 0.899999976158 ) {
            return [ 1.]
        } else {
            return [ 0.]
        }
    } else {
        if ( average time between actions <= 57.2111129761 ) {
            return [ 0.39145907]
        } else {
            return [ 0.10410805]
        }
    }
}

Как я могу получить более читабельный человек (?) / деконструированное решение?то есть:

( first occurance of 'AB' > -0.5 ) * (( number of products viewed <= 1.5 ) * ( similarity to 'AB' <= 0.899999976158 ))+((( number of products viewed > 1.5 ) * ( average time between actions <= 57.2111129761 ))

(у меня уже есть код, который может изменить "<=" на ">", но кроме этого я не могу выделить каждый из них, если условие в правильном порядке.

EDIT: код, используемый для получения токового выхода (я боюсь, не минимальный пример)

def get_code(tree, feature_names, tabdepth=0):
    left      = tree.tree_.children_left
    right     = tree.tree_.children_right
    threshold = tree.tree_.threshold
    features  = [feature_names[i] for i in tree.tree_.feature]
    value = tree.tree_.value
    f=[]

    def recurse(left, right, threshold, features, node, f, tabdepth=0):
            if (threshold[node] != -2):
                    print('\t' * tabdepth + 'if ( ' + features[node] + ' <= ' + str(threshold[node]) + ' ) {')
                    f.append('%' * tabdepth+'if ( ' + features[node] + ' <= ' + str(threshold[node]) + ' ) {')
                    if left[node] != -1:
                            recurse (left, right, threshold, features,left[node], f, tabdepth+1)
                    print('\t' * tabdepth+'} else {')
                    f.append('%' * tabdepth+'} else {')
                    if right[node] != -1:
                            recurse (left, right, threshold, features,right[node], f, tabdepth+1)
                    print('\t' * tabdepth + '}')
            else:
                    print('\t' * tabdepth + 'return ' + str(value[node][0]))
                    f.append('%' * tabdepth + 'return ' + str(value[node][0]))

    recurse(left, right, threshold, features, 0, f)

1 Ответ

0 голосов
/ 02 июня 2018

Похоже, вам нужно написать код для:

  1. анализа любого экземпляра псевдокода if / else, построения древовидной структуры;затем
  2. рекурсивно обходит древовидную структуру, генерируя нужную логическую формулу.

Для преобразования основная идея:

convert( if C then T else E )
==>
C * convert(T) + !C * convert(E)

Если вы хотитеБолее конкретная помощь, вам, вероятно, следует задать более конкретный вопрос.

...