Sin palabras, Una clase perfecta!!!
Incertidumbre y probabilidad
¿Qué es la probabilidad?
Probabilidad en machine learning
Fundamentos de probabilidad
Tipos de probabilidad
Ejemplos de cálculo de probabilidad
Ejemplos avanzados con probabilidad
Distribuciones de probabilidad
¿Qué es una distribución?
Distribuciones discretas
Usando la distribución binomial
Distribuciones continuas
¿Cómo estimar una distribución?
MLE (Maximum Likelihood Estimation)
¿Qué es MLE?
MLE en machine learning
Regresión logística
Aplicación de regresión logística
Inferencia bayesiana
Teorema de Bayes
Bayes en machine learning
Retos finales
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Francisco Camacho
Aportes 88
Preguntas 12
Sin palabras, Una clase perfecta!!!
En la distribución Normal (Gaussiana) a partir de los datos del Excel debería ser
arr = df['Normally Distributed Housefly Wing Lengths'].values[3:]
En vez de
arr = df['Normally Distributed Housefly Wing Lengths'].values[4:]
Ya que Python inicia el conteo desde 0 y no desde 1, por lo que se está perdiendo el primer dato.
Este curso me está exigiendo bastante, pero a la vez estoy muy feliz con ello, porque en esa escalada de exigencia ̷y̷ ̷s̷u̷f̷r̷i̷m̷i̷e̷n̷t̷o̷ el profesor explica muy bien, y dándole ̷u̷n̷o̷s̷ ̷c̷a̷b̷e̷z̷a̷z̷o̷s̷ ̷a̷l̷ ̷t̷e̷c̷l̷a̷d̷o̷ una vuelta, se logra entender.
Muy bien hasta aquí (~ ̄▽ ̄)~
Y pensar que esto es solo el inicio de todo el mundo de distribuciones existentes:
Vengo superfrustrado del curso de Análisis de datos con python porque se manejan muchos términos que se dan por hecho que se conocen, pero hasta el momento no había curso en la plataforma que diera esas bases. El anterior curso de probabilidad y estadística tenía cosas muy básicas y nada aplicado en código. Espero que con este curso cambie un poco eso. Hasta el momento va excelente!
Pueden cargar el archivo con los datos a Google Colab sin la necesidad de descargar algún archivo de manera local. Se usa la url donde estan los datos. y el método pd.read_csv() Quedaria de la siguiente forma
url = 'https://seattlecentral.edu/qelp/sets/057/s057.txt'
df = pd.read_csv(url)
arr = df
values, dist = np.unique(arr, return_counts=True)
print(values)
plt.bar(values, dist)
A continuación adjunto un resumen de la clase:
En la distribución Normal (Gaussiana) a partir de los datos del Excel debería ser
arr = df['Normally Distributed Housefly Wing Lengths'].values[3:]
En vez de
arr = df['Normally Distributed Housefly Wing Lengths'].values[4:]
Ya que Python inicia el conteo desde 0 y no desde 1, por lo que se está perdiendo el primer dato.
Minuto 12:13, es a partir del elemento 3!
Los datos numéricos empiezan con 36, entonces la instrucción sería
df['Normally Distributed Housefly Wing Lengths'].values[3:]
#EXERCISE TO PRACTICE CONTINUOUS DISTRIBUTION
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
#Transforming continuous distribution formula, into code (density dist)
def gaussian(x,mu,sigma):
return 1/(sigma*np.sqrt(2*np.pi))*np.exp(-0.5*pow((x-mu)/sigma,2))
#Using scipy Acumulated distribution
dist= norm(0,1)
x_1=np.arange(-4,4,0.1)
y_1=[dist.cdf(value) for value in x_1]
if __name__ == "__main__":
x= np.arange(-4,4,0.1)
y= gaussian(x,0.0,1.0)
plt.plot(x,y)
plt.savefig('barras_cont.png')
plt.show
plt.plot(x_1,y_1)
plt.savefig('barras_cont_2.png')
plt.show
#EXERCISE TO PRACTICE CONTINUOUS DISTRIBUTION - WINGS SIZE OF FLIES
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
df= pd.read_excel('s057.xls')
arr= df['Normally Distributed Housefly Wing Lengths'].values[3:]
values,dist= np.unique(arr,return_counts=True)
if __name__ == "__main__":
plt.bar(values,dist)
plt.savefig('flies.png')
plt.show
El término 1/σ√2Pi sirve para normalizar la distribución. Esto quiere decir que las probabilidad de que el valor esté entre menos infinito y más infinito tiene que ser igual a 1 (al 100%).
Esto se traduce en que la integral de P(X), es decir el área bajo la curva, es igual a 1. De ahí que el valor máximo de la probabilidad acumulada también sea 1.
Buena clase, hasta esa explicación fue muy adecuada “pandas es la version de excel para python”… jajaj 💚
Para poder ejecutar correctamente el apartado “Distribución normal (gausiana) a partir de los datos” he necesitado añadir la siguiente linea al comienzo del notebook.
!pip install xlrd==1.2.0
Será que algún día lograré saber tanto como el profe (?)
Who knows…
Tambien pueden usar el excel directamente desde la url.
df = pd.read_excel('https://seattlecentral.edu/qelp/sets/057/s057.xls')
μ : media de la distribución(también conocida como promedio) indica en que punto va a estar la punta de la campana(respecto al eje X)
σ: desviación estándar de la distribución: Indica que tan alejados o dispersos están otros datos respecto a μ, por lo cual entre mayor sea σ, va a ser mas ancha la campana y entre menor será, la campana será mas delgada
También se puede utilizar para dividir la campanas en segmentos(como si fueran percentiles) para analizar segmentos especiales de la campana
Una imagen aclara mucho más
como que pdf no es formato de documento portátil XD
Si corren en Colab y la celda para leer el archivo de excel muestra el error:
Pandas requires version ‘1.2.0’ or newer of ‘xlrd’ (version ‘1.1.0’ currently installed)
Corran el commando:
!pip install xlrd==1.2.0 --upgrade
Reinicien el runtime y corran la celda 1 donde importan las librerías.
Para cargar un archivo , les recomiendo hacer el drive.mount y con %cd dan la ubicación del archivo, en este caso yo tengo el archivo guardado en mi drive en la ruta : ‘/content/drive/MyDrive/Colab Notebooks/Curso Platzi estadística probabilidad/’.
Una vez estén en la ubicación correcta los pasos para leer el dataframe son los mismos de siempre:
df = pd.read_excel(‘s057.xls’)
Es indispensable actualizar pandas y xlrd:
!pip install --upgrade pandas
!pip install --upgrade xlrd
De esta manera solo tiene que guardar el archivo y ya siempre lo van a poder leer desde pandas; lo que se debe hacer siempre es el mount, pero realmente es muy sencillo y no toma casi tiempo.
Espero les sirva.
Por si alguien quiere tener la fórmula mejor escrita en el colab:
$$P(X) = \frac{1}{\sigma \sqrt{2 \pi}} \space e ^{-\frac{1}{2}\left(\frac{X-\mu}{\sigma} \right)^2 }$$
Para automatizar la subida del archivo de excel al disco de colab sin tener q hacerlo manualmente cada vez se puede utilizar el siguiente comando :
!curl -O -J “https://seattlecentral.edu/qelp/sets/057/s057.xls”
Pensaba que este curso, me serviria de apoyo para el curso de estadistica computacional en python, pero creo que es al reves
Los enlaces del Colab se están bloqueando, ¿es posible hacer un github para evitarlo?
(
(
Estaba usando Opera para este curso, les recomiendo usar Chrome ya que en Opera no podía subir el archivo de Excel a google colab. Para que lo tengan en cuenta.
Buenas! Comparto mi versión del código del profe con algunas modificaciones para poder escribirlo en VS Code y hacerlo correr de manera local
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
def main():
#In order to import pandas you must install the dependencies via pip.
#You may also need to install xlrd to use the read_excel fuction from pandas
df = pd.read_excel('/aqui va la ruta a tu archivo local/s057.xls')
arr = df['Normally Distributed Housefly Wing Lengths'].values[3:]
#Getting the unique values and the count of each unique value
values, dfDist = np.unique(arr, return_counts=True)
dfDist = dfDist/len(arr) #Getting the percentage of each unique possible values
mu = arr.mean()
sigma = arr.std()
theoDist = norm(mu, sigma)
x = np.arange(30,60,0.1) #Building an arrange that englobes all the possible values in the df
y = [theoDist.pdf(value) for value in x] #Applying the normal distribution to all x values in order to get y values
#that complies the Gaussian function
fig, ax = plt.subplots()
ax.bar(values, dfDist)
ax.plot(x, y)
plt.show()
if __name__=='__main__':
main()
Antes en 3 o 4 horas de estudio alcanzaba a ver varias lecciones, pero en este curso solo alcanzo una por día de estudio. Hay que repasar y estudiar mucho todos los conceptos y aplicaciones. Esta clase me gusto mucho.
En vez de
arr = df[‘Normally Distributed Housefly Wing Lengths’].values[4:]
Es
df.iloc[3:,0].values
Elimina primeras 3, toma primera columna, no tiene que escribir mucho, es un error [4] porque no toma valor 36
Les comparto esta herramienta online que permite entender las distribuciones de probabilidad continuas y discretas, con sus definiciones y permite jugar con ella. También te permite encontrar la mejor distribución de probabilidad para un conjunto de datos phitter.io
Si no pueden cargar el archivo excel por la version de pandas xlrd incompatible:
ImportError: Pandas requires version '1.2.0' or newer of 'xlrd' (version '1.1.0' currently installed).
Corran esto:
!pip install xlrd==2.0.1
por si google colab le da el siguiente error como a mi: pandas requires version ‘1.2.0’ or newer of ‘xlrd’ (version ‘1.1.0’ currently installed). Se soluciona agregando la siguiente instrucción en un bloque de código aparte, para realizar la actualización:
pip install --upgrade xlrd
Distribuciones continuas
La distribución continua má usual es la distribución normal o Gaussiana, que es la distribución más usual en la realidad, o en todo caso podemos acomodar dicha distribución a una normal (Teorema del Límite central) tal como vimos con la distribución binomial.
Etá definida por:
Nota:
El cálculo con esta función (integrales) no es sencillo por lo que por lo general se usan tablas o programas (como este caso) para calcularlas
Otra forma de la función de distribución acumulada de probabilidad (Cumulative distribution function)
mu = 0.0 # promedio o media
sigma = 1.0 #desviación estándar
x = np.arange(-4,4,0.1)
y = norm.cdf(x,mu, sigma)
plt.plot(x, y);
Una manera bastante sencilla de adecuar el data frame en este caso, es:
a veces cuando hay demasiada información en una clase puede resultar chocante, pero en esta la verdad está todo preciso.
Cada vez se pone más interesante la clase. La carrera de Data Science se pone muy interesante.
Desde ahora quiero ver todo lo que Francisco Camacho enseña. Qué increíble clase.
He generado una distribución gaussiana pseudo-continua usando 100 tiradas de moneda repitiendo el proceso 10.000.000 de veces
Los invito a usar el código variando p(se tarda un rato en cargar en google collab)
p = 0.5
n = 100
k = pow(10,7)
arr = []
for i in range(k):
arr.append(binomial(n,p))
s = np.unique(arr,return_counts=True)
x = s[0]
y = s[1]/k
plt.plot(x,y)
plt.show()
Comunidad Platzi
Como diferencia cuando debo utilizar .pdf y .cdf
Saludos
Muy buena clase
Eres un excelente profesor, todo muy claro y bien explicado!!
Buena clase, muchas gracias profe!
Me sorprendio el desarrollo y la forma de las distribuciones continuas. A tenerlas en cuenta al momento de resolverlas.
Encontré un video en inglés que explica muy bien porque la distribución normal es una función de ese tipo y es muy buena, dura 24 minutos:
oigan recuerdo que en mis clases de probabilidad de una variable continua P(X=a) = 0 con a elemento de R, osea : no se pueden calcular las probabilidades de puntos en concreto, seria igual a cero.
por alguna razón si usamos math y no numpy para algunos cálculos de la función, ya no es compatible con mathpltolib y no hace el gráfico, genera un error
la parte matemática es lo fácil, el código es lo dificil y no lo explica paso a paso
Realmente arr arranca desde 3 con el valor 36
arr = df['Normally Distributed Housefly Wing Lengths'].values[3:]
No hay nada mas anormal que ver una distribución normal
![](import numpy as np
import matplotlib.pyplot as plt
def gaussian(x, mu, sigma):
if sigma == 0:
return np.nan
else:
return 1 / (sigma * np.sqrt(2 * np.pi)) * np.exp(-0.5 * pow((x - mu) / sigma, 2))
x = np.arange(-4, 4.1, 0.1)
y = gaussian(x, 1.0, 1.0)
plt.plot(x, y)
plt.show())
La distribución exponencial
f(x) = λ * e^(-λx)
donde λ es un parámetro positivo conocido como tasa de fallo o tasa de ocurrencia, y x es la variable aleatoria que representa el tiempo entre eventos.
La distribución exponencial tiene una forma de campana de cola hacia la derecha, lo cual significa que tiene una alta probabilidad de ocurrencia en valores pequeños de x y una probabilidad cada vez menor a medida que x se vuelve más grande. Su media es 1/λ y su varianza es también 1/λ^2.
La distribución exponencial se utiliza en una variedad de aplicaciones, como en la modelización de tiempos entre fallos en sistemas mecánicos, el tiempo entre llamadas telefónicas en una central telefónica, el tiempo entre llegadas de clientes a una tienda, entre otros. También se utiliza en
para los que tengan error al leer el excel desde pandas
!pip install xlrd==2.0.1
me encanta que deje el berraco colab, ome esos profesores que no lo dejan si que hacen que uno este pendiente si escribio el codigo como es en vez de estar pendiente de entender el tema.
Distribucion Normal (Gaussiana)
Esta constituida por una exponencial donde el exponente esta elevado al cuadrado
Su forma grafica es una campana llamada Campana de Gauss
Otras Distribuciones
para aquelllos q en el ultimo les sale el error
arr = np.int64(arr)
en wsl o linux requiere instalar dependencias de excel
conda or pip install xlrd
Estimando una distribución Normal
Estas clases cada vez se ponen más interesantes 😎
Lo único es que debió poner un 3 en vez de un 4, se comió el 36. Del resto todo bien.
Habiamos usado cdf y pmf, pero el pdf no entendi a que se refiere.
adicional, segun entiendo en norm(0,1), el 0 se refiere a que el centro de la campana esta en cero, y el 1 es el ancho de esta, pero de donde sacamos esos valores?
Un dato curioso, quise colocar mas líneas y una leyendo y revisando por internet encontré esta página.
Quizas le sea de ayuda.
En la fórmula de la distribución normal exp representa al número irracional e que tiene un valor aproximado de 2.71828
Clase para detenerse. Tomarse una pausa, y volver a repasarlo hasta poder interiorizar la aplicación. Magistral explicación.
Hola.
Les comparto el código de la práctica de Gauss con el archivo de excel realizado desde mi entorno local.
Las librerias que tiene mi entorno son las siguientes:
asttokens==2.0.5
colorama==0.4.4
cycler==0.10.0
executing==0.6.0
icecream==2.1.0
kiwisolver==1.3.1
matplotlib==3.4.2
numpy==1.20.3
pandas==1.2.4
Pillow==8.2.0
Pygments==2.9.0
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2021.1
scipy==1.6.3
six==1.16.0
xlrd==2.0.1
Y el código, aca en mi GitHub.
Sigo recomendando mucho el uso de icecream para ir revisando el valor que toman nuestras variables, como lo hemos trabajado en collab.
Saludos!
Como python empieza a contar de cero “0” las listas, filas o columnas, las filas a leer en el archivo de excel s057.xls empiezan en 3
arr = df['Normally Distributed Housefly Wing Lengths'].values[3:]
Investigué algunas de las otras distribuciones mencionadas, acá les dejo la información si tienen curiosidad también:
Exponencial: se utiliza comúnmente para modelar situaciones en las que se quiere estudiar el_ tiempo de espera entre eventos sucesivos_.
Pareto: se utiliza para modelar fenómenos con una distribución de cola larga, donde_ una pequeña proporción de eventos extremos tiene un impacto significativo_. Es útil para analizar y comprender la concentración de riqueza, ingresos, tamaños de ciudades y otros fenómenos que exhiben un comportamiento de desigualdad extrema.
Gamma: se utiliza comúnmente para modelar eventos que exhiben comportamiento de espera o duración.
Beta: se utiliza para modelar variables aleatorias que representan proporciones o probabilidades. Es particularmente útil cuando se trabaja con datos acotados entre 0 y 1 y se necesita capturar la incertidumbre en la estimación de proporciones o tasas de éxito.
Laplace: utilizada para modelar variables aleatorias con colas pesadas en los extremos y una concentración de probabilidades alrededor de su media. Se aplica en diversas áreas, como el modelado de ruido, el análisis financiero y la detección de outliers.
Distribución gaussiana con SciPy
Es fantástico ver los conceptos de probabilidad en código, pero también sientes que llegaste un poco tarde XD
Buena clase. Voy a aprender un poco de Numpy para comprender mejor las funciones y sus estructuras de datos 😃
tuve problemas para descargar el archivo desde chrome asi que abri la pag desde FIreFox y si me dejo descargar sin problemas… por si les pasa lo mismo
alguien mas tuvo problemas para descargar el arcivo de excel? es que el enlace parece estar roto
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
def gaussian(x, mu, sigma):
return 1/(sigma*np.sqrt(2*np.pi))*np.exp(-0.5*pow((x-mu)/sigma,2))
if __name__=='__main__':
x = np.arange(-4, 4, 0.1)
y = gaussian(x, 0.0, 1.0)
#plt.plot(x,y)
#plt.show()
#distribucion normal gaussiana con la libreria scipy
dist=norm(0, 1)
x = np.arange(-4, 4, 0.1)
y = [dist.pdf(value) for value in x] # pdf funcion de densidad de probabilidad
#plt.plot(x,y)
#plt.show()
#distribucion normal gaussiana con la libreria scipy
dist=norm(0, 1)
x = np.arange(-4, 4, 0.1)
y = [dist.cdf(value) for value in x] # cdf densidad de probabilidad acumulada
#plt.plot(x,y)
#plt.show()
#distribucion de datos
df = pd.read_excel("s057.xls", sheet_name="s057")
datos = df['Normally Distributed Housefly Wing Lengths'].values[4:104]
values, dist = np.unique(datos, return_counts=True)
plt.bar(values,dist)
plt.show()
#estimacion de distribucion
mu = datos.mean()
sigma = datos.std()
x = np.arange(30, 60, 0.1)
dist = norm(mu, sigma)
y = [dist.pdf(value) for value in x ]
plt.plot(x,y)
values,dist = np.unique(datos, return_counts=True)
plt.bar(values, dist/len(datos))
plt.show()
Me parece que colab brinda varias concesiones con respecto a la sintaxis del código, usando el mismo código de la clase salen algunos errores, bueno este código esta corregido.
Cada ve mas interesante todo el procesamiento de datos.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
def gaussian(x, mu, sigma):
return 1/(sigma*np.sqrt(2*np.pi))*np.exp(-0.5*pow((x-mu)/sigma,2))
if __name__=='__main__':
x = np.arange(-4, 4, 0.1)
y = gaussian(x, 0.0, 1.0)
plt.plot(x,y)
plt.show()
import numpy as np
from numpy.random import binomial
from scipy.stats import binom
from math import factorial
import matplotlib.pyplot as plt
# simulación con 100 lanzamientos de moneda equilibrada
# (ejecuta esta celda varias veces para observar la variación en los resultados)
p=0.5
n=3
binomial(n, p)
# Vamos a hacer un experimento generando una muestra de conjuntos de lanzamientos de a 3 monedas
arr = []
for _ in range(100):
arr.append(binomial(n, p))
def plot_hist(num_trials):
values = [0,1,2,3]
arr = []
for _ in range(num_trials):
arr.append(binomial(3, 0.5))
distribucion_simulada = np.unique(arr, return_counts=True)[1]/len(arr)
distribucion_teorica = [binom(3, 0.5).pmf(k) for k in values]
plt.bar(values, distribucion_teorica, label = 'teoría', color = 'red')
plt.bar(values, distribucion_simulada, label = 'simulación', alpha = 0.5, color = 'blue')
plt.title('simulación con {} experimentos'.format(num_trials))
plt.show()
plot_hist(20)
plot_hist(200)
plot_hist(20000)
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?