В этом примере показано, как визуализировать следующие вероятности классификации, предсказанные наивной моделью классификации Бейеса.
Загрузите ирисовый набор данных Фишера.
load fisheriris
X = meas(:,1:2);
Y = species;
labels = unique(Y);
X
числовая матрица, которая содержит два лепестковых измерения для 150 ирисовых диафрагм. Y
массив ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.
Визуализируйте данные с помощью графика рассеивания. Сгруппируйте переменные ирисовыми разновидностями.
figure; gscatter(X(:,1), X(:,2), species,'rgb','osd'); xlabel('Sepal length'); ylabel('Sepal width');
Обучите наивный классификатор Байеса.
mdl = fitcnb(X,Y);
mdl
обученный ClassificationNaiveBayes
классификатор.
Создайте сетку точек, охватывающих целый пробел в некоторых границах данных. Данные в X(:,1)
области значений между 4,3 и 7.9. Данные в X(:,2)
области значений между 2 и 4.4.
[xx1, xx2] = meshgrid(4:.01:8,2:.01:4.5); XGrid = [xx1(:) xx2(:)];
Предскажите ирисовые разновидности и следующие вероятности класса каждого наблюдения в XGrid
использование mdl
.
[predictedspecies,Posterior,~] = predict(mdl,XGrid);
Постройте распределение апостериорной вероятности для каждой разновидности.
sz = size(xx1); s = max(Posterior,[],2); figure hold on surf(xx1,xx2,reshape(Posterior(:,1),sz),'EdgeColor','none') surf(xx1,xx2,reshape(Posterior(:,2),sz),'EdgeColor','none') surf(xx1,xx2,reshape(Posterior(:,3),sz),'EdgeColor','none') xlabel('Sepal length'); ylabel('Sepal width'); colorbar view(2) hold off
Чем ближе наблюдение добирается до поверхности решения, тем менее вероятно это, что данные принадлежат определенной разновидности.
Постройте вероятностные распределения классификации индивидуально.
figure('Units','Normalized','Position',[0.25,0.55,0.4,0.35]); hold on surf(xx1,xx2,reshape(Posterior(:,1),sz),'FaceColor','red','EdgeColor','none') surf(xx1,xx2,reshape(Posterior(:,2),sz),'FaceColor','blue','EdgeColor','none') surf(xx1,xx2,reshape(Posterior(:,3),sz),'FaceColor','green','EdgeColor','none') xlabel('Sepal length'); ylabel('Sepal width'); zlabel('Probability'); legend(labels) title('Classification Probability') alpha(0.2) view(3) hold off