Ho due cluster di dati ogni cluster ha x, y (coordinate) e un valore per conoscerne il tipo (1 classe1,2 classe 2). Ho tracciato questi dati ma vorrei piace dividere queste classi con i confini (visivamente). qual è la funzione per fare una cosa del genere ho provato il contorno ma non è stato d'aiuto!Divisione dei dati in due classi visivamente in MATLAB
6
A
risposta
11
considerare questo classification problema (utilizzando il Iris dataset):
Come si può vedere, tranne che per i cluster facilmente separabili di cui si conosce l'equazione del confine in anticipo, trovando il confine non è un compito banale ...
un'idea è quella di utilizzare la funzione classifydiscriminant analysis per trovare il confine (si dispone di una scelta tra lineare e quadratica di confine).
Quanto segue è un esempio completo per illustrare la procedura. Il codice richiede l'Statistics Toolbox:
%# load Iris dataset (make it binary-class with 2 features)
load fisheriris
data = meas(:,1:2);
labels = species;
labels(~strcmp(labels,'versicolor')) = {'non-versicolor'};
NUM_K = numel(unique(labels)); %# number of classes
numInst = size(data,1); %# number of instances
%# visualize data
figure(1)
gscatter(data(:,1), data(:,2), labels, 'rb', '*o', ...
10, 'on', 'sepal length', 'sepal width')
title('Iris dataset'), box on, axis tight
%# params
classifierType = 'quadratic'; %# 'quadratic', 'linear'
npoints = 100;
clrLite = [1 0.6 0.6 ; 0.6 1 0.6 ; 0.6 0.6 1];
clrDark = [0.7 0 0 ; 0 0.7 0 ; 0 0 0.7];
%# discriminant analysis
%# classify the grid space of these two dimensions
mn = min(data); mx = max(data);
[X,Y] = meshgrid(linspace(mn(1),mx(1),npoints) , linspace(mn(2),mx(2),npoints));
X = X(:); Y = Y(:);
[C,err,P,logp,coeff] = classify([X Y], data, labels, classifierType);
%# find incorrectly classified training data
[CPred,err] = classify(data, data, labels, classifierType);
bad = ~strcmp(CPred,labels);
%# plot grid classification color-coded
figure(2), hold on
image(X, Y, reshape(grp2idx(C),npoints,npoints))
axis xy, colormap(clrLite)
%# plot data points (correctly and incorrectly classified)
gscatter(data(:,1), data(:,2), labels, clrDark, '.', 20, 'on');
%# mark incorrectly classified data
plot(data(bad,1), data(bad,2), 'kx', 'MarkerSize',10)
axis([mn(1) mx(1) mn(2) mx(2)])
%# draw decision boundaries between pairs of clusters
for i=1:NUM_K
for j=i+1:NUM_K
if strcmp(coeff(i,j).type, 'quadratic')
K = coeff(i,j).const;
L = coeff(i,j).linear;
Q = coeff(i,j).quadratic;
f = sprintf('0 = %g + %g*x + %g*y + %g*x^2 + %g*x.*y + %g*y.^2',...
K,L,Q(1,1),Q(1,2)+Q(2,1),Q(2,2));
else
K = coeff(i,j).const;
L = coeff(i,j).linear;
f = sprintf('0 = %g + %g*x + %g*y', K,L(1),L(2));
end
h2 = ezplot(f, [mn(1) mx(1) mn(2) mx(2)]);
set(h2, 'Color','k', 'LineWidth',2)
end
end
xlabel('sepal length'), ylabel('sepal width')
title(sprintf('accuracy = %.2f%%', 100*(1-sum(bad)/numInst)))
hold off
Problemi correlati
- 1. Creare dati artificiali in MATLAB
- 2. Divisione sorgente streaming Akka in due
- 3. Divisione Big Array in due array
- 4. la lettura dei dati da MATLAB in Java
- 5. lettura dei dati da file di MATLAB in C
- 6. Come stampare due figure in MATLAB
- 7. Best practice per il salvataggio dei dati in classi astratte
- 8. Creazione di classi dinamicamente in matlab
- 9. Divisione due vettori
- 10. correlazione in MATLAB tra due matrici
- 11. Plotting dati volumetrici in MATLAB
- 12. ellisse attorno ai dati in MATLAB
- 13. Caratteri visivamente identici in Unicode
- 14. divisione MATLAB ... dovrebbe 29/128 restituire 0?
- 15. volley invio dei dati Android due volte
- 16. Divisione Mod di due interi
- 17. Confronto di due matrici in Matlab
- 18. migrazione dei dati Django Sud è in esecuzione due volte
- 19. Costruttore di classi multiple Matlab
- 20. Come posso creare una trama "mappa dei colori" in MATLAB?
- 21. Condivisione dei dati iCloud tra due app
- 22. I bean Java sono classi errate come classi di archiviazione dei dati?
- 23. come ottenere i dati dell'istogramma in Matlab
- 24. Divisione internazionale in scala
- 25. LINQ supporta nativamente la divisione di una raccolta in due?
- 26. ereditano da due classi in C#
- 27. Come unire due classi in PHP?
- 28. Sass - due classi in un singolo tag
- 29. zona Fill tra due componenti connesse in MATLAB
- 30. esistono strumenti per confrontare visivamente due pagine Web diverse?
+1 .... abbastanza! – Jacob
@Amro - sono solo io o manca il secondo screenshot? – Shai
@Shai: non solo te, a volte le vecchie immagini caricate su imageshack tendono a scomparire per qualche motivo ... Ad ogni modo ho aggiornato l'esempio con immagini fresche :) – Amro