0 votos

Cómo trazar un límite de decisión para la regresión logística binaria en matlab

Permítanme decir lo siguiente es de una pregunta de deberes, pero la cuestión no es trazar el límite de decisión, sólo entrenar el modelo y hacer algunas predicciones. Ya lo he hecho y mis predicciones parece para ser correcta.

Pero me gustaría verificar mis resultados trazando el límite de decisión. Esto no forma parte de los deberes.

La cuestión era tomar un simple conjunto de datos $$ X = \begin{bmatrix} -1&0&2&0&1&2\\ -1&1&0&-2&0&-1 \end{bmatrix} $$

$$ y = \begin{bmatrix} 1&1&1&-1&-1&-1 \end{bmatrix} $$

Teniendo en cuenta esto, convierte la entrada en funciones no lineales: $$ z = \begin{bmatrix} x_1\\x_2\\x_1^2\\x_1x_2\\x_2^2 \end{bmatrix} $$

A continuación, se entrena el modelo de regresión logística binaria para determinar los parámetros $\hat{w} = \begin{bmatrix} w\\b \end{bmatrix}$ utilizando $\hat{z} = \begin{bmatrix} z\\1 \end{bmatrix}$

Supongamos ahora que el modelo está entrenado y que tengo $\hat{w}^*$ y me gustaría trazar mi límite de decisión $\hat{w}^{*T}\hat{z} = 0$

Actualmente para dispersar la matriz tengo

scatter(X(1,:), X(2,:))
axis([-1.5 2.5 -2.5 1.5])
hold on
% what do I do to plot the decision boundary?

No estoy seguro de a dónde ir desde aquí. He intentado utilizar funciones simbólicas, pero fplot no le gusta usar 2 variables.

0voto

Eldar Sultanow Puntos 21

Podría trazarlo utilizando el siguiente código:

syms X Y y

X = [-1 -1; 0 1; 2 0; 0 -2; 1 0; 2 -1]
Y = [1 1 1 -1 -1 -1]
y = categorical(Y)
B = mnrfit(X,y)

scatter(X(:,1),X(:,2))
hold on
plot(X(:,1),-((B(1)*1+B(2)*X(:,1))/B(3)));
axis([-1.5 2.5 -2.5 1.5])
hold off

Tenga en cuenta que tuve que cambiar el $y$ a valores categóricos (internamente son enteros positivos), ya que mnrfit requiere esto. Pero no tiene ninguna influencia en nuestro problema de decisión.

El resultado es:

enter image description here

0voto

Aserian Puntos 113

Pude trazar la curva usando ezplot:

X = [-1 0 2 0 1 2; -1 1 0 -2 0 -1];
P = length(X);
z = zeros(6, P);

for i = 1:P
    z(:,i) = z_calc(X(:,i));
end

syms x1 x2
z_fn = [x1; x2; x1^2; x1*x2; x2^2; 1];

% xs was previously computed by the logistic regression model
eqn = (xs'*z_fn == 0);

ezplot(eqn)
hold on
scatter(X(1,1:3), X(2,1:3), 'red')
axis([-1.5 2.5 -2.5 1.5])
hold on
scatter(X(1,4:6), X(2,4:6), 'blue')
title("Decision Boundary")
hold off

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X