fit

Вычислите значения Shapley для точки запроса

    Описание

    пример

    newExplainer = fit(explainer,queryPoint) вычисляет значения Shapley для заданной точки запроса (queryPoint) и хранит вычисленные значения Шепли в ShapleyValues свойство newExplainer. The shapley explainer объекта содержит модель машинного обучения и опции для вычисления значений Шепли.

    fit использует опции расчета значения Шепли, которые вы задаете при создании explainer. Вы можете изменить опции, используя аргументы имя-значение fit функция. Функция возвращает shapley newExplainer объекта который содержит новые вычисленные значения Шепли.

    пример

    newExplainer = fit(explainer,queryPoint,Name,Value) задает дополнительные опции, используя один или несколько аргументов имя-значение. Для примера задайте 'UseParallel',true для параллельного вычисления значений Шепли.

    Примеры

    свернуть все

    Обучите регрессионую модель и создайте shapley объект. Когда вы создаете shapley объект, если вы не задаете точку запроса, то программа не вычисляет значения Shapley. Используйте функцию объекта fit для вычисления значений Shapley для указанной точки запроса. Затем создайте штриховой график значений Шепли с помощью функции объекта plot.

    Загрузите carbig набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов.

    load carbig

    Создайте таблицу, содержащую переменные предиктора Acceleration, Cylinders, и так далее, а также переменная отклика MPG.

    tbl = table(Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight,MPG);

    Удаление отсутствующих значений в набор обучающих данных может помочь уменьшить потребление памяти и ускорить обучение для fitrkernel функция. Удалите отсутствующие значения в tbl.

    tbl = rmmissing(tbl);

    Обучите модель blackbox MPG при помощи fitrkernel функция

    rng('default') % For reproducibility
    mdl = fitrkernel(tbl,'MPG','CategoricalPredictors',[2 5]);

    Создайте shapley объект. Задайте набор данных tbl, потому что mdl не содержит обучающих данных.

    explainer = shapley(mdl,tbl)
    explainer = 
      shapley with properties:
    
                BlackboxModel: [1x1 RegressionKernel]
                   QueryPoint: []
               BlackboxFitted: []
                ShapleyValues: []
                   NumSubsets: 64
                            X: [392x7 table]
        CategoricalPredictors: [2 5]
                       Method: 'interventional-kernel'
    
    

    explainer сохраняет обучающие данные tbl в X свойство.

    Вычислите значения Шепли всех переменных предиктора для первого наблюдения в tbl.

    queryPoint = tbl(1,:)
    queryPoint=1×7 table
        Acceleration    Cylinders    Displacement    Horsepower    Model_Year    Weight    MPG
        ____________    _________    ____________    __________    __________    ______    ___
    
             12             8            307            130            70         3504     18 
    
    
    explainer = fit(explainer,queryPoint);

    Для регрессионной модели shapley вычисляет значения Shapley с помощью предсказанного отклика и сохраняет их в ShapleyValues свойство. Отобразите значения в ShapleyValues свойство.

    explainer.ShapleyValues
    ans=6×2 table
          Predictor       ShapleyValue
        ______________    ____________
    
        "Acceleration"       -0.1561  
        "Cylinders"         -0.18306  
        "Displacement"      -0.34203  
        "Horsepower"        -0.27291  
        "Model_Year"         -0.2926  
        "Weight"            -0.32402  
    
    

    Отобразите предсказанный ответ для точки запроса и постройте график значений Shapley для точки запроса с помощью plot функция. Чтобы отобразить существующее подчеркивание в любом имени предиктора, измените TickLabelInterpreter значение осей для 'none'.

    explainer.BlackboxFitted
    ans = 21.0495
    
    f = figure; 
    plot(explainer)
    f.CurrentAxes.TickLabelInterpreter = 'none';

    Figure contains an axes. The axes contains an object of type bar.

    Горизонтальный столбчатый график показывает значения Шепли для всех переменных, отсортированные по их абсолютным значениям. Каждое значение Шепли объясняет отклонение предсказания для точки запроса от среднего значения из-за соответствующей переменной.

    Обучите классификационную модель и создайте shapley объект. Затем вычислите значения Shapley для нескольких точек запроса.

    Загрузите CreditRating_Historical набор данных. Набор данных содержит идентификаторы клиентов и их финансовые коэффициенты, отраслевые метки и кредитные рейтинги.

    tbl = readtable('CreditRating_Historical.dat');

    Обучите модель кредитных рейтингов blackbox при помощи fitcecoc функция. Используйте переменные со второго по седьмой столбцы в tbl как переменные предиктора.

    blackbox = fitcecoc(tbl,'Rating', ...
        'PredictorNames',tbl.Properties.VariableNames(2:7), ...
        'CategoricalPredictors','Industry');

    Создайте shapley объект со blackbox модель. Для более быстрых расчетов выделите 25% наблюдений из tbl с расслоением и используйте выборки для вычисления значений Шепли. Задайте, чтобы использовать расширение алгоритма kernelSHAP.

    rng('default') % For reproducibility
    c = cvpartition(tbl.Rating,'Holdout',0.25);
    tbl_s = tbl(test(c),:);
    explainer = shapley(blackbox,tbl_s,'Method','conditional-kernel');

    Найдите две точки запроса, истинные значения рейтинга которых AAA и B, соответственно.

    queryPoint(1,:) = tbl_s(find(strcmp(tbl_s.Rating,'AAA'),1),:);
    queryPoint(2,:) = tbl_s(find(strcmp(tbl_s.Rating,'B'),1),:)
    queryPoint=2×8 table
         ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
        _____    ______    ______    _______    ________    _____    ________    _______
    
        58258     0.511     0.869     0.106      8.538      0.732       2        {'AAA'}
        82367    -0.078    -0.042     0.011      0.262      0.167       7        {'B'  }
    
    

    Вычислите и постройте график значений Shapley для первой точки запроса. Чтобы отобразить существующее подчеркивание в любом имени предиктора, измените TickLabelInterpreter значение осей для 'none'.

    explainer1 = fit(explainer,queryPoint(1,:));
    f1 = figure;
    plot(explainer1)
    f1.CurrentAxes.TickLabelInterpreter = 'none';

    Figure contains an axes. The axes contains an object of type bar. This object represents AAA.

    Вычислите и постройте график значений Shapley для второй точки запроса.

    explainer2 = fit(explainer,queryPoint(2,:));
    f2 = figure;
    plot(explainer2)
    f2.CurrentAxes.TickLabelInterpreter = 'none';

    Figure contains an axes. The axes contains an object of type bar. This object represents BB.

    Истинный рейтинг для второй точки запроса B, но предсказанный рейтинг BB. На график показаны значения Шепли для предсказанного рейтинга.

    explainer1 и explainer2 включить значения Shapley для первой точки запроса и второй точки запроса соответственно.

    Входные параметры

    свернуть все

    Объект, объясняющий модель blackbox, задается как shapley объект.

    Точка запроса, в которой fit объясняет предсказание, заданное как вектор-строка с числовыми значениями или таблица с одной строкой.

    • Для вектора-строки с числовыми значениями:

      • Переменные, составляющие столбцы queryPoint должен иметь тот же порядок, что и данные предиктора X в explainer.

      • Если данные предиктора explainer.X является таблицей, тогда queryPoint может быть числовым вектором, если таблица содержит все числовые переменные.

    • Для таблицы с одной строкой:

      • Если данные предиктора explainer.X является таблицей, затем все переменные предиктора в queryPoint должны иметь те же имена переменных и типы данных, что и в explainer.X. Однако порядок столбцов queryPoint не должен соответствовать порядку столбцов explainer.X.

      • Если данные предиктора explainer.X является числовой матрицей, затем имена предикторов в explainer.BlackboxModel.PredictorNames и соответствующие имена переменных предиктора в queryPoint должно быть то же самое. Чтобы задать имена предикторов во время обучения, используйте 'PredictorNames' аргумент имя-значение. Все переменные предиктора в queryPoint должны быть числовыми векторами.

      • queryPoint может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но fit игнорирует их.

      • fit не поддерживает многополюсные переменные или массивы ячеек, отличные от массивов ячеек векторов символов.

    Если queryPoint содержит NaNs для непрерывных предикторов и 'Method' является 'conditional-kernel', затем значения Шепли (ShapleyValues) в возвращаемом объекте NaNs. В противном случае, fit указатели NaN значения так же, как и explainer.BlackboxModelpredict функция объекта от explainer.BlackboxModel или указатель на функцию, заданный как blackbox).

    Пример: explainer.X(1,:) задает точку запроса как первое наблюдение данных предиктора X в explainer.

    Типы данных: single | double | table

    Аргументы в виде пар имя-значение

    Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

    Пример: fit(explainer,q,'Method','conditional-kernel','UseParallel',true) вычисляет значения Shapley для точки запроса q использование расширения к алгоритму kernelSHAP, и выполняет расчеты параллельно.

    Максимальное количество подмножеств предикторов для использования при расчете значения Шепли, заданное в виде положительного целого числа.

    Для получения дополнительной информации о том, как fit выбирает подмножества для использования, см. «Комплексность вычислений значений Шепли».

    Пример: 'MaxNumSubsets',100

    Типы данных: single | double

    Алгоритм расчета значения Shapley, заданный как 'interventional-kernel' или 'conditional-kernel'.

    • 'interventional-kernel'fit использует алгоритм kernelSHAP [1] с промежуточной функции ценности.

    • 'conditional-kernel'fit использует расширение к алгоритму kernelSHAP [2] с условной функции ценности.

    Для получения дополнительной информации об этих алгоритмах см. «Алгоритмы расчета значения Шепли».

    Пример: 'Method','conditional-kernel'

    Типы данных: char | string

    Флаг для параллельного выполнения, заданный как true или false. Если вы задаете 'UseParallel',true, fit функция выполняет обработки в цикле параллельно при помощи parfor. Для этой опции требуется Parallel Computing Toolbox™.

    Пример: 'UseParallel',true

    Типы данных: logical

    Выходные аргументы

    свернуть все

    Объект, объясняющий модель blackbox, возвращенный как shapley объект. The ShapleyValues свойство объекта содержит вычисленные значения Шепли.

    Чтобы перезаписать входной параметр explainer, присвойте выходные данные fit на explainer:

    explainer = fit(explainer,queryPoint);

    Подробнее о

    свернуть все

    Значения Шепли

    В теории игр значение Шепли игрока является средним предельным вкладом игрока в кооперативную игру. В контексте предсказания машинного обучения значение Шепли функции для точки запроса объясняет вклад функции в предсказание (ответ на регрессию или счет каждого класса для классификации) в заданной точке запроса.

    Значение Шепли соответствует отклонению предсказания для точки запроса от среднего предсказания из-за функции. Для точки запроса сумма значений Shapley для всех функций соответствует общему отклонению предсказания от среднего значения.

    Для получения дополнительной информации смотрите Значения Shapley для модели машинного обучения.

    Ссылки

    [1] Лундберг, Скотт М. и С. Ли. «Единый подход к интерпретации модельных Предсказаний». Усовершенствования в нейронных системах обработки информации 30 (2017): 4765-774.

    [2] Аас, Кьерсти, Мартин. Джуллум и Андерс Лёланд. «Объяснение индивидуальных предсказаний, когда функции зависимы: более точные приближения к значениям Шепли». arXiv:1903.10464 (2019).

    Расширенные возможности

    Введенный в R2021a