es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear un conjunto de datos 3D adecuado para una Distribución Gaussiana.

Estoy intentando crear un conjunto de datos adecuado para una distribución gaussiana. Los valores x e y serán iguales, y en el eje z, estos valores estarán de acuerdo con la distribución gaussiana. Tomando este sitio como recurso para mí: https://towardsdatascience.com/a-python-tutorial-on-generating-and-plotting-a-3d-guassian-distribution-8c6ec6c41d03 He escrito el siguiente código. Pero desafortunadamente, la salida que obtuve no fue como la del enlace que proporcioné. Creo que hay un error con las fórmulas matemáticas. Estaría muy contento si pudieras ayudarme a solucionarlo. Mientras esperaba un gráfico como este Obtuve ese tipo de gráfico.

Gracias de antemano.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

def np_bivariate_normal_pdf(dominio, media, varianza):
    X = np.arange(-dominio+media, dominio+media, varianza)
    Y = np.arange(-dominio+media, dominio+media, varianza)
    X, Y = np.meshgrid(X, Y)
    R = np.sqrt(X**2 + Y**2)
    Z = ((1. / np.sqrt(2 * np.pi)) * np.exp(-.5*R**2))

    return X, Y, Z


def plt_plot_bivariate_normal_pdf(x, y, z):
    fig = plt.figure(figsize=(10, 10))
    ax = fig.gca(projection='3d')
    ax.plot_surface(x, y, z, 
                    cmap=cm.coolwarm,
                    linewidth=0, 
                    antialiased=True)
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_zlabel('z');
    ax.set_xlim(-5, +20)
    ax.set_ylim(-5, +20)
    plt.show()

a = np_bivariate_normal_pdf(0.75, 5, 0.01)
b = np_bivariate_normal_pdf(1.875, 3, 0.025)
c = np_bivariate_normal_pdf(1.5, 7.5, 0.02)
d = np_bivariate_normal_pdf(2.25, 12, 0.03)

plt_plot_bivariate_normal_pdf(*a)
plt_plot_bivariate_normal_pdf(*b)
plt_plot_bivariate_normal_pdf(*c)
plt_plot_bivariate_normal_pdf(*d)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que podría haber un problema con el rango de valores utilizados para crear los conjuntos de datos. Específicamente, es posible que deba ajustarse los valores utilizados para dominio y el tamaño del paso varianza para obtener el resultado deseado.

    En la función np_bivariate_normal_pdf, el parámetro dominio se utiliza para establecer el rango de valores de los ejes X e Y, en relación a la media. Sin embargo, el tamaño de paso para generar estos valores también se establece utilizando el parámetro varianza, lo cual podría no ser apropiado. Dependiendo de la resolución deseada del conjunto de datos, podría ser necesario usar un tamaño de paso más pequeño para lograr una curva gaussiana más suave.

    Una posible modificación podría ser ajustar el parámetro varianza en función del número deseado de puntos de datos dentro del rango. Por ejemplo, si queremos generar 100 puntos de datos entre -5 y +20, podríamos calcular un tamaño de paso de:

    tamaño_rango = 20 - (-5)
    tamaño_paso = tamaño_rango / 100
    

    Luego, podríamos utilizar este tamaño de paso para generar los valores de X e Y:

    X = np.arange(-dominio+media, dominio+media, tamaño_paso)
    Y = np.arange(-dominio+media, dominio+media, tamaño_paso)
    

    Esto debería resultar en un conjunto de datos más muestreado finamente, lo cual podría producir una curva gaussiana más suave.

    Otra posibilidad es que los valores de Z se estén calculando incorrectamente. La fórmula utilizada en el código parece ser una versión simplificada de la distribución gaussiana bivariante. Dependiendo de los parámetros y propiedades deseados de la distribución, podría ser necesario utilizar una fórmula diferente. Ajustar la fórmula podría requerir experimentación y conocimiento de estadística y teoría de probabilidad.

    En general, es difícil diagnosticar el problema exacto sin información adicional sobre las propiedades y parámetros deseados del conjunto de datos. Sin embargo, ajustar el rango y el tamaño del paso de los valores de X e Y, así como experimentar con diferentes fórmulas para Z, podría ser un punto de partida para lograr el resultado deseado.

Comments are closed.