У меня есть словарь, который представляет дерево решений:
{'Outlook': {'Overcast': 'Yes', 'Rain': {'Wind': {'Strong': 'No', 'Weak': 'Yes'}}, 'Sunny': {'Temperature': {'Cool': 'Yes', 'Hot': 'No', 'Mild': 'No'}}}}
Визуализированный, он выглядит следующим образом:
Это дерево было сделано с некоторыми данными обучения и алгоритмом ID3; Я sh могу предсказать решение для примеров из моих данных тестирования:
Outlook Temperature Humidity Wind Decision
Sunny Mild Normal Strong Yes
Overcast Mild High Strong Yes
Overcast Hot Normal Weak Yes
Rain Mild High Strong No
Используя первый пример, грубое представление о порядке вещей проверяется:
Current dict 'outlook'
Examine 'outlook', found 'sunny':
'sunny' is a dict, make current dict the 'sunny' subdict
Examine 'temperature', found 'mild':
'mild' is not a dict, return value 'no'
I Я не уверен, как пройти словарь, как это, однако. У меня есть код для начала:
def fun(d, t):
"""
d -- decision tree dictionary
t -- testing examples in form of pandas dataframe
"""
for _, e in t.iterrows():
predict(d, e)
def predict(d, e):
"""
d -- decision tree dictionary
e -- a testing example in form of pandas series
"""
# ?
В predict()
, e
можно получить как словарь:
print(e.to_dict())
# {'Outlook': 'Rain', 'Temperature': 'Cool', 'Humidity': 'Normal', 'Wind': 'Weak', 'Decision': 'Yes'}
print(e['Outlook'])
# 'Rain'
print(e['Decision'])
# 'Yes'
# etc
Я просто не знаю, как пройти через диктат. Мне нужно перебрать пример тестирования в порядке появления атрибутов в дереве решений, а не в порядке, в котором они появляются в примере тестирования.