Можно вычислить значения Шепли для модели машинного обучения при помощи shapley
объект. Используйте значения, чтобы интерпретировать вклады отдельных функций в модели к предсказанию для точки запроса. Существует два способа вычислить значения Шепли:
Создайте shapley
объект для модели машинного обучения с заданной точкой запроса при помощи shapley
функция. Функция вычисляет значения Шепли всех функций в модели для точки запроса.
Создайте shapley
объект для модели машинного обучения при помощи shapley
функционируйте и, затем вычислите значения Шепли для заданной точки запроса при помощи fit
функция.
Эта тема задает значения Шепли, описывает два доступных алгоритма для вычисления значений Шепли, предоставляет примеры каждому и показывает, как уменьшать стоимость вычисления значений Шепли.
В теории игр значение Шепли проигрывателя является средним крайним вкладом проигрывателя в совместной игре. Таким образом, значения Шепли являются справедливыми выделениями, индивидуальным игрокам, общего дохода, сгенерированного от совместной игры. В контексте предсказания машинного обучения значение Шепли функции точки запроса объясняет вклад функции к предсказанию (ответ для регрессии или счета каждого класса для классификации) в заданной точке запроса. Значение Шепли соответствует отклонению предсказания для точки запроса из среднего предсказания, из-за функции. Для каждой точки запроса сумма значений Шепли для всех функций соответствует общему отклонению предсказания от среднего значения.
Значение Шепли i th функция точки запроса x задано функцией ценности v:
(1) |
M является количеством всех функций.
набор всех функций.
|S | является кардинальностью набора S или число элементов в наборе S.
vx (S) является функцией ценности функций в наборе S для точки запроса x. Значение функции указывает на ожидаемый вклад функций в S к предсказанию для точки запроса x.
shapley
предложения два алгоритма: kernelSHAP [1], который использует интервенционистские распределения для функции ценности и расширение kernelSHAP [2], который использует условные распределения для функции ценности. Можно задать алгоритм, чтобы использовать путем установки 'Method'
аргумент значения имени shapley
функционируйте или fit
функция.
Различием между этими двумя алгоритмами является определение функции ценности. Оба алгоритма задают функцию ценности, таким образом, что сумма значений Шепли точки запроса по всем функциям соответствует общему отклонению предсказания для точки запроса от среднего значения.
Поэтому функция ценности vx (S) должна соответствовать ожидаемому вкладу функций в S к предсказанию (f) для точки запроса x. Эти два алгоритма вычисляют ожидаемый вклад при помощи искусственных выборок, созданных из заданных данных (X). Необходимо обеспечить X
через вход модели машинного обучения или отдельный аргумент ввода данных, когда вы создаете shapley
объект. В искусственных выборках значения для функций в S прибывают из точки запроса. Для остальной части функций (функции в Sc, дополнении S), kernelSHAP алгоритм генерирует выборки с помощью интервенционистских распределений, тогда как расширение kernelSHAP алгоритма генерирует выборки с помощью условных распределений.
'Method','interventional-kernel'
)shapley
использует kernelSHAP алгоритм по умолчанию.
kernelSHAP алгоритм задает функцию ценности функций в S в точке запроса x как ожидаемое предсказание относительно интервенционистского распределения D, который является совместным распределением функций в Sc:
где xS является значением точки запроса для функций в S, и XSc является функциями в Sc.
Оценивать функцию ценности vx (S) в точке запроса x, учитывая, что функции не высоко коррелируются, shapley
использует значения в данных X как выборки интервенционистского распределения D для функций в Sc:
где N является количеством наблюдений и (XSc), j содержит значения функций в Sc для j th наблюдение.
Например, предположите, что у вас есть три функции в X и четыре наблюдения: (x11, x12, x13), (x21, x22, x23), (x31, x32, x33), и (x41, x42, x43). Примите, что S включает первую функцию, и Sc включает остальных. В этом случае функция ценности первой функции, оцененной в точке запроса (x41, x42, x43),
kernelSHAP алгоритм является в вычислительном отношении менее дорогим, чем расширение kernelSHAP алгоритма, поддерживает упорядоченные категориальные предикторы и может обработать отсутствующие значения в X. Однако алгоритм требует предположения независимости функции и использует выборки из распределения [3]. Искусственные выборки, созданные с соединением точки запроса и данных X, могут содержать нереалистичные наблюдения. Например, (x41, x12, x13) может быть выборка, которая не происходит в полном совместном распределении трех функций.
'Method','conditional-kernel'
)Задайте 'Method','conditional-kernel'
использовать расширение kernelSHAP алгоритма.
расширение kernelSHAP алгоритма задает функцию ценности функций в S в точке запроса x с помощью условного распределения XSc, учитывая, что XS имеет значения точки запроса:
Оценивать функцию ценности vx (S) в точке запроса x, shapley
использует самых близких соседей точки запроса, которые соответствуют 10% наблюдений в данных X. Этот подход использует более реалистические выборки, чем kernelSHAP алгоритм и не требует предположения независимости функции. Однако этот алгоритм является в вычислительном отношении более дорогим, не поддерживает упорядоченные категориальные предикторы и не может обработать NaN
s в непрерывных функциях. Кроме того, алгоритм может присвоить ненулевое значение Шепли фиктивной функции, которая не способствует предсказанию, если фиктивная функция коррелируется с важной функцией [3].
Этот пример обучает линейную модель классификации и вычисляет значения Шепли с помощью обоих kernelSHAP алгоритм ('Method','interventional-kernel'
) и расширение kernelSHAP алгоритма ('Method','conditional-kernel'
).
Обучите линейную модель классификации
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора, и 351 бинарный ответ для радара возвращается, любой плохо ('b'
) или хороший ('g'
).
load ionosphere
Обучите линейную модель классификации. Задайте метод минимизации целевой функции ('Solver'
аргумент значения имени) как ограниченная память алгоритм квазиньютона Бройдена Флетчера Голдфарба Шэнно ('lbfgs'
) для лучшей точности линейных коэффициентов.
Mdl = fitclinear(X,Y,'Solver','lbfgs')
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: {'b' 'g'} ScoreTransform: 'none' Beta: [34x1 double] Bias: -3.7100 Lambda: 0.0028 Learner: 'svm' Properties, Methods
Шепли оценивает с интервенционистским распределением
Вычислите значения Шепли для первого наблюдения с помощью kernelSHAP алгоритма, который использует интервенционистское распределение для оценки функции ценности. Вы не должны задавать 'Method'
значение, потому что 'interventional-kernel'
значение по умолчанию.
queryPoint = X(1,:);
explainer1 = shapley(Mdl,X,'QueryPoint',queryPoint);
Для модели классификации, shapley
вычисляет значения Шепли с помощью предсказанного счета класса к каждому классу. Постройте значения Шепли для предсказанного класса при помощи plot
функция.
plot(explainer1)
Горизонтальный столбчатый график показывает значения Шепли для этих 10 наиболее важных переменных, отсортированных по их абсолютным значениям. Каждое значение Шепли объясняет отклонение счета к точке запроса от средней оценки предсказанного класса, из-за соответствующей переменной.
Для линейной модели, где вы принимаете, функции независимы друг от друга, можно вычислить интервенционистские значения Шепли для положительного класса (или второй класс в Mdl.ClassNames
G
) от предполагаемых коэффициентов (Mdl.Beta
) [1].
linearSHAPValues = (Mdl.Beta'.*(queryPoint-mean(X)))';
Составьте таблицу, содержащую значения Шепли, вычисленные из kernelSHAP алгоритма и значений от коэффициентов.
t = table(explainer1.ShapleyValues.Predictor,explainer1.ShapleyValues.g,linearSHAPValues, ... 'VariableNames',{'Predictor','KernelSHAP Value','LinearSHAP Value'})
t=34×3 table
Predictor KernelSHAP Value LinearSHAP Value
_________ ________________ ________________
"x1" 0.28789 0.28789
"x2" -3.5258e-16 0
"x3" 0.20822 0.20822
"x4" -0.01998 -0.01998
"x5" 0.20872 0.20872
"x6" -0.076991 -0.076991
"x7" 0.19188 0.19188
"x8" -0.64386 -0.64386
"x9" 0.42348 0.42348
"x10" -0.030049 -0.030049
"x11" -0.23132 -0.23132
"x12" 0.1422 0.1422
"x13" -0.045973 -0.045973
"x14" -0.29022 -0.29022
"x15" 0.21051 0.21051
"x16" 0.13382 0.13382
⋮
Шепли оценивает с условным распределением
Вычислите значения Шепли для первого наблюдения с помощью расширения kernelSHAP алгоритма, который использует условное распределение для оценки функции ценности.
explainer2 = shapley(Mdl,X,'QueryPoint',queryPoint,'Method','conditional-kernel');
Постройте значения Шепли.
plot(explainer2)
Эти два алгоритма идентифицируют различные наборы для этих 10 наиболее важных переменных. Только эти две переменные x8
и x22
характерны для обоих наборов.
Вычислительная стоимость для значений Шепли увеличивается, если количество наблюдений или функций является большим.
Вычисление функции ценности (v) может быть в вычислительном отношении дорогим, если у вас есть большое количество наблюдений, например, больше чем 1 000. Для более быстрого расчета используйте меньшую выборку наблюдений, когда вы создадите shapley
объект, или вычисляют значения Шепли параллельно путем определения 'UseParallel'
как true
когда вы вычисляете значения с помощью shapley
или fit
функция. Вычисление параллельно требует Parallel Computing Toolbox™.
Вычисление слагаемого в уравнении 1 для всех доступных подмножеств, S может быть в вычислительном отношении дорогим, когда M (количество функций) является большим. Общее количество подмножеств, чтобы рассмотреть 2M. Вместо того, чтобы вычислить слагаемое для всех подмножеств, можно задать максимальное количество подмножеств для расчета значения Шепли при помощи 'MaxNumSubsets'
аргумент значения имени. shapley
выбирает подмножества, чтобы использовать на основе их значений веса. Вес подмножества пропорционален 1 / (знаменатель слагаемого), который соответствует 1 по биномиальному коэффициенту: . Поэтому подмножество с высокой или низкой стоимостью кардинальности имеет большое значение веса. shapley
включает подмножества с самым высоким весом сначала, и затем включает другие подмножества в порядке убывания на основе их значений веса.
В этом примере показано, как уменьшать вычислительную стоимость для значений Шепли, когда у вас есть большое количество и наблюдений и функций.
Обучите ансамбль регрессии
Загрузите набор выборочных данных NYCHousing2015
.
load NYCHousing2015
Набор данных включает 55 246 наблюдений за 10 переменными с информацией о продажах свойств в Нью-Йорке в 2 015. Этот пример использует эти переменные, чтобы анализировать отпускные цены (SALEPRICE
).
Предварительно обработайте набор данных. Преобразуйте datetime
массив (SALEDATE
) к числам месяца.
NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE);
Обучите ансамбль регрессии.
Mdl = fitrensemble(NYCHousing2015,'SALEPRICE');
Вычислите значения Шепли с опциями по умолчанию
Вычислите значения Шепли всех переменных предикторов для первого наблюдения. Измерьте время, требуемое вычислить значения Шепли при помощи tic
и toc
.
tic
explainer1 = shapley(Mdl,'QueryPoint',NYCHousing2015(1,:));
Warning: Computation can be slow because the predictor data has over 1000 observations. Use a smaller sample of the training set or specify 'UseParallel' as true for faster computation.
toc
Elapsed time is 492.365307 seconds.
Как предупреждающее сообщение указывает, расчет может быть медленным, потому что данные о предикторе имеют более чем 1 000 наблюдений.
Задайте опции, чтобы уменьшать вычислительную стоимость
shapley
предоставляет несколько возможностей уменьшать вычислительную стоимость, когда у вас есть большое количество наблюдений или функций.
Большое количество наблюдений — Использование меньшая выборка обучающих данных и вычисляет значения Шепли параллельно путем определения 'UseParallel'
как true
.
Большое количество функций — Задает 'MaxNumSubsets'
аргумент значения имени, чтобы ограничить количество подмножеств, включенных в расчет.
Вычислите значения Шепли снова с помощью меньшей выборки обучающих данных и опции параллельных вычислений. Кроме того, задайте максимальное количество подмножеств как 2^5
.
NumSamples = 5e2; Tbl = datasample(NYCHousing2015,NumSamples,'Replace',false); tic explainer2 = shapley(Mdl,Tbl,'QueryPoint',NYCHousing2015(1,:), ... 'UseParallel',true,'MaxNumSubsets',2^5);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
toc
Elapsed time is 52.183287 seconds.
Определение дополнительных опций уменьшает время, требуемое вычислить значения Шепли.
[3] Кумар, я. Элизабет, Suresh Venkatasubramanian, Карлос Шейдеггер и Сорелл Фридлер. "Проблемы с Основанными на Шепли-значением Объяснениями как Меры по Важности Функции". arXiv:2002.11097 (2020).