Перекрестная подтвержденная обобщенная аддитивная модель (GAM) для классификации
ClassificationPartitionedGAM
набор обобщенных аддитивных моделей, обученных на перекрестных подтвержденных сгибах. Оцените качество перекрестной подтвержденной классификации при помощи одной или нескольких функций kfold: kfoldPredict
, kfoldLoss
, kfoldMargin
, kfoldEdge
, и kfoldfun
.
Каждые модели использования функции объекта kfold, обученные на учебном сгибе, (окутывают) наблюдения, чтобы предсказать ответ для сгиба валидации наблюдения (из сгиба). Например, предположите, что вы перекрестный подтверждаете использование пяти сгибов. Программное обеспечение случайным образом присваивает каждое наблюдение в пять групп равного размера (примерно). training fold содержит четыре из групп (примерно 4/5 данных), и validation fold содержит другую группу (примерно 1/5 данных). В этом случае перекрестная проверка продолжает можно следующим образом:
Программное обеспечение обучает первую модель (сохраненный в CVMdl.Trained{1}
) при помощи наблюдений в последних четырех группах и резервов наблюдения в первой группе для валидации.
Программное обеспечение обучает вторую модель (сохраненный в CVMdl.Trained{2}
) при помощи наблюдений в первой группе и последних трех группах. Программное обеспечение резервирует наблюдения во второй группе для валидации.
Программное обеспечение продолжает подобным образом для третьих, четвертых, и пятых моделей.
Если вы подтверждаете при помощи kfoldPredict
, программное обеспечение вычисляет предсказания для наблюдений в группе i при помощи i th модель. Короче говоря, программное обеспечение оценивает ответ для каждого наблюдения при помощи модели, обученной без того наблюдения.
Можно создать ClassificationPartitionedGAM
модель двумя способами:
Создайте перекрестную подтвержденную модель из объекта GAM ClassificationGAM
при помощи crossval
объектная функция.
Создайте перекрестную подтвержденную модель при помощи fitcgam
функция и определение одних из аргументов name-value 'CrossVal'
, 'CVPartition'
, 'Holdout'
, 'KFold'
, или 'Leaveout'
.
CrossValidatedModel
— Перекрестное подтвержденное имя модели'GAM'
Это свойство доступно только для чтения.
Перекрестное подтвержденное имя модели в виде 'GAM'
.
KFold
— Количество перекрестных подтвержденных сгибовЭто свойство доступно только для чтения.
Количество перекрестных подтвержденных сгибов в виде положительного целого числа.
Типы данных: double
ModelParameters
— Значения параметров перекрестной проверкиЭто свойство доступно только для чтения.
Значения параметров перекрестной проверки в виде объекта. Значения параметров соответствуют значениям аргументов name-value, используемых, чтобы перекрестный подтвердить обобщенную аддитивную модель. ModelParameters
не содержит оцененные параметры.
Можно получить доступ к свойствам ModelParameters
использование записи через точку.
Partition
— Раздел данныхcvpartition
модельЭто свойство доступно только для чтения.
Раздел данных, указывающий, как программное обеспечение разделяет данные в сгибы перекрестной проверки в виде cvpartition
модель.
Trained
— Компактные классификаторы обучены на сгибах перекрестной проверкиCompactClassificationGAM
моделиЭто свойство доступно только для чтения.
Компактные классификаторы, обученные на перекрестной проверке, сворачиваются в виде массива ячеек CompactClassificationGAM
объекты модели. Trained
имеет ячейки k, где k является количеством сгибов.
Типы данных: cell
CategoricalPredictors
— Категориальные индексы предиктора[]
Это свойство доступно только для чтения.
Категориальные индексы предиктора в виде вектора из положительных целых чисел. CategoricalPredictors
содержит значения индекса, указывающие, что соответствующие предикторы являются категориальными. Значения индекса между 1 и p
, где p
количество предикторов, используемых, чтобы обучить модель. Если ни один из предикторов не является категориальным, то это свойство пусто ([]
).
Типы данных: double
ClassNames
— Уникальные метки классаЭто свойство доступно только для чтения.
Уникальные метки класса, используемые в обучении в виде категориального или символьного массива, логического или числового вектора или массива ячеек из символьных векторов. ClassNames
имеет совпадающий тип данных, когда класс маркирует Y
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
ClassNames
также определяет порядок класса.
Типы данных: single
| double
| logical
| char
| cell
| categorical
Cost
— Затраты MisclassificationMisclassification стоит в виде числовой матрицы 2 на 2.
Стойте (
стоимость классификации точки в класс i
J
)j
если его истинным классом является 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' | 2x – 1 |
'symmetricismax' | Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к –1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для MATLAB® функционируйте или функция, что вы задаете, вводите ее указатель на функцию.
Mdl.ScoreTransform = @function;
function
должен принять матрицу (исходные баллы) и возвратить матрицу, одного размера (преобразованные баллы).
Это свойство определяет выходной расчет счета для объектных функций такой как kfoldPredict
, kfoldMargin
, и kfoldEdge
. Используйте 'logit'
вычислить апостериорные вероятности и использовать 'none'
вычислить логит апостериорных вероятностей.
Типы данных: char |
function_handle
W
— Веса наблюденияЭто свойство доступно только для чтения.
Веса наблюдения раньше обучали модель в виде n-by-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
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
Среднее значение misclassification уровень более чем 10 сгибов составляет приблизительно 7%.
crossval
Обучите GAM при помощи fitcgam
, и создайте перекрестный подтвержденный GAM при помощи crossval
и опция затяжки. Затем используйте kfoldPredict
предсказать ответы для наблюдений сгиба валидации с помощью модели, обученной на наблюдениях учебного сгиба.
Загрузите 1 994 данных о переписи, хранимых в 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
crossval
функция создает ClassificationPartitionedGAM
объект модели CVMdl
с опцией затяжки. Во время перекрестной проверки программное обеспечение завершает эти шаги:
Случайным образом выберите и зарезервируйте 30% данных как данные о валидации и обучите модель с помощью остальной части данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестного подтвержденного объекта модели ClassificationPartitionedGAM
.
Можно выбрать различную установку перекрестной проверки при помощи 'CrossVal'
, 'CVPartition'
, 'KFold'
, или 'Leaveout'
аргумент значения имени.
Классифицируйте наблюдения сгиба валидации при помощи kfoldPredict
. Функция предсказывает метки класса для наблюдений сгиба валидации при помощи модели, обученной на наблюдениях учебного сгиба. Функция присваивает наиболее часто предсказанная метка к наблюдениям учебного сгиба.
[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
вычислить совокупные ошибки классификации перекрестных проверок (misclassification уровень в десятичном числе). Используйте ошибки определить оптимальное количество деревьев на предиктор (линейный член для предиктора) и оптимальное количество деревьев в период взаимодействия.
В качестве альтернативы можно найти оптимальные значения fitcgam
аргументы name-value при помощи аргумента значения имени OptimizeHyperparameters. Для примера смотрите, Оптимизируют GAM Используя OptimizeHyperparameters.
Загрузите 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-кратное, ошибка классификации (misclassification уровень в десятичном числе). Задайте 'IncludeInteractions'
как false
исключить периоды взаимодействия из расчета.
L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false); figure plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)
Первый элемент L_noInteractions
средняя погрешность по всем сгибам, полученным с помощью только точку пересечения (постоянный) термин. (J+1
) элемент th 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
без перекрестной проверки.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.