Перекрестная проверенная обобщенная аддитивная модель (GAM) для классификации
ClassificationPartitionedGAM
- набор обобщенных аддитивных моделей, обученных на перекрестно проверенных складках. Оцените качество перекрестно проверенной классификации с помощью одной или нескольких функций kfold: kfoldPredict
, kfoldLoss
, kfoldMargin
, kfoldEdge
, и kfoldfun
.
Каждая функция объекта kfold использует модели, обученные на обучающих-складных (in-fold) наблюдениях, чтобы предсказать ответ для наблюдений валидации-складки (out-of-fold). Например, предположим, что вы перекрестно проверяете с помощью пяти складок. Программа случайным образом присваивает каждое наблюдение пяти группам равного размера (примерно). training fold содержит четыре группы (примерно 4/5 данных), а validation fold - другую группу (примерно 1/5 данных). В этом случае перекрестная валидация выполняется следующим образом:
Программное обеспечение обучает первую модель (хранится в CVMdl.Trained{1}
) при помощи наблюдений в последних четырех группах и резервирует наблюдения в первой группе для валидации.
Программное обеспечение обучает вторую модель (хранится в CVMdl.Trained{2}
) при помощи наблюдений в первой группе и последних трех группах. Программа резервирует наблюдения во второй группе для валидации.
Программа работает аналогичным образом для третьей, четвертой и пятой моделей.
Если вы проверяете при помощи kfoldPredict
программа вычисляет предсказания для наблюдений в групповых i с помощью i-й модели. Короче говоря, программное обеспечение оценивает ответ для каждого наблюдения с помощью модели, обученной без этого наблюдения.
Можно создать ClassificationPartitionedGAM
моделировать двумя способами:
Создайте перекрестно проверенную модель из объекта GAM ClassificationGAM
при помощи crossval
функция объекта.
Создайте перекрестно проверенную модель с помощью fitcgam
функция и задание одного из аргументов имя-значение 'CrossVal'
, 'CVPartition'
, 'Holdout'
, 'KFold'
, или 'Leaveout'
.
CrossValidatedModel
- Перекрестно проверенное имя модели'GAM'
Это свойство доступно только для чтения.
Перекрестное имя модели, заданное как 'GAM'
.
KFold
- Количество перекрестно проверенных складокЭто свойство доступно только для чтения.
Количество перекрестно проверенных складок, заданное как положительное целое число.
Типы данных: double
ModelParameters
- Значения параметров перекрестной валидацииЭто свойство доступно только для чтения.
Значения параметров перекрестной проверки, заданные как объект. Значения параметров соответствуют значениям аргументов имя-значение, используемых для перекрестной проверки обобщенной аддитивной модели. ModelParameters
не содержит предполагаемых параметров.
Вы можете получить доступ к свойствам ModelParameters
использование записи через точку.
Partition
- Раздел данныхcvpartition
модельЭто свойство доступно только для чтения.
Раздел данных, указывающий, как программное обеспечение разделяет данные на сгибы перекрестной валидации, заданный как cvpartition
модель.
Trained
- Компактные классификаторы, обученные на сгибах для перекрестной валидацииCompactClassificationGAM
моделиЭто свойство доступно только для чтения.
Компактные классификаторы, обученные на сгибах перекрестной валидации, заданные как массив ячеек CompactClassificationGAM
объекты модели. Trained
имеет k камер, где k количество складок.
Типы данных: cell
CategoricalPredictors
- Категориальные индексы предиктора[]
Это свойство доступно только для чтения.
Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors
содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]
).
Типы данных: double
ClassNames
- Уникальные метки классовЭто свойство доступно только для чтения.
Уникальные метки классов, используемые в обучении, заданные как категориальный или символьный массив, логический или числовой вектор или массив ячеек векторов символов. ClassNames
имеет тот совпадающий тип данных, что и метки классов Y
. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
ClassNames
также определяет порядок классов.
Типы данных: single
| double
| logical
| char
| cell
| categorical
Cost
- Расходы на неправильную классификациюЗатраты на неправильную классификацию, заданные как числовая матрица 2 на 2.
Стоимость
- стоимость классификации точки в класс (i
, j
)j
если его класс true i
. Порядок строк и столбцов Cost
соответствует порядку классов в ClassNames
.
Программное обеспечение использует Cost
значение для предсказания, но не для обучения. Вы можете изменить значение с помощью записи через точку.
Пример: Mdl.Cost = C;
Типы данных: double
NumObservations
- Количество наблюденийЭто свойство доступно только для чтения.
Количество наблюдений в обучающих данных, хранимых в X
и Y
, заданный как числовой скаляр.
Типы данных: double
PredictorNames
- Имена переменных предиктораЭто свойство доступно только для чтения.
Имена переменных предиктора, заданные как массив ячеек из векторов символов. Порядок элементов PredictorNames
соответствует порядку, в котором имена предикторов появляются в обучающих данных.
Типы данных: cell
Prior
- Вероятности предыдущего классаЭто свойство доступно только для чтения.
Вероятности предыдущего класса, заданные как числовой вектор с двумя элементами. Порядок элементов соответствует порядку элементов в ClassNames
.
Типы данных: double
ResponseName
- Имя переменной откликаЭто свойство доступно только для чтения.
Имя переменной отклика, заданное как вектор символов.
Типы данных: char
ScoreTransform
- Преобразование счетаПреобразование счета, заданное как вектор символов или указатель на функцию. ScoreTransform
представляет встроенную функцию преобразования или указатель на функцию для преобразования предсказанных классификационных оценок.
Чтобы изменить функцию преобразования счета на function
для примера используйте запись через точку.
Для встроенной функции введите вектор символов.
Mdl.ScoreTransform = 'function';
В этой таблице описываются доступные встроенные функции.
Значение | Описание |
---|---|
'doublelogit' | 1/(1 + e–2x) |
'invlogit' | журнал (x/( 1 - x)) |
'ismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0 |
'logit' | 1/(1 + e–x) |
'none' или 'identity' | x (без преобразования) |
'sign' | -1 для x < 0 0 для x = 0 1 для x > 0 |
'symmetric' | 2 x – 1 |
'symmetricismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для MATLAB® function или функция, которую вы задаете, вводите указатель на функцию.
Mdl.ScoreTransform = @function;
function
необходимо принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).
Это свойство определяет выход счета расчета для функций объекта, таких как kfoldPredict
, kfoldMargin
, и kfoldEdge
. Использование 'logit'
для вычисления апостериорных вероятностей и использования 'none'
вычислить логит апостериорных вероятностей.
Типы данных: char
| function_handle
W
- Веса наблюденийЭто свойство доступно только для чтения.
Веса наблюдений, используемые для обучения модели, заданные как n-на-1 числовой вектор. n - количество наблюдений (NumObservations
).
Программа нормализует веса наблюдений, указанные в 'Weights'
аргумент имя-значение так, чтобы элементы W
в пределах конкретной суммы классов до предшествующей вероятности этого класса.
Типы данных: double
X
- ПредикторыЭто свойство доступно только для чтения.
Предикторы, используемые для перекрестной проверки модели, заданные в виде числовой матрицы или таблицы.
Каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Типы данных: single
| double
| table
Y
- Метки классовЭто свойство доступно только для чтения.
Метки классов, используемые для перекрестной проверки модели, заданные как категориальный или символьный массив, логический или числовой вектор или массив ячеек векторов символов. Y
имеет тот совпадающий тип данных, что и переменная отклика, используемая для обучения модели. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
Каждая строка Y
представляет наблюдаемую классификацию соответствующей строки X
.
Типы данных: single
| double
| logical
| char
| cell
| categorical
kfoldPredict | Классифицируйте наблюдения в перекрестно проверенной классификационной модели |
kfoldLoss | Классификационные потери для перекрестно проверенной классификационной модели |
kfoldMargin | Классификационные поля для перекрестно проверенной классификационной модели |
kfoldEdge | Классификационные ребра для перекрестно проверенной классификационной модели |
kfoldfun | Функция перекрестной проверки для классификации |
fitcgam
Обучите GAM с перекрестной проверкой с 10 складками, что является опцией перекрестной валидации по умолчанию, при помощи fitcgam
. Затем используйте kfoldPredict
чтобы предсказать метки классов для наблюдений с разбиением на валидации с использованием модели, обученной на наблюдениях с сложением обучения.
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b'
) или хорошо ('g'
).
load ionosphere
Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Задайте 'CrossVal'
аргумент имя-значение как 'on'
.
rng('default') % For reproducibility CVMdl = fitcgam(X,Y,'CrossVal','on')
CVMdl = ClassificationPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {1x34 cell} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ClassNames: {'b' 'g'} ScoreTransform: 'logit' Properties, Methods
The fitcgam
функция создает ClassificationPartitionedGAM
объект модели CVMdl
с 10 складками. Во время перекрестной проверки программное обеспечение завершает следующие шаги:
Случайным образом разбейте данные на 10 наборов.
Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другие 9 наборов.
Сохраните 10 компактных обученных моделей в векторе камеры 10 на 1 в Trained
свойство перекрестно проверенного объекта модели ClassificationPartitionedGAM
.
Вы можете переопределить настройку перекрестной проверки по умолчанию с помощью 'CVPartition'
, 'Holdout'
, 'KFold'
, или 'Leaveout'
аргумент имя-значение.
Классифицируйте наблюдения в X
при помощи kfoldPredict
. Функция предсказывает метки классов для каждого наблюдения, используя модель, обученную без этого наблюдения.
label = kfoldPredict(CVMdl);
Создайте матрицу неточностей, чтобы сравнить истинные классы наблюдений с их предсказанными метками.
C = confusionchart(Y,label);
Вычислите ошибку классификации.
L = kfoldLoss(CVMdl)
L = 0.0712
Средняя степень неправильной классификации более 10 складок составляет около 7%.
crossval
Обучите GAM при помощи fitcgam
, и создать перекрестную проверенную GAM с помощью crossval
и опция удержания. Затем используйте kfoldPredict
предсказать ответы на наблюдения с сворачиванием с использованием модели, обученной на наблюдениях с сворачиванием.
Загрузка данных переписи 1994 года, хранящихся в census1994.mat
. Набор данных состоит из демографических данных Бюро переписи населения США, чтобы предсказать, составляет ли индивидуум более 50 000 долларов в год. Задача классификации состоит в том, чтобы соответствовать модели, которая предсказывает категорию заработной платы людей с учетом их возраста, рабочего класса, уровня образования, семейного положения, расы и так далее.
load census1994
census1994
содержит обучающий набор обучающих данных adultdata
и набор тестовых данных adulttest
. Чтобы уменьшить время работы для этого примера, выделите 500 обучающих наблюдений из adultdata
при помощи datasample
функция.
rng('default') NumSamples = 5e2; adultdata = datasample(adultdata,NumSamples,'Replace',false);
Обучите GAM, который содержит как линейные, так и условия взаимодействия для предикторов. Задайте, чтобы включить все доступные условия взаимодействия, значения p которых не более 0,05.
Mdl = fitcgam(adultdata,'salary','Interactions','all','MaxPValue',0.05);
Mdl
является ClassificationGAM
объект модели.
Перекрестная валидация модели путем определения 30% -ной выборки удержания.
CVMdl = crossval(Mdl,'Holdout',0.3)
CVMdl = ClassificationPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {1x14 cell} CategoricalPredictors: [2 4 6 7 8 9 10 14] ResponseName: 'salary' NumObservations: 500 KFold: 1 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ClassNames: [<=50K >50K] ScoreTransform: 'logit' Properties, Methods
The crossval
функция создает ClassificationPartitionedGAM
объект модели CVMdl
с опцией holdout. Во время перекрестной проверки программное обеспечение завершает следующие шаги:
Случайным образом выберите и зарезервируйте 30% данных в качестве данных валидации и обучите модель с использованием остальных данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестно проверенного объекта модели ClassificationPartitionedGAM
.
Вы можете выбрать другую настройку перекрестной проверки с помощью 'CrossVal'
, 'CVPartition'
, 'KFold'
, или 'Leaveout'
аргумент имя-значение.
Классифицируйте наблюдения свертки валидации при помощи kfoldPredict
. Функция предсказывает метки классов для наблюдений сгиба валидации с помощью модели, обученной наблюдениям сгиба обучения. Функция присваивает наиболее часто предсказываемую метку наблюдениям training-fold.
[labels,scores] = kfoldPredict(CVMdl);
Найдите наблюдения складки валидации. kfoldPredict
возвращает 0 счета для обоих классов для наблюдений складки обучения. Поэтому можно идентифицировать наблюдения с разбиением на валидации путем нахождения наблюдений, счета которых являются нулями.
idx = find(sum(abs(scores),2)~=0);
Создайте матрицу неточностей, чтобы сравнить истинные классы наблюдений с их предсказанными метками и вычислить ошибку классификации для наблюдений с разбиением на валидации.
C = confusionchart(adultdata.salary(idx),labels(idx));
L = kfoldLoss(CVMdl)
L = 0.1867
kfoldLoss
Обучите перекрестно проверенную обобщенную аддитивную модель (GAM) с 10 складками. Затем используйте kfoldLoss
вычислить совокупные ошибки классификации перекрестных валидаций (коэффициент неправильной классификации в десятичных числах). Используйте ошибки, чтобы определить оптимальное количество деревьев на предиктор (линейный термин для предиктора) и оптимальное количество деревьев на член взаимодействия.
Также можно найти оптимальные значения fitcgam
аргументы имя-значение при помощи bayesopt
функция. Для получения примера смотрите Оптимизацию Перекрестно Проверенной GAM Используя bayesopt.
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b'
) или хорошо ('g'
).
load ionosphere
Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Задайте 'CrossVal'
аргумент имя-значение как 'on'
. Задайте, чтобы включить все доступные условия взаимодействия, значения p которых не более 0,05.
rng('default') % For reproducibility CVMdl = fitcgam(X,Y,'CrossVal','on','Interactions','all','MaxPValue',0.05);
Если вы задаете 'Mode'
как 'cumulative'
для kfoldLoss
, затем функция возвращает совокупные ошибки, которые являются средними ошибками для всех складок, полученных с использованием одинакового количества деревьев для каждой складки. Отображение количества деревьев для каждой складки.
CVMdl.NumTrainedPerFold
ans = struct with fields:
PredictorTrees: [65 64 59 61 60 66 65 62 64 61]
InteractionTrees: [1 2 2 2 2 1 2 2 2 2]
kfoldLoss
может вычислить совокупные ошибки, используя до 59 деревьев предикторов и одно дерево взаимодействия.
Постройте график кумулятивной, 10-кратной перекрестной ошибки классификации (коэффициент неправильной классификации в десятичных числах). Задайте 'IncludeInteractions'
как false
исключить условия взаимодействия из расчетов.
L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false); figure plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)
Первый элемент L_noInteractions
- средняя ошибка по всем складкам, полученная с использованием только термина точка пересечения (константа). The (J+1
) первый элемент L_noInteractions
- средняя ошибка, полученная с помощью термина точки пересечения и первого J
деревья предикторов на линейный член. Построение графика совокупных потерь позволяет вам контролировать, как изменяется ошибка, когда количество деревьев предикторов в GAM увеличивается.
Найдите минимальную ошибку и количество деревьев предикторов, используемых для достижения минимальной ошибки.
[M,I] = min(L_noInteractions)
M = 0.0655
I = 23
GAM достигает минимальной ошибки, когда включает 22 дерева предикторов.
Вычислите совокупную ошибку классификации, используя как линейные условия, так и условия взаимодействия.
L = kfoldLoss(CVMdl,'Mode','cumulative')
L = 2×1
0.0712
0.0712
Первый элемент L
- средняя ошибка по всем складкам, полученная с помощью термина точка пересечения (константа) и всех деревьев предикторов на линейный термин. Второй элемент L
- средняя ошибка, полученная с помощью термина точки пересечения, всех деревьев предикторов на линейный термин и одного дерева взаимодействия на термин взаимодействия. Ошибка не уменьшается при добавлении условий взаимодействия.
Если вас устраивает ошибка, когда количество деревьев предикторов составляет 22, можно создать прогнозирующую модель, снова обучив одномерную GAM и задав 'NumTreesPerPredictor',22
без перекрестной проверки.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.