Tengo dos grupos de datos cada clúster tiene x, y (coordenadas) y un valor para saber su tipo (1 clase1,2 clase 2). He trazado estos datos pero lo haría Me gusta dividir estas clases con el límite (visualmente). cuál es la función para hacer tal cosa. Intenté contornear pero no sirvió de nada.División visual de datos en dos clases en matlab
6
A
Respuesta
11
consideran este problema classification (utilizando el Iris dataset):
Como se puede ver, a excepción de los grupos fácilmente separables del cual conoce la ecuación de la frontera de antemano, la búsqueda de la frontera no es una tarea trivial ...
una idea es utilizar la función discriminant analysisclassify para encontrar el límite (que tiene que elegir entre lineal y cuadrática límite).
El siguiente es un ejemplo completo para ilustrar el procedimiento. El código requiere la Caja de Herramientas Estadísticas:
%# 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
Cuestiones relacionadas
- 1. Crear clases dinámicamente en matlab
- 2. Comparando dos matrices en Matlab
- 3. correlación en Matlab entre dos matrices
- 4. elipse alrededor de los datos en MATLAB
- 5. división MATLAB ... ¿debería 29/128 devolver 0?
- 6. ¿Dividir datos en conjuntos de datos de entrenamiento/prueba en MATLAB?
- 7. heredan de dos clases en C#
- 8. División de datos y rieles
- 9. división c Objetivo de dos enteros
- 10. Borrado de las definiciones de clases en MATLAB
- 11. Uso de clases genéricas de Java en Matlab
- 12. Función de Matlab/historial de clases
- 13. cómo obtener datos de histograma en Matlab
- 14. leyendo datos de Matlab en Java
- 15. División de dataframe utilizando dos columnas de datos y aplicar transformación común en la lista de marcos de datos resultantes
- 16. El uso de clases abstractas en Matlab (sin propiedades)
- 17. ¿Puedes extender dos clases en una clase?
- 18. RequireJS, dos clases en un archivo
- 19. Dos clases HTTPService diferentes en Flex
- 20. Sass - dos clases en una sola etiqueta
- 21. ¿Cómo combinar dos clases en PHP?
- 22. MATLAB, rellenando el área entre dos conjuntos de datos, líneas en una figura
- 23. área Relleno entre dos componentes conectados en MATLAB
- 24. ¿Cómo obtener variables miembro estáticas en clases MATLAB?
- 25. División interna en scala
- 26. Funcionamiento del intercambio de dos elementos en MATLAB
- 27. pasando dos puntos como argumento de una función en matlab
- 28. División de cadenas en el primer punto
- 29. ¿La mejor manera de organizar clases de MATLAB?
- 30. Superpone dos flujos de cámara web: Matlab
+1 .... bonita! – Jacob
@Amro: ¿soy yo o falta la segunda captura de pantalla? – Shai
@Shai: no solo usted, a veces las imágenes antiguas cargadas en imageshack tienden a desaparecer por alguna razón ... De todos modos, actualicé el ejemplo con imágenes nuevas :) – Amro