Классифицируйте наблюдения с помощью обобщенной аддитивной модели (GAM)
возвращает вектор из Предсказанных Меток Класса для данных о предикторе в таблице или матричном label
= predict(Mdl
,X
)X
, на основе обобщенной аддитивной модели Mdl
для бинарной классификации. Обученная модель может быть или полной или компактной.
Для каждого наблюдения в X
, предсказанная метка класса соответствует минимальной Ожидаемой Стоимости Misclassification.
задает, включать ли периоды взаимодействия в расчеты.label
= predict(Mdl
,X
,'IncludeInteractions',includeInteractions
)
Обучите обобщенную аддитивную модель с помощью обучающих выборок, и затем пометьте тестовые выборки.
Загрузите fisheriris
набор данных. Создайте X
как числовая матрица, которая содержит чашелистик и лепестковые измерения для ирисовых диафрагм virginica и versicolor. Создайте 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 1081091 classreg.learning.classif.CompactClassificationGAM Mdl 1x1 1282650 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
как числовая матрица, которая содержит два лепестковых измерения для ирисовых диафрагм virginica и versicolor. Создайте 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
если модель не содержит периоды взаимодействия.
Типы данных: логический
label
— Предсказанные метки классаПредсказанные Метки Класса, возвращенные как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов.
Если Mdl.ScoreTransform
'logit'
(значение по умолчанию), затем каждая запись label
соответствует классу с минимальной Ожидаемой Стоимостью Misclassification для соответствующей строки X
. В противном случае каждая запись соответствует классу с максимальным счетом.
label
имеет совпадающий тип данных, когда наблюдаемый класс помечает, это обучило Mdl
, и его длина равна количеству строк в X
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
score
— Предсказанные апостериорные вероятности или баллы классаПредсказанные апостериорные вероятности или баллы класса, возвращенные как 2D столбец числовая матрица с одинаковым числом строк как X
. Первые и вторые столбцы score
содержите первый класс (или отрицательный класс, Mdl.ClassNames(1)
) и второй класс (или положительный класс, Mdl.ClassNames(2)
) значения баллов для соответствующих наблюдений, соответственно.
Если Mdl.ScoreTransform
'logit'
(значение по умолчанию), затем значения баллов являются апостериорными вероятностями. Если Mdl.ScoreTransform
'none'
, затем значения баллов являются логитом апостериорных вероятностей. Программное обеспечение обеспечивает несколько встроенных функций преобразования счета. Для получения дополнительной информации смотрите ScoreTransform
свойство Mdl
.
Можно изменить преобразование счета путем определения 'ScoreTransform'
аргумент fitcgam
во время обучения, или путем изменения ScoreTransform
свойство после обучения.
predict
классифицирует путем минимизации ожидаемой стоимости misclassification:
где:
предсказанная классификация.
K является количеством классов.
апостериорная вероятность класса j для наблюдения x.
стоимость классификации наблюдения как y, когда его истинным классом является j.
Ожидаемая стоимость misclassification на наблюдение является усредненной стоимостью классификации наблюдения в каждый класс.
Предположим, что у вас есть Nobs
наблюдения, что вы хотите классифицировать с обученным классификатором, и у вас есть K
классы. Вы помещаете наблюдения в матричный X
с одним наблюдением на строку.
Ожидаемая матрица стоимости CE
имеет размер Nobs
- K
. Каждая строка CE
содержит ожидаемую (среднюю) стоимость классификации наблюдения в каждый K
классы. CE(n,k)
где:
K является количеством классов.
апостериорная вероятность класса i для наблюдения X (n).
истинная misclassification стоимость классификации наблюдения как k, когда его истинным классом является i.
Истинная стоимость misclassification является стоимостью классификации наблюдения в неправильный класс.
Можно установить истинную стоимость misclassification в классе при помощи 'Cost'
аргумент значения имени, когда вы создаете классификатор. Cost(i,j)
стоимость классификации наблюдения в класс j
когда его истинным классом является i
. По умолчанию, Cost(i,j)=1
если i~=j
, и Cost(i,j)=0
если i=j
. Другими словами, стоимостью является 0
для правильной классификации и 1
для неправильной классификации.
loss
| margin
| edge
| resubPredict
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.