Построение графиков результатов локальных интерпретируемых объяснений модели-агностики (LIME)
визуализирует результаты LIME в f
= plot(results
)lime
results объекта
. Функция возвращает Figure
f объекта
. Использование f
запрос или изменение свойств рисунка после создания.
Рисунок содержит горизонтальный столбчатый график, которая показывает значения коэффициентов линейной простой модели или значения предикторной важности простой модели дерева решений, в зависимости от простой модели в results
(SimpleModel
свойство results
).
Рисунок отображает два предсказаний для точки запроса, вычисленные с помощью модели машинного обучения и простой модели, соответственно. Эти значения соответствуют BlackboxFitted
свойство и SimpleModelFitted
свойство results
.
Обучите классификационную модель и создайте lime
объект, который использует простую модель дерева решений. Когда вы создаете lime
задайте точку запроса и количество важных предикторов так, чтобы программное обеспечение генерировало выборки синтетического набора данных и подбирало простую модель для точки запроса с важными предикторами. Затем отобразите предполагаемую важность предиктора в простой модели с помощью функции объекта plot
.
Загрузите CreditRating_Historical
набор данных. Набор данных содержит идентификаторы клиентов и их финансовые коэффициенты, отраслевые метки и кредитные рейтинги.
tbl = readtable('CreditRating_Historical.dat');
Отобразите первые три строки таблицы.
head(tbl,3)
ans=3×8 table
ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry Rating
_____ _____ _____ _______ ________ _____ ________ ______
62394 0.013 0.104 0.036 0.447 0.142 3 {'BB'}
48608 0.232 0.335 0.062 1.969 0.281 8 {'A' }
42444 0.311 0.367 0.074 1.935 0.366 1 {'A' }
Составьте таблицу переменных предиктора путем удаления столбцов идентификаторов клиентов и оценок из tbl
.
tblX = removevars(tbl,["ID","Rating"]);
Обучите модель кредитных рейтингов blackbox при помощи fitcecoc
функция.
blackbox = fitcecoc(tblX,tbl.Rating,'CategoricalPredictors','Industry');
Создайте lime
объект, который объясняет предсказание для последнего наблюдения с помощью простой модели дерева решений. Задайте 'NumImportantPredictors'
как шесть, чтобы найти самое большее 6 важных предикторов. Если вы задаете 'QueryPoint'
и 'NumImportantPredictors'
значения при создании lime
затем программное обеспечение генерирует выборки синтетического набора данных и подгоняет простую интерпретируемую модель к синтетическому набору данных.
queryPoint = tblX(end,:)
queryPoint=1×6 table
WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry
_____ _____ _______ ________ ____ ________
0.239 0.463 0.065 2.924 0.34 2
rng('default') % For reproducibility results = lime(blackbox,'QueryPoint',queryPoint,'NumImportantPredictors',6, ... 'SimpleModelType','tree')
results = lime with properties: BlackboxModel: [1x1 ClassificationECOC] DataLocality: 'global' CategoricalPredictors: 6 Type: 'classification' X: [3932x6 table] QueryPoint: [1x6 table] NumImportantPredictors: 6 NumSyntheticData: 5000 SyntheticData: [5000x6 table] Fitted: {5000x1 cell} SimpleModel: [1x1 ClassificationTree] ImportantPredictors: [2x1 double] BlackboxFitted: {'AA'} SimpleModelFitted: {'AA'}
Постройте график lime
results объекта
при помощи функции объекта plot
. Чтобы отобразить существующее подчеркивание в любом имени предиктора, измените TickLabelInterpreter
значение осей для 'none'
.
f = plot(results);
f.CurrentAxes.TickLabelInterpreter = 'none';
График отображает два предсказаний для точки запроса, которые соответствуют свойству BlackboxFitted и свойству SimpleModelFitted results
.
Горизонтальный столбчатый график показывает отсортированные значения важности предиктора. lime
находит переменные финансового коэффициента EBIT_TA
и WC_TA
как важные предикторы для точки запроса.
Длину полосы можно считать с помощью всплывающих подсказок или свойств панели. Для примера можно найти Bar
объекты при помощи findobj
функции и добавления меток к концам полос при помощи text
функция.
b = findobj(f,'Type','bar'); text(b.YEndPoints+0.001,b.XEndPoints,string(b.YData))
Также можно отобразить значения коэффициентов в таблице с именами переменных-предикторов.
imp = b.YData; flipud(array2table(imp', ... 'RowNames',f.CurrentAxes.YTickLabel,'VariableNames',{'Predictor Importance'}))
ans=2×1 table
Predictor Importance
____________________
MVE_BVTD 0.088412
RE_TA 0.0018061
Обучите регрессионую модель и создайте lime
объект, который использует линейную простую модель. Когда вы создаете lime
объект, если вы не задаете точку запроса и количество важных предикторов, то программное обеспечение генерирует выборки синтетического набора данных, но не подходит для простой модели. Используйте функцию объекта fit
для подгонки простой модели для точки запроса. Затем отобразите коэффициенты подобранной линейной простой модели при помощи функции объекта plot
.
Загрузите carbig
набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов.
load carbig
Создайте таблицу, содержащую переменные предиктора Acceleration
, Cylinders
, и так далее, а также переменная отклика MPG
.
tbl = table(Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight,MPG);
Удаление отсутствующих значений в набор обучающих данных может помочь уменьшить потребление памяти и ускорить обучение для fitrkernel
функция. Удалите отсутствующие значения в tbl
.
tbl = rmmissing(tbl);
Составьте таблицу переменных предиктора путем удаления переменной отклика из tbl
.
tblX = removevars(tbl,'MPG');
Обучите модель blackbox MPG
при помощи fitrkernel
функция.
rng('default') % For reproducibility mdl = fitrkernel(tblX,tbl.MPG,'CategoricalPredictors',[2 5]);
Создайте lime
объект. Задайте набор данных предиктора, потому что mdl
не содержит данных предиктора.
results = lime(mdl,tblX)
results = lime with properties: BlackboxModel: [1x1 RegressionKernel] DataLocality: 'global' CategoricalPredictors: [2 5] Type: 'regression' X: [392x6 table] QueryPoint: [] NumImportantPredictors: [] NumSyntheticData: 5000 SyntheticData: [5000x6 table] Fitted: [5000x1 double] SimpleModel: [] ImportantPredictors: [] BlackboxFitted: [] SimpleModelFitted: []
results
содержит сгенерированный синтетический набор данных. The SimpleModel
свойство пустое ([]
).
Подбор линейной простой модели для первого наблюдения в tblX
. Укажите количество важных предикторов, которые нужно найти, как 3.
queryPoint = tblX(1,:)
queryPoint=1×6 table
Acceleration Cylinders Displacement Horsepower Model_Year Weight
____________ _________ ____________ __________ __________ ______
12 8 307 130 70 3504
results = fit(results,queryPoint,3);
Постройте график lime
results объекта
при помощи функции объекта plot
. Чтобы отобразить существующее подчеркивание в любом имени предиктора, измените TickLabelInterpreter
значение осей для 'none'
.
f = plot(results);
f.CurrentAxes.TickLabelInterpreter = 'none';
График отображает два предсказаний для точки запроса, которые соответствуют свойству BlackboxFitted и свойству SimpleModelFitted results
.
Горизонтальный столбчатый график показывает значения коэффициентов простой модели, отсортированные по их абсолютным значениям. LIME находит Horsepower
, Model_Year
, и Cylinders
как важные предикторы для точки запроса.
Model_Year
и Cylinders
являются категориальными предикторами, которые имеют несколько категорий. Для линейной простой модели программное обеспечение создает на одну менее фиктивную переменную, чем количество категорий для каждого категориального предиктора. На гистограмме отображается только самая важная переменная манекена. Можно проверить коэффициенты других переменных манекена с помощью SimpleModel
свойство results
. Отображение значений отсортированных коэффициентов, включая все категориальные фиктивные переменные.
[~,I] = sort(abs(results.SimpleModel.Beta),'descend'); table(results.SimpleModel.ExpandedPredictorNames(I)',results.SimpleModel.Beta(I), ... 'VariableNames',{'Exteded Predictor Name','Coefficient'})
ans=17×2 table
Exteded Predictor Name Coefficient
__________________________ ___________
{'Horsepower' } -3.4485e-05
{'Model_Year (74 vs. 70)'} -6.1279e-07
{'Model_Year (80 vs. 70)'} -4.015e-07
{'Model_Year (81 vs. 70)'} 3.4176e-07
{'Model_Year (82 vs. 70)'} -2.2483e-07
{'Cylinders (6 vs. 8)' } -1.9024e-07
{'Model_Year (76 vs. 70)'} 1.8136e-07
{'Cylinders (5 vs. 8)' } 1.7461e-07
{'Model_Year (71 vs. 70)'} 1.558e-07
{'Model_Year (75 vs. 70)'} 1.5456e-07
{'Model_Year (77 vs. 70)'} 1.521e-07
{'Model_Year (78 vs. 70)'} 1.4272e-07
{'Model_Year (72 vs. 70)'} 6.7001e-08
{'Model_Year (73 vs. 70)'} 4.7214e-08
{'Cylinders (4 vs. 8)' } 4.5118e-08
{'Model_Year (79 vs. 70)'} -2.2598e-08
⋮
results
- результаты LIMElime
объектРезультаты LIME, заданные как lime
объект. The SimpleModel
свойство results
должен содержать подобранную простую модель.
[1] Рибейро, Марко Тулио, С. Сингх и К. Гестрин. "Почему я должен доверять вам?": Объяснение предсказаний любого классификатора ". В Трудах 22-й Международной конференции ACM SIGKDD по открытию знаний и майнингу данных, 1135-44. Сан-Франциско, Калифорния: ACM, 2016.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.