Классификация наблюдений с использованием обобщенной аддитивной модели (GAM)
возвращает вектор прогнозируемых меток классов для данных предиктора в таблице или матрице label = predict(Mdl,X)X, на основе обобщенной аддитивной модели Mdl для двоичной классификации. Обучаемая модель может быть полной или компактной.
Для каждого наблюдения в X, прогнозируемая метка класса соответствует минимальной ожидаемой стоимости неправильной классификации.
указывает, следует ли включать в вычисления элементы взаимодействия.label = predict(Mdl,X,'IncludeInteractions',includeInteractions)
Тренировка обобщенной аддитивной модели с использованием обучающих образцов, а затем маркировка тестовых образцов.
Загрузить fisheriris набор данных. Создать X в качестве числовой матрицы, которая содержит измерения чашелистиков и лепестков для versicolor и virginica ирисов. Создать 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 ирисов. Создать 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 классифицирует путем минимизации ожидаемых затрат на неправильную классификацию:
C (y' j),
где:
^ - прогнозируемая классификация.
K - количество классов.
j 'x) - задняя вероятность класса j для наблюдения x.
) - стоимость классификации наблюдения как y, когда его истинным классом является j.
Ожидаемая стоимость неправильной классификации для каждого наблюдения представляет собой усредненную стоимость классификации наблюдения по каждому классу.
Предположим, что у вас есть Nobs наблюдения, которые вы хотите классифицировать с помощью обученного классификатора, и у вас есть K классы. Вы помещаете наблюдения в матрицу X с одним наблюдением на строку.
Матрица ожидаемых затрат CE имеет размер Nobsоколо-K. Каждая строка CE содержит ожидаемую (среднюю) стоимость классификации наблюдения в каждом из K классы. CE(n,k) является
k' i),
где:
K - количество классов.
n)) - задняя вероятность класса 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.