Това малко упражнение се основава на малка дискусия в офиса ми от последната сесия за споделяне на знания, където обсъждаме усилване на градиента и фурна.

Въпросът е елементарен. Дървото на решенията не е вероятностен модел, тогава как извежда вероятностите от функцията predict_proba?

Е, ако паметта ми не ме лъжеше, въз основа на това, което научих преди няколко години (съжалявам, че сега е малко мъгляво), трябва да е съотношението на положителния клас спрямо всички други данни в лист, където прогнозата завършва с. Но може и да греша (мина известно време!)

Така че нека го тестваме. Тук изпълняваме синтетичен 2D набор от данни и използваме готов класификатор от sklearn.

Ето набора от данни.

и тук е границата на решение, след като класификаторът е бил обучен

Сега нека опитаме с някаква прогнозна точка. Гледайки графиката, всяка точка от оста x, разположена между -1,5 и 2,5, ще получи 8/9 = 0,888..., по-малко от -2,5 ще получи 2/4 = 0,5 и повече от 2,5 ще получи 0.

Ето го. QED.

Другото решение, разбира се, е чрез разглеждане на действителния изходен код, но никой няма време за това, особено когато изходният код е написан на Cython.

Бележник тук, ако искате да си поиграете на https://github.com/mitbal/sidu/blob/master/predict_proba_decision_tree.ipynb