Классифицируйте наблюдения с помощью обобщенной аддитивной модели (GAM)
возвращает вектор Предсказанных Меток Классов для данных предиктора в таблице или матрице label
= predict(Mdl
,X
)X
, на основе обобщенной аддитивной модели Mdl
для двоичной классификации. Обученная модель может быть либо полной, либо компактной.
Для каждого наблюдения в X
, предсказанная метка класса соответствует минимальной ожидаемой стоимости неправильной классификации.
задает, включать ли термины взаимодействия в расчеты.label
= predict(Mdl
,X
,'IncludeInteractions',includeInteractions
)
Обучите обобщенную аддитивную модель с помощью обучающих выборок, а затем пометьте тестовые выборки.
Загрузите fisheriris
набор данных. Создание X
как числовая матрица, которая содержит сепальные и лепестковые измерения для версиколор и виргиниковых ирисов. Создание Y
как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.
load fisheriris inds = strcmp(species,'versicolor') | strcmp(species,'virginica'); X = meas(inds,:); Y = species(inds,:);
Случайным образом разбейте наблюдения на набор обучающих данных и тестовый набор с расслоением, используя информацию о классе в Y
. Укажите 30% -ная выборка удержания для проверки.
rng('default') % For reproducibility cv = cvpartition(Y,'HoldOut',0.30);
Извлеките индексы обучения и тестирования.
trainInds = training(cv); testInds = test(cv);
Укажите наборы обучающих и тестовых данных.
XTrain = X(trainInds,:); YTrain = Y(trainInds); XTest = X(testInds,:); YTest = Y(testInds);
Обучите обобщенную аддитивную модель с помощью предикторов XTrain
и метки классов YTrain
. Рекомендуемая практика состоит в том, чтобы задать имена классов.
Mdl = fitcgam(XTrain,YTrain,'ClassNames',{'versicolor','virginica'})
Mdl = ClassificationGAM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'versicolor' 'virginica'} ScoreTransform: 'logit' Intercept: -1.1090 NumObservations: 70 Properties, Methods
Mdl
является ClassificationGAM
объект модели.
Спрогнозируйте метки тестовых выборок.
label = predict(Mdl,XTest);
Составьте таблицу, содержащую истинные метки и предсказанные метки. Отобразите таблицу для случайного набора из 10 наблюдений.
t = table(YTest,label,'VariableNames',{'True Label','Predicted Label'}); idx = randsample(sum(testInds),10); t(idx,:)
ans=10×2 table
True Label Predicted Label
______________ _______________
{'virginica' } {'virginica' }
{'virginica' } {'virginica' }
{'versicolor'} {'virginica' }
{'virginica' } {'virginica' }
{'virginica' } {'virginica' }
{'versicolor'} {'versicolor'}
{'versicolor'} {'versicolor'}
{'versicolor'} {'versicolor'}
{'versicolor'} {'versicolor'}
{'virginica' } {'virginica' }
Создайте график неточностей из истинных меток YTest
и предсказанные метки label
.
cm = confusionchart(YTest,label);
Оцените логит апостериорных вероятностей для новых наблюдений с помощью классификационной GAM, которая содержит как линейные, так и условия взаимодействия для предикторов. Классифицируйте новые наблюдения с помощью объекта эффективной памяти модели. Укажите, включать ли условия взаимодействия при классификации новых наблюдений.
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b'
) или хорошо ('g'
).
load ionosphere
Разделите набор данных на два набора: один, содержащий обучающие данные, и другой, содержащий новые, незащищенные тестовые данные. Резервируйте 10 наблюдений для нового набора тестовых данных.
rng('default') % For reproducibility n = size(X,1); newInds = randsample(n,10); inds = ~ismember(1:n,newInds); XNew = X(newInds,:); YNew = Y(newInds);
Обучите GAM с помощью предикторов X
и метки классов Y
. Рекомендуемая практика состоит в том, чтобы задать имена классов. Укажите, чтобы включить 10 наиболее важных условий взаимодействия.
Mdl = fitcgam(X(inds,:),Y(inds),'ClassNames',{'b','g'},'Interactions',10);
Mdl
является ClassificationGAM
объект модели.
Сохраните память путем уменьшения размера обученной модели.
CMdl = compact(Mdl); whos('Mdl','CMdl')
Name Size Bytes Class Attributes CMdl 1x1 1081082 classreg.learning.classif.CompactClassificationGAM Mdl 1x1 1282640 ClassificationGAM
CMdl
является CompactClassificationGAM
объект модели.
Спрогнозируйте метки, используя как линейные, так и условия взаимодействия, а затем используя только линейные условия. Чтобы исключить условия взаимодействия, задайте 'IncludeInteractions',false
. Оцените логит апостериорных вероятностей путем определения ScoreTransform
свойство как 'none'
.
CMdl.ScoreTransform = 'none'; [labels,scores] = predict(CMdl,XNew); [labels_nointeraction,scores_nointeraction] = predict(CMdl,XNew,'IncludeInteractions',false); t = table(YNew,labels,scores,labels_nointeraction,scores_nointeraction, ... 'VariableNames',{'True Labels','Predicted Labels','Scores' ... 'Predicted Labels Without Interactions','Scores Without Interactions'})
t=10×5 table
True Labels Predicted Labels Scores Predicted Labels Without Interactions Scores Without Interactions
___________ ________________ __________________ _____________________________________ ___________________________
{'g'} {'g'} -40.23 40.23 {'g'} -37.484 37.484
{'g'} {'g'} -41.215 41.215 {'g'} -38.737 38.737
{'g'} {'g'} -44.413 44.413 {'g'} -42.186 42.186
{'g'} {'b'} 3.0658 -3.0658 {'b'} 1.4338 -1.4338
{'g'} {'g'} -84.637 84.637 {'g'} -81.269 81.269
{'g'} {'g'} -27.44 27.44 {'g'} -24.831 24.831
{'g'} {'g'} -62.989 62.989 {'g'} -60.4 60.4
{'g'} {'g'} -77.109 77.109 {'g'} -75.937 75.937
{'g'} {'g'} -48.519 48.519 {'g'} -47.067 47.067
{'g'} {'g'} -56.256 56.256 {'g'} -53.373 53.373
Предсказанные метки для тестовых данных Xnew
не варьируются в зависимости от включения условий взаимодействия, но оцененные значения баллов различны.
Обучите обобщенную аддитивную модель, а затем постройте график апостериорных областей вероятностей с помощью значений вероятностей первого класса.
Загрузите fisheriris
набор данных. Создание X
как числовая матрица, которая содержит два измерения лепестков для versicolor и virginica irises. Создание Y
как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.
load fisheriris inds = strcmp(species,'versicolor') | strcmp(species,'virginica'); X = meas(inds,3:4); Y = species(inds,:);
Обучите обобщенную аддитивную модель с помощью предикторов X
и метки классов Y
. Рекомендуемая практика состоит в том, чтобы задать имена классов.
Mdl = fitcgam(X,Y,'ClassNames',{'versicolor','virginica'});
Mdl
является ClassificationGAM
объект модели.
Задайте сетку значений в наблюдаемом пространстве предикторов.
xMax = max(X); xMin = min(X); x1 = linspace(xMin(1),xMax(1),250); x2 = linspace(xMin(2),xMax(2),250); [x1Grid,x2Grid] = meshgrid(x1,x2);
Спрогнозируйте апостериорные вероятности для каждого образца в сетке.
[~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);
Постройте график апостериорных областей вероятностей с помощью значений вероятностей первого класса 'versicolor'
.
h = scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion(:,1)); h.MarkerEdgeAlpha = 0.3;
Постройте график обучающих данных.
hold on gh = gscatter(X(:,1),X(:,2),Y,'k','dx'); title('Iris Petal Measurements and Posterior Probabilities') xlabel('Petal length (cm)') ylabel('Petal width (cm)') legend(gh,'Location','Best') colorbar hold off
Mdl
- Обобщенная аддитивная модельClassificationGAM
объект модели | CompactClassificationGAM
объект моделиОбобщенная аддитивная модель, заданная как ClassificationGAM
или CompactClassificationGAM
объект модели.
X
- Данные предиктораДанные предиктора, заданные как числовая матрица или таблица.
Каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Для числовой матрицы:
Переменные, составляющие столбцы X
должен иметь тот же порядок, что и переменные предиктора, которые обучали Mdl
.
Если вы тренировались Mdl
используя таблицу, затем X
может быть числовой матрицей, если таблица содержит все числовые переменные предиктора.
Для таблицы:
Если вы тренировались Mdl
использование таблицы (для примера, Tbl
), затем все переменные предиктора в X
должны иметь те же имена переменных и типы данных, что и в Tbl
. Однако порядок столбцов X
не должен соответствовать порядку столбцов Tbl
.
Если вы тренировались Mdl
используя числовую матрицу, затем имена предикторов в Mdl.PredictorNames
и соответствующие имена переменных предиктора в X
должно быть то же самое. Чтобы задать имена предикторов во время обучения, используйте 'PredictorNames'
аргумент имя-значение. Все переменные предиктора в X
должны быть числовыми векторами.
X
может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict
игнорирует их.
predict
не поддерживает многополюсные переменные или массивы ячеек, отличные от массивов ячеек векторов символов.
Типы данных: table
| double
| single
includeInteractions
- Флаг для включения условий взаимодействияtrue
| false
Флаг для включения условий взаимодействия модели, заданный как true
или false
.
Значение по умолчанию includeInteractions
значение true
если Mdl
содержит условия взаимодействия. Значение должно быть false
если модель не содержит членов взаимодействия.
Типы данных: logical
label
- Предсказанные метки классовПредсказанные метки классов, возвращенные как категориальный или символьный массив, логический или числовой вектор или массив ячеек из векторов символов.
Если Mdl.ScoreTransform
является 'logit'
(по умолчанию), затем каждую запись label
соответствует классу с минимальными ожидаемыми затратами на неправильную классификацию для соответствующей строки X
. В противном случае каждая запись соответствует классу с максимальным счетом.
label
имеет тот совпадающий тип данных, что и наблюдаемые метки классов, которые обучали Mdl
, и его длина равна количеству строк в X
. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
score
- Предсказанные апостериорные вероятности или счета классовПредсказанные апостериорные вероятности или счета классов, возвращенные в виде двухколоночной числовой матрицы с одинаковым числом строк, как X
. Первый и второй столбцы score
содержат первый класс (или отрицательный класс, Mdl.ClassNames(1)
) и второго класса (или положительного класса, Mdl.ClassNames(2)
) оценить значения для соответствующих наблюдений, соответственно.
Если Mdl.ScoreTransform
является 'logit'
(по умолчанию), тогда значения баллов являются апостериорными вероятностями. Если Mdl.ScoreTransform
является 'none'
, тогда значения баллов являются логитом апостериорных вероятностей. Программное обеспечение обеспечивает несколько встроенных функций преобразования счетов. Для получения дополнительной информации смотрите ScoreTransform
свойство Mdl
.
Вы можете изменить преобразование счета, задав 'ScoreTransform'
аргумент fitcgam
во время обучения или путем изменения ScoreTransform
свойство после обучения.
predict
классифицирует путем минимизации ожидаемых затрат на неправильную классификацию:
где:
- предсказанная классификация.
K - количество классов.
- апостериорная вероятность j классов для x наблюдений.
- стоимость классификации наблюдения как y, когда его истинный класс j.
Ожидаемая стоимость неправильной классификации за наблюдение является усредненной стоимостью классификации наблюдений по каждому классу.
Предположим, у вас есть Nobs
наблюдения, которые вы хотите классифицировать с помощью обученного классификатора, и у вас есть K
классы. Наблюдения помещаются в матрицу X
с одним наблюдением за строкой.
Матрица ожидаемых затрат CE
имеет размер Nobs
-by- K
. Каждая строка CE
содержит ожидаемые (средние) затраты на классификацию наблюдений по каждому из K
классы. CE(n,k)
является
где:
K - количество классов.
- апостериорная вероятность i классов для X наблюдений (n).
- истинная стоимость неправильной классификации при классификации наблюдения как k, когда его истинный класс i.
Истинная стоимость неправильной классификации является стоимостью классификации наблюдения в неправильный класс.
Можно задать истинные затраты на неправильную классификацию по классам с помощью 'Cost'
аргумент имя-значение при создании классификатора. Cost(i,j)
- стоимость классификации наблюдений в классы j
когда его истинный класс i
. По умолчанию Cost(i,j)=1
если i~=j
, и Cost(i,j)=0
если i=j
. Другими словами, стоимость 0
для правильной классификации и 1
для неправильной классификации.
edge
| loss
| margin
| resubPredict
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.