exponenta event banner

предсказать

Классифицировать наблюдения с помощью наивного классификатора Байеса

Описание

пример

label = predict(Mdl,X) возвращает вектор прогнозируемых меток класса для данных предиктора в таблице или матрице X, на основе обученной наивной модели классификации Байеса Mdl. Обученная наивная модель Байеса может быть либо полной, либо компактной.

пример

[label,Posterior,Cost] = predict(Mdl,X) также возвращает заднюю вероятность (Posterior) и прогнозируемая (ожидаемая) стоимость неправильной классификации (Cost), соответствующие наблюдениям (строкам) в Mdl.X. Для каждого наблюдения в X, прогнозируемая метка класса соответствует минимальной ожидаемой стоимости классификации среди всех классов.

Примеры

свернуть все

Загрузить fisheriris набор данных. Создать X в виде цифровой матрицы, которая содержит четыре измерения лепестка для 150 ирисов. Создать Y как клеточный массив характерных векторов, который содержит соответствующие виды радужки.

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Случайное разделение наблюдений на обучающий набор и тестовый набор со стратификацией с использованием информации о классе в Y. Укажите 30% образец хранения для тестирования.

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. Рекомендуется указывать имена классов. fitcnb предполагает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'setosa','versicolor','virginica'})
Mdl = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'setosa'  'versicolor'  'virginica'}
            ScoreTransform: 'none'
           NumObservations: 105
         DistributionNames: {'normal'  'normal'  'normal'  'normal'}
    DistributionParameters: {3x4 cell}


  Properties, Methods

Mdl является обученным ClassificationNaiveBayes классификатор.

Спрогнозировать метки тестового образца.

idx = randsample(sum(testInds),10);
label = predict(Mdl,XTest);

Отображение результатов для случайного набора из 10 наблюдений в тестовой выборке.

table(YTest(idx),label(idx),'VariableNames',...
    {'TrueLabel','PredictedLabel'})
ans=10×2 table
      TrueLabel       PredictedLabel
    ______________    ______________

    {'virginica' }    {'virginica' }
    {'versicolor'}    {'versicolor'}
    {'versicolor'}    {'versicolor'}
    {'virginica' }    {'virginica' }
    {'setosa'    }    {'setosa'    }
    {'virginica' }    {'virginica' }
    {'setosa'    }    {'setosa'    }
    {'versicolor'}    {'versicolor'}
    {'versicolor'}    {'virginica' }
    {'versicolor'}    {'versicolor'}

Создание таблицы путаницы из истинных меток YTest и прогнозируемые метки label.

cm = confusionchart(YTest,label);

Figure contains an object of type ConfusionMatrixChart.

Оцените апостериорные вероятности и затраты на неправильную классификацию для новых наблюдений с использованием наивного классификатора Байеса. Классифицируйте новые наблюдения с помощью предварительно обученного классификатора, эффективного для памяти.

Загрузить fisheriris набор данных. Создать X в виде цифровой матрицы, которая содержит четыре измерения лепестка для 150 ирисов. Создать Y как клеточный массив характерных векторов, который содержит соответствующие виды радужки.

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Разбейте набор данных на два набора: один содержит обучающий набор, а другой - новые ненаблюдаемые данные. Зарезервируйте 10 наблюдений для нового набора данных.

n = size(X,1);
newInds = randsample(n,10);
inds = ~ismember(1:n,newInds);
XNew = X(newInds,:);
YNew = Y(newInds);

Обучить наивный классификатор Байеса с помощью предикторов X и метки классов Y. Рекомендуется указывать имена классов. fitcnb предполагает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(X(inds,:),Y(inds),...
    'ClassNames',{'setosa','versicolor','virginica'});

Mdl является обученным ClassificationNaiveBayes классификатор.

Сохраняйте память, уменьшая размер обученного наивного классификатора Байеса.

CMdl = compact(Mdl);
whos('Mdl','CMdl')
  Name      Size            Bytes  Class                                                        Attributes

  CMdl      1x1              5406  classreg.learning.classif.CompactClassificationNaiveBayes              
  Mdl       1x1             12707  ClassificationNaiveBayes                                               

CMdl является CompactClassificationNaiveBayes классификатор. Он использует меньше памяти, чем Mdl потому что Mdl сохраняет данные.

Отображение имен классов CMdl с использованием точечной нотации.

CMdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Спрогнозировать метки. Оцените апостериорные вероятности и ожидаемые затраты на неправильную классификацию класса.

[labels,PostProbs,MisClassCost] = predict(CMdl,XNew);

Сравните истинные метки с прогнозируемыми метками.

table(YNew,labels,PostProbs,MisClassCost,'VariableNames',...
    {'TrueLabels','PredictedLabels',...
    'PosteriorProbabilities','MisclassificationCosts'})
ans=10×4 table
      TrueLabels      PredictedLabels             PosteriorProbabilities                      MisclassificationCosts        
    ______________    _______________    _________________________________________    ______________________________________

    {'virginica' }    {'virginica' }     4.0832e-268     4.6422e-09              1             1             1    4.6422e-09
    {'setosa'    }    {'setosa'    }               1     3.0706e-18     4.6719e-25    3.0706e-18             1             1
    {'virginica' }    {'virginica' }     1.0007e-246     5.8758e-10              1             1             1    5.8758e-10
    {'versicolor'}    {'versicolor'}      1.2022e-61        0.99995     4.9859e-05             1    4.9859e-05       0.99995
    {'virginica' }    {'virginica' }      2.687e-226     1.7905e-08              1             1             1    1.7905e-08
    {'versicolor'}    {'versicolor'}      3.3431e-76        0.99971     0.00028983             1    0.00028983       0.99971
    {'virginica' }    {'virginica' }       4.05e-166      0.0028527        0.99715             1       0.99715     0.0028527
    {'setosa'    }    {'setosa'    }               1     1.1272e-14     2.0308e-23    1.1272e-14             1             1
    {'virginica' }    {'virginica' }     1.3292e-228     8.3604e-10              1             1             1    8.3604e-10
    {'setosa'    }    {'setosa'    }               1     4.5023e-17     2.1724e-24    4.5023e-17             1             1

PostProbs и MisClassCost являются 10около-3 числовые матрицы, где каждая строка соответствует новому наблюдению, а каждый столбец соответствует классу. Порядок столбцов соответствует порядку CMdl.ClassNames.

Загрузить fisheriris набор данных. Создать X в виде цифровой матрицы, которая содержит четыре измерения лепестка для 150 ирисов. Создать Y как клеточный массив характерных векторов, который содержит соответствующие виды радужки.

load fisheriris
X = meas(:,3:4);
Y = species;

Обучить наивный классификатор Байеса с помощью предикторов X и метки классов Y. Рекомендуется указывать имена классов. fitcnb предполагает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'});

Mdl является обученным ClassificationNaiveBayes классификатор.

Определите сетку значений в наблюдаемом предикторном пространстве.

xMax = max(X);
xMin = min(X);
h = 0.01;
[x1Grid,x2Grid] = meshgrid(xMin(1):h:xMax(1),xMin(2):h:xMax(2));

Предсказать апостериорные вероятности для каждого случая в сетке.

[~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);

Постройте график задних областей вероятности и тренировочных данных.

h = scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion);
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)';
axis tight
legend(gh,'Location','Best')
hold off

Figure contains an axes. The axes with title Iris Petal Measurements and Posterior Probabilities contains 4 objects of type scatter, line. These objects represent setosa, versicolor, virginica.

Входные аргументы

свернуть все

Наивная модель классификации Байеса, указанная как ClassificationNaiveBayes объект модели или CompactClassificationNaiveBayes объект модели, возвращенный fitcnb или compactсоответственно.

Данные предиктора, подлежащие классификации, указываются как числовая матрица или таблица.

Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Для числовой матрицы:

    • Переменные, составляющие столбцы X должен иметь тот же порядок, что и обучаемые переменные предиктора Mdl.

    • Если вы тренируетесь Mdl использование таблицы (например, Tbl), то X может быть числовой матрицей, если Tbl содержит только числовые переменные предиктора. Чтобы обработать числовые предикторы в Tbl в качестве категориального во время обучения, определить категориальные предикторы, используя 'CategoricalPredictors' аргумент пары имя-значение fitcnb. Если Tbl содержит разнородные переменные предиктора (например, числовые и категориальные типы данных) и X является числовой матрицей, то predict выдает ошибку.

  • Для таблицы:

    • predict не поддерживает многозначные переменные или массивы ячеек, отличные от массивов ячеек символьных векторов.

    • Если вы тренируетесь Mdl использование таблицы (например, Tbl), затем все переменные предиктора в X должны иметь те же имена переменных и типы данных, что и обучаемые переменные Mdl (хранится в Mdl.PredictorNames). Однако порядок столбцов X не обязательно соответствовать порядку столбцов Tbl. Tbl и X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.

    • Если вы тренируетесь Mdl используя числовую матрицу, затем имена предикторов в Mdl.PredictorNames должны совпадать с именами соответствующих переменных предиктора в X. Чтобы указать имена предикторов во время обучения, используйте 'PredictorNamesаргумент пары имя-значение fitcnb. Все переменные предиктора в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.

Типы данных: table | double | single

Примечания:

  • Если Mdl.DistributionNames является 'mn', то программное обеспечение возвращается NaNs, соответствующие строкам X которые содержат, по крайней мере, один NaN.

  • Если Mdl.DistributionNames не является 'mn', то программное обеспечение игнорирует NaN значения при оценке затрат на неправильную классификацию и апостериорных вероятностей. В частности, программное обеспечение вычисляет условную плотность предикторов, заданных классом, путем исключения факторов, соответствующих отсутствующим значениям предикторов.

  • Для предикторного распределения указано как 'mvmn', если X содержит уровни, которые не представлены в данных обучения (то есть не в Mdl.CategoricalLevels для этого предиктора), то условная плотность предикторов, заданных классом, равна 0. Для этих наблюдений программное обеспечение возвращает соответствующее значение Posterior в качестве NaN. Программное обеспечение определяет метку класса для таких наблюдений, используя предварительную вероятность класса, сохраненную в Mdl.Prior.

Выходные аргументы

свернуть все

Прогнозируемые метки класса, возвращаемые в виде категориального вектора, символьного массива, логического или числового вектора или массива ячеек символьных векторов.

Прогнозируемые метки классов имеют следующее:

  • Тот же тип данных, что и наблюдаемые метки классов (Mdl.Y). (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

  • Длина равна числу строк Mdl.X.

  • Класс, дающий самую низкую ожидаемую стоимость неправильной классификации (Cost).

Апостериорная вероятность класса, возвращаемая в виде числовой матрицы. Posterior имеет строки, равные количеству строк Mdl.X и столбцы, равные количеству отдельных классов в данных обучения (size(Mdl.ClassNames,1)).

Posterior(j,k) - прогнозируемая задняя вероятность класса k (в классе Mdl.ClassNames(k)) с учетом наблюдения в строке j из Mdl.X.

Ожидаемая стоимость неправильной классификации, возвращенная в виде числовой матрицы. Cost имеет строки, равные количеству строк Mdl.X и столбцы, равные количеству отдельных классов в данных обучения (size(Mdl.ClassNames,1)).

Cost(j,k) является ожидаемой стоимостью неправильной классификации наблюдения в строке j из Mdl.X спрогнозировано в класс k (в классе Mdl.ClassNames(k)).

Подробнее

свернуть все

Затраты на неправильную классификацию

Стоимость неправильной классификации - это относительная серьезность классификатора, маркирующего наблюдение в неправильный класс.

Существует два типа затрат на неправильную классификацию: истинные и ожидаемые. Пусть K - число классов.

  • Истинная стоимость неправильной классификации - матрица K-by-K, где элемент (i, j) указывает стоимость неправильной классификации предсказания наблюдения в класс j, если его истинный класс равен i. Программное обеспечение сохраняет стоимость неправильной классификации в свойствеMdl.Costи использует его в вычислениях. По умолчанию Mdl.Cost(i,j) = 1, если ij, и Mdl.Cost(i,j) = 0, если i = j. Другими словами, стоимость составляет 0 для правильной классификации и 1 для любой неправильной классификации.

  • Ожидаемая стоимость неправильной классификации - K-мерный вектор, где элемент k - средневзвешенная стоимость неправильной классификации при классификации наблюдения по классу k, взвешенная по апостериорным вероятностям класса.

    ck=∑j=1KP^ (Y = j 'x1,..., xP) Costjk.

    Другими словами, программное обеспечение классифицирует наблюдения по классу, соответствующему самой низкой ожидаемой стоимости неправильной классификации.

Задняя вероятность

Апостериорная вероятность - вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.

Для наивного Байеса апостериорная вероятность того, что классификация равна k для данного наблюдения (x1,...,xP), равна

P ^ (Y = k 'x1,.., xP) = P (X1,..., XP' y = k) (Y = k) P (X1,..., XP),

где:

  • P (X1,..., XP 'y = k) - условная плотность соединения предикторов при условии, что они находятся в классе k.Mdl.DistributionNames сохраняет имена распределения предикторов.

  • δ (Y = k) - класс, предшествующий распределению вероятности .Mdl.Prior сохраняет предыдущее распределение.

  • P (X1,..,XP) - совместная плотность предикторов. Классы дискретны, поэтому P (X1,...,XP) =∑k=1KP (X1,..., XP 'y = k) δ (Y = k).

Предварительная вероятность

Предшествующая вероятность класса - предполагаемая относительная частота, с которой наблюдения из этого класса происходят в популяции.

Расширенные возможности

.
Представлен в R2014b