.class { align:center; }
Scikit-Learn

Scikit aprende el modelo oculto de Markov

En este tutorial de Python, aprenderemos Cómo crear un modelo scikit learn Markov en pitón y también cubriremos estos ejemplos relacionados con el modelo de Markov. Y, cubriremos estos temas.

¿Qué es el modelo de Markov de scikit learn?

En esta sección aprenderemos sobre la Scikit aprende el modelo de Markov en python y cómo funciona.

Un modelo de Markov se define como un proceso estocástico, mientras que la probabilidad considerada del estado futuro depende del estado actual del proceso.

Ejemplo:

Considere que quiere hacer un modelo de probabilidad futura de que nuestro gato esté en los tres estados dado su estado actual.

Consideramos al gato que hemos sido muy vagos. Definimos su estado durmiendo comiendo, Pooping. Establecemos las probabilidades iniciales en 45%, 35% y 20% resp.

Código:

import numpy as np
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plot
%matplotlib inline

states = ['sleeping', 'eating', 'pooping']
pi = [0.45, 0.35, 0.2]
state_space = pd.Series(pi, index=states, name="states")
print(state_space)
print(state_space.sum())

Después de ejecutar el código anterior, obtenemos el siguiente resultado en el que podemos ver que la probabilidad del supuesto estado del gato.

scikit aprende la predicción del modelo de Markov

El siguiente paso es definir la probabilidad simplemente en el mismo estado o moviéndose a un estado diferente dado el estado actual.

q_df = pd.DataFrame(columns=states, index=states)
q_df.loc[states[0]] = [0.4, 0.2, 0.4]
q_df.loc[states[1]] = [0.40, 0.40, 0.2]
q_df.loc[states[2]] = [0.40, 0.20, .4]

print(q_df)

q_f = q_df.values
print('\n', q_f, q_f.shape, '\n')
print(q_df.sum(axis=1))
scikit aprende el proceso de transición del modelo markov

scikit aprende el proceso de transición del modelo de Markov

Después de realizar el proceso anterior, tenemos probabilidades iniciales y de transición y ahora estamos creando un diagrama de Markov utilizando el paquete Networkx.

from pprint import pprint 


def _get_markov_edges(Q):
    edge = {}
    for column in Q.columns:
        for index in Q.index:
            edge[(index,column)] = Q.loc[index,column]
    return edge

edge_wt = _get_markov_edges(q_df)
pprint(edge_wt)

Ahora podemos crear un gráfico de modelo de Markov de scikit learn.

  • Graph.add_nodes_from(estados) se utiliza para crear nodos correspondientes a los estados.
  • Graph.add_edge(tmp_origin, tmp_destination, peso=v, etiqueta=v) los bordes representan las probabilidades de transición.
Graph = nx.MultiDiGraph()


Graph.add_nodes_from(states)
print(f'Nodes:\n{Graph.nodes()}\n')


for k, v in edge_wt.items():
    tmp_origin, tmp_destination = k[0], k[1]
    Graph.add_edge(tmp_origin, tmp_destination, weight=v, label=v)
print(f'Edges:')
pprint(Graph.edges(data=True))    

position = nx.drawing.nx_pydot.graphviz_layout(Graph, prog='dot')
nx.draw_networkx(Graph, position)


edge_labels = {(n1,n2):d['label'] for n1,n2,d in Graph.edges(data=True)}
nx.draw_networkx_edge_labels(Graph , position, edge_labels=edge_labels)
nx.drawing.nx_pydot.write_dot(Graph, 'pet_dog_markov.dot')
Scikit aprende el gráfico del modelo markov

Scikit aprende el gráfico del modelo de Markov

Lo que hizo que Scikit aprendiera el modelo oculto de Markov

En esta sección aprenderemos sobre la scikit aprender modelo oculto y quién ocultó el modelo de Markov.

Consideremos que nuestro gato está actuando de manera extraña y nos encontramos con que por qué actúa así nuestro comportamiento de gato se debe a una enfermedad o simplemente actúa así.

Código:

En este creamos un espacio en el que podemos ver que nuestro gato está sano o enfermo.

hidden_state = ['healthy', 'sick']
pi = [0.55, 0.45]
state_space = pd.Series(pi, index=hidden_state, name="states")
print(state_space)
print('\n', state_space.sum())
scikit aprender markov espacio de estado oculto

scikit aprende el espacio de estado oculto de Markov

En el siguiente paso, estamos creando una matriz de transición para el estado oculto.

a1_df = pd.DataFrame(columns=hidden_state, index=hidden_state)
a1_df.loc[hidden_state[0]] = [0.7, 0.3]
a1_df.loc[hidden_state[1]] = [0.4, 0.6]

print(a1_df)

a1 = a1_df.values
print('\n', a1, a1.shape, '\n')
print(a1_df.sum(axis=1))
scikit aprende el estado oculto de la matriz de transición

scikit aprende el estado oculto de la matriz de transición

Aquí, en este paso, creamos una matriz de emisión y observación. La matriz que estamos creando es del tamaño de axb. a es el número de estados ocultos y b es el número de estados observables.

observable_state = states

b1_df = pd.DataFrame(columns=observable_state, index=hidden_state)
b1_df.loc[hidden_state[0]] = [0.3, 0.5, 0.2]
b1_df.loc[hidden_state[1]] = [0.3, 0.3, 0.4]

print(b1_df)

b1 = b1_df.values
print('\n', b1, b1.shape, '\n')
print(b1_df.sum(axis=1))
scikit aprender emmision y matriz observable

scikit aprender matriz de emisión y observable

En este paso, estamos creando los bordes del gráfico y el objeto gráfico a partir del cual podemos crear un gráfico completo.

hide_edges_wt = _get_markov_edges(a1_df)
pprint(hide_edges_wt)

emit_edges_wt = _get_markov_edges(b1_df)
pprint(emit_edges_wt)

Aquí podemos trazar el gráfico completo del modelo oculto de Markov.

G = nx.MultiDiGraph()


G.add_nodes_from(hidden_state)
print(f'Nodes:\n{G.nodes()}\n')

for k, v in hide_edges_wt.items():
    tmp_origin, tmp_destination = k[0], k[1]
    G.add_edge(tmp_origin, tmp_destination, weight=v, label=v)


for k, v in emit_edges_wt.items():
    tmp_origin, tmp_destination = k[0], k[1]
    G.add_edge(tmp_origin, tmp_destination, weight=v, label=v)
    
print(f'Edges:')
pprint(G.edges(data=True))    

pos = nx.drawing.nx_pydot.graphviz_layout(G, prog='neato')
nx.draw_networkx(G, pos)
scikit aprender markov modelo oculto

scikit aprende el modelo oculto de Markov

Scikit aprende el ejemplo del modelo oculto de Markov

En esta sección, aprenderemos sobre el ejemplo de modelo oculto de Markov de scikit learn en python.

El modelo oculto de Markov de scikit learn es un proceso, mientras que la probabilidad futura del futuro depende del estado actual.

Código:

En el siguiente código, importaremos algunas bibliotecas a partir de las cuales estamos creando un modelo oculto de Markov.

state_space = pd.Series(pi, index=states, name=’states’) se utiliza para crear un espacio de estado y una probabilidad de espacio de estado inicial.

borde[(index,column)] = Q.loc[index,column] se utiliza para crear una función que mapea el marco de datos de probabilidad de transición.

Graph.add_nodes_from(estados) se utiliza para agregar el nodo correspondiente a los datos cuadro.

Graph.add_edge(tmp_origin, tmp_destination, peso=v, etiqueta=v) edge se utiliza para representar la propiedad de transición.

import numpy as np
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plot
%matplotlib inline

states = ['sleeping', 'eating', 'pooping']
pi = [0.45, 0.35, 0.2]
state_space = pd.Series(pi, index=states, name="states")
print(state_space)
print(state_space.sum())
q_df = pd.DataFrame(columns=states, index=states)
q_df.loc[states[0]] = [0.4, 0.2, 0.4]
q_df.loc[states[1]] = [0.40, 0.40, 0.2]
q_df.loc[states[2]] = [0.40, 0.20, .4]

print(q_df)

q_f = q_df.values
print('\n', q_f, q_f.shape, '\n')
print(q_df.sum(axis=1))
from pprint import pprint 

def _get_markov_edges(Q):
    edge = {}
    for column in Q.columns:
        for index in Q.index:
            edge[(index,column)] = Q.loc[index,column]
    return edge

edge_wt = _get_markov_edges(q_df)
pprint(edge_wt)
Graph = nx.MultiDiGraph()


Graph.add_nodes_from(states)
print(f'Nodes:\n{Graph.nodes()}\n')


for k, v in edge_wt.items():
    tmp_origin, tmp_destination = k[0], k[1]
    Graph.add_edge(tmp_origin, tmp_destination, weight=v, label=v)
print(f'Edges:')
pprint(Graph.edges(data=True))    

position = nx.drawing.nx_pydot.graphviz_layout(Graph, prog='dot')
nx.draw_networkx(Graph, position)


edge_labels = {(n1,n2):d['label'] for n1,n2,d in Graph.edges(data=True)}
nx.draw_networkx_edge_labels(Graph , position, edge_labels=edge_labels)
nx.drawing.nx_pydot.write_dot(Graph, 'pet_dog_markov.dot')

Producción:

Después de ejecutar el código anterior, obtenemos el siguiente resultado en el que podemos ver que el modelo de Markov se representa en la pantalla.

scikit aprender modelo oculto de markov

Ryley Crooks

En los Estados Unidos, Python es uno de los lenguajes más utilizados. He usado Python durante mucho tiempo y he trabajado con una variedad de bibliotecas, desde Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc. Comparto contigo mi experiencia de trabajo de muchos años en el campo de la IA.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos
Responsable Birdie Bashirian PhD +info...
Finalidad Gestionar y moderar tus comentarios. +info...
Legitimación Consentimiento del interesado. +info...
Destinatarios No se cederán datos a terceros, salvo obligación legal +info...
Derechos Acceder, rectificar y cancelar los datos, así como otros derechos. +info...
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.

Botón volver arriba