4 votos

Con núcleos de Fisher ' análisis de discriminante lineal de s

Estoy un poco atascado implementar el Kernel Discriminante de Fisher.

$$ J(\mathbf{w}) = \frac{\mathbf{w}^{\text{T}}\mathbf{S}_B^{\phi}\mathbf{w}}{\mathbf{w}^{\text{T}}\mathbf{S}_W^{\phi}\mathbf{w}} $$ $$ J(\mathbf{\alpha}) = \frac{\mathbf{\alpha}^{\text{T}}\mathbf{M}\mathbf{\alpha}}{\mathbf{\alpha}^{\text{T}}\mathbf{N}\mathbf{\alpha}}. $$

Tal y como yo lo entiendo lo que tengo que hacer es calcular el $\alpha$ que depende de la $\mathbf{M}$ $\mathbf{N}$

$$\mathbf{\alpha} = \mathbf{N}^{-1}(\mathbf{M}_2- \mathbf{M}_1).$$

En el caso de $\mathbf{N}$, $\mathbf{N} = \displaystyle \sum_{j=1,2}\mathbf{K}_j(\mathbf{I}-\mathbf{1}_{l_j})\mathbf{K}_j^{\text{T}}$, con la $n^{\text{th}}, m^{\text{th}}$ componente de $\mathbf{K}_j$ define como $k(\mathbf{x}_n,\mathbf{x}_m^j)$ donde $\mathbf{x_n}$ es la totalidad de las observaciones y $\mathbf{x_m^j}$ es la totalidad de las observaciones que pertenecen a la clase $j$

En el caso de $\mathbf{M}_i$, $ (\mathbf{M}_i)_j = \frac{1}{l_i}\sum_{k=1}^{l_i}k(\mathbf{x}_j,\mathbf{x}_k^i).$ where $\mathbf{x_j}$ is all the observations and $\mathbf{x_k^i}$ is all the observations that belong to the class $i$.

Suponiendo que yo entienda que en parte, el gran problema que tengo es que cuando quiero usar el $\alpha$ a asignar una nueva observación en clase.

$$y(\mathbf{x}) = (\mathbf{w}\cdot\phi(\mathbf{x})) = \sum_{i=1}^l\alpha_ik(\mathbf{x}_i,\mathbf{x}).$$

Sin embargo, cuando trato de implementar esta parte, $\alpha$ tiene las dimensiones del total de las observaciones y como $x_i$ es una nueva observación el tamaño de este vector en el espacio previo y realmente no entiendo esta parte.

Hay algo en lo que estoy entendiendo mal? Cómo debo utilizar el $\alpha$ o $\mathbf{x}$?

¿Cuál es el verdadero significado de la $\mathbf{x}$ porque creo que tiene a veces que tiene diferentes significados?

3voto

user60642 Puntos 6

No importa que las dimensiones de $\alpha$ $x$ son diferentes, porque ellos nunca entran en contacto con directamente. Su nuevo $x$ sólo entra en la ecuación de $y(x)$ en los términos de $k(x_i, x)$ (aquí a la izquierda argumento es un punto en el conjunto de datos de entrenamiento, y el argumento de la derecha es un punto en el que está tratando de clasificar). Desde la izquierda argumento va sobre todos los puntos en el conjunto de datos de entrenamiento, hay un plazo $k(x_i, x)$ para cada observación, igual que hay un $\alpha_i$ para cada observación (como se señaló). He aquí cómo calcular esta en pseudocódigo:

def classify(kernel, train_data, alpha, new_x):
    y = 0
    for i in 1:length(train_data)
        y += alpha[i] + kernel(train_data[i], new_x)
    return y

Como se puede ver, no hay dimensionalidad desajustes--alpha y train_data tienen la misma longitud, como hacer new_x y train_data[i].

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