Я смотрю руководство для построения графиков частичной зависимости в Python. Никакое уравнение не приводится ни в учебнике, ни в документации . В документации функции R приведена формула I ожидается:

enter image description here

Это не имеет смысла с результатами, приведенными в руководстве по Python. Если это среднее значение прогноза цен на жилье, то как оно отрицательно и мало? Я ожидал бы значения в миллионах. Я что-то пропустил?

Обновить:

Для регрессии среднее значение вычитается из приведенной выше формулы. Как это будет добавлено обратно? Для моей обученной модели я могу получить частичную зависимость

from sklearn.ensemble.partial_dependence import partial_dependence
partial_dependence, independent_value = partial_dependence(model, features.index(independent_feature),X=df2[features])

Я хочу добавить (?) Обратно в среднем. Получу ли я это, просто используя model.predict () для значений df2 с измененными значениями независимых функций?

5
Keith 13 Мар 2018 в 06:21

2 ответа

Лучший ответ

Как работает формула R

Формула r, представленная в вопросе, применяется к randomForest. Каждое дерево в случайном лесу пытается напрямую предсказать целевую переменную . Таким образом, прогноз каждого дерева находится в ожидаемом интервале (в вашем случае все цены на дома положительные), а прогноз совокупности - это просто среднее значение всех индивидуальных прогнозов .

ensemble_prediction = mean(tree_predictions)

Вот что вам говорит формула: просто возьмите прогнозы всех деревьев x и усредните их.

Почему значения PDP Python маленькие

Однако в sklearn частичная зависимость вычисляется для GradientBoostingRegressor. При повышении градиента каждое дерево предсказывает производную функции потерь при текущем прогнозе, которая только косвенно связана с целевой переменной. Для регрессии ГБ прогноз дается как

ensemble_prediction = initial_prediction + sum(tree_predictions * learning_rate)

А для классификации GB прогнозируемая вероятность равна

ensemble_prediction = softmax(initial_prediction + sum(tree_predictions * learning_rate))

В обоих случаях частичная зависимость указывается как

sum(tree_predictions * learning_rate)

Таким образом, initial_prediction (для GradientBoostingRegressor(loss='ls') он равен просто среднему значению обучения y) не включается в PDP, что делает прогнозы отрицательными.

Что касается небольшого диапазона его значений, y_train в вашем примере невелик: средняя стоимость жилья примерно равна 2, поэтому цены на жилье, вероятно, выражаются в миллионах.

Как на самом деле работает формула sklearn

Я уже сказал, что в sklearn значение функции частичной зависимости - это среднее значение всех деревьев. Есть еще одна хитрость: все нерелевантные функции усредняются. Чтобы описать фактический способ усреднения, я просто процитирую документацию склеарн:

Для каждого значения «целевых» характеристик в сетке функция частичной зависимости должна ограничивать предсказания дерева по всем возможным значениям «дополнительных» функций. В деревьях решений эту функцию можно эффективно оценить без ссылки на данные обучения. Для каждой точки сетки выполняется взвешенный обход дерева: если узел разбиения включает в себя `` целевую '' функцию, следует соответствующая левая или правая ветвь, в противном случае следуют обе ветви, каждая ветвь взвешивается долей обучающих выборок, которые вошли в эту филиал. Наконец, частичная зависимость дается средневзвешенным значением всех посещенных листьев. Для ансамблей деревьев результаты каждого отдельного дерева снова усредняются.

А если вы по-прежнему не удовлетворены, см.

Если вы хотите, чтобы не только единицы измерения, но и среднее значение совпадали с вашим y, вы должны добавить "потерянное" среднее значение к результату функции partial_dependence, а затем вручную построить график результатов:

from sklearn.ensemble.partial_dependence import partial_dependence
pdp_y, [pdp_x] = partial_dependence(model, X=X, target_variables=[0], percentiles=(0.0, 1.0))
plt.scatter(X[:, 0], y, s=0.3)
plt.plot(pdp_x, pdp_y.ravel() + model.init_.mean)
plt.show()
plt.title('Partial dependence plot in the original coordinates');

enter image description here

6
David Dale 15 Мар 2018 в 17:13

Вы смотрите на участок частичной зависимости. PDP - это график, который представляет набор переменных / предикторов и их влияние на целевое поле (в данном случае цена). Эти графики не оценивают фактические цены. Важно понимать, что PDP не является представлением значений или цены набора данных. Это представление влияния переменных на целевое поле. Отрицательные числа являются логитами вероятностей, а не необработанными вероятностями.

0
JackNorthrup 15 Мар 2018 в 05:07