Постройте результаты локальных поддающихся толкованию объяснений модели агностических (LIME)
визуализирует результаты LIME в f
= plot(results
)lime
объект results
. Функция возвращает Figure
объект f
. Используйте f
запросить или изменить Figure Properties фигуры после того, как это создается.
Фигура содержит горизонтальный столбчатый график, который показывает содействующие значения линейной простой модели или значения важности предиктора дерева решений простая модель, в зависимости от простой модели в 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"]);
Обучите модель черного ящика кредитных рейтингов при помощи 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');
Обучите модель черного ящика 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
содержит сгенерированный синтетический набор данных. 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
объект. SimpleModel
свойство results
должен содержать подбиравшую простую модель.
[1] Рибейру, Марко Тулио, С. Сингх и К. Гуестрин. "'Почему я должен Доверять Вам?': Объяснение Предсказаний Любого Классификатора". В Продолжениях 22-й Международной конференции ACM SIGKDD по вопросам Открытия Знаний и Анализа данных, 1135–44. Сан-Франциско, Калифорния: ACM, 2016.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.