Я смотрю руководство для построения графиков частичной зависимости в Python. Никакое уравнение не приводится ни в учебнике, ни в документации а>. В документации функции R приведена формула I ожидается:
Это не имеет смысла с результатами, приведенными в руководстве по 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 с измененными значениями независимых функций?
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');
Вы смотрите на участок частичной зависимости. PDP - это график, который представляет набор переменных / предикторов и их влияние на целевое поле (в данном случае цена). Эти графики не оценивают фактические цены. Важно понимать, что PDP не является представлением значений или цены набора данных. Это представление влияния переменных на целевое поле. Отрицательные числа являются логитами вероятностей, а не необработанными вероятностями.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.