Teoria della probabilità, Intelligenza Artificiale e Python.

MATEMATICA

Lo studio dell’intelligenza artificiale non può prescindere dalla conoscenza dallo studio della probabilità. Se si tiene in considerazione, infatti che tutti i nostri pensieri, ragionamenti e decisioni si basano su  condizioni di incertezza e che le nostre conclusioni spesso sono frutto di un’analisi della migliore probabilità,  si comprende quanto sia importante comprendere i meccanismi che si nascondono dietro  questa affascinante area della matematica. In questa serie di articoli non mi soffermerò a  discutere se in ambito IA un approccio statistico/ probabilistico sia migliore rispetto ad altri ma ritengo utile riprendere la teoria della probabilità quale utile strumento matematico per modellare eventi incerti. Detto ciò passiamo subito alle definizioni formali ed alla teoria della probabilità.

Che cosa si intende per probabilità?

In prima istanza dobbiamo definire il contesto in cui si può parlare di probabilità, ovvero il metodo con cui introdurre il calcolo probabilistico. In tal senso ha senso parlare di probabilità ogni qualvolta si può condurre una “procedura o esperimento” che produrrà un risultato. Ad esempio il classico lancio dei dadi spiega bene il concetto di esecuzione di una procedura e di risultato e dunque di evento probabilistico. L’evento è il risultato di una procedura, ad esempio ottenere il 3 al lancio di un dado.   Si definisce evento semplice quello prodotto da una procedura non scomponibile in ulteriori procedure. Ad esempio se avessi due dadi potrei scomporre il lancio dei due dadi in due procedure in tal caso l’evento risultante dal lancio di due dadi potrà essere scomposto in due eventi semplici. A questo punto possiamo introdurre il concetto di spazio  campione come l’insieme di tutti i possibili eventi semplici di una procedura.

Che cosa è dunque la probabilità?

La probabilità che un evento  si verifichi, rappresenta la frequenza con cui l’evento si verifica, ovvero  posto un evento A la probabilità che esso si verifichi è uguale:

P(A)=\frac{numero\space\ di\space\ modi\space\ con\space\ cui\space\ l'evento\space\ si\space\ verifica}{dimensione\space\ dello\space\ spazio\space\ campione }

Riprendo l’esempio del dado potremmo dire che la probabilità, ad esempio,  che si verifichi l’evento di “ottenere 2”, in formule P(2) è uguale ad 1/6 perché il numero di modi per ottenere il risultato 2 lanciando il dado è sempre  1 deve mentre il numero dei possibili risultati dello spazio campione è 6.

Se P(A)=1 significa che A è un evento certo. Ad esempio lanciando una moneta  la probabilità di ottenere Testa o Croce è 1 perché non sono previste altre possibilità. A meno che la moneta non decida di cadere in piedi ma questo è un caso che non prenderemo in considerazione come evento possibile.

Cercare di studiare la probabilità facendo lo studio  dell’evento per calcolare il numero dei possibili modi con cui l’evento potrebbe verificarsi  non è sempre un compito facile, per cui questo motivo  si preferisce usare per il calcolo della probabilità un approccio a frequenza e più sperimentale.

Cerchiamo di capire meglio questo concetto partendo dalla formalizzazione della probabilità di un evento A -> P(A) .

P(A)=\frac{numero \space\ di \space\ volte \space\ che \space\ si \space\ e' \space\ verificato \space\ A}{ numero \space\ di \space\ volte \space\ che \space\ la \space\ procedura \space\ e' \space\ stata\space\ ripetuta}

Con l’approccio sperimentale si contano il numero di volte in cui l’evento A si è verificato e si divide per il numero di volte che si è tentato in generale la procedura o esperimento. nel caso del lancio di un dado supponiamo di lanciare il dado 60 volte e di aver ottenuto 8 volte il risultato 2. in tal caso la P(2)=\frac{8}{60} \sim \frac{1}{6}

La divisione ci restituisce un’approssimazione della probabilità reale, ovvero della frequenza relativa con cui si verifica l’evento, definita come il rapporto tra la frequenza con cui si verifica l’evento ed il numero totale delle osservazioni.

La legge dei grandi numeri

L’approccio a frequenza ha senso solo se si considera un numero di esperimenti sufficientemente elevato,  per ottenere un’approssimazione ottimale della probabilità dell’evento in osservazione. Riprendendo ancora una volta  l’esempio  del dado si intuisce che se  ripetessimo  all’infinito l’esperimento del lancio del dado alla fine la probabilità che si verifichi ad esempio l’evento 2 sarà perfettamente 1/6 ed uguale alla probabilità degli altri 5 eventi uscita del (1,3,4,5,6,).

La legge dei grandi numeri stabilisce, pertanto, che la probabilità della frequenza relativa si avvicinerà alla probabilità effettiva all’aumentare del numero degli esperimenti.

 

Esperimento del dado in python

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
from __future__ import division
numero_di_esperimenti=100000
numero_estrazioni_1=0
numero_estrazioni_2=0
numero_estrazioni_3=0
numero_estrazioni_4=0
numero_estrazioni_5=0
numero_estrazioni_6=0
for n in range(1,numero_di_esperimenti):
    numero_estratto=np.random.randint(low=1,high=7,size=1)
    if (numero_estratto == 1):
        numero_estrazioni_1 = numero_estrazioni_1 + 1
    elif (numero_estratto == 2):
        numero_estrazioni_2 = numero_estrazioni_2 + 1
    elif (numero_estratto == 3):
        numero_estrazioni_3 = numero_estrazioni_3 + 1
    elif (numero_estratto == 4):
        numero_estrazioni_4 = numero_estrazioni_4 + 1
    elif (numero_estratto == 5):
        numero_estrazioni_5 = numero_estrazioni_5 + 1
    elif (numero_estratto == 6):
        numero_estrazioni_6 = numero_estrazioni_6 + 1
        
print("numero estrazioni del numero 1: " + str(numero_estrazioni_1))
print("numero estrazioni del numero 2: " + str(numero_estrazioni_2))
print("numero estrazioni del numero 3: " + str(numero_estrazioni_3))
print("numero estrazioni del numero 4: " + str(numero_estrazioni_4))
print("numero estrazioni del numero 5: " + str(numero_estrazioni_5))
print("numero estrazioni del numero 6: " + str(numero_estrazioni_6))
numero estrazioni del numero 1: 16598
numero estrazioni del numero 2: 16766
numero estrazioni del numero 3: 16630
numero estrazioni del numero 4: 16508
numero estrazioni del numero 5: 16819
numero estrazioni del numero 6: 16678
P1=numero_estrazioni_1/numero_di_esperimenti
P2=numero_estrazioni_2/numero_di_esperimenti
P3=numero_estrazioni_3/numero_di_esperimenti
P4=numero_estrazioni_4/numero_di_esperimenti
P5=numero_estrazioni_5/numero_di_esperimenti
P6=numero_estrazioni_6/numero_di_esperimenti

La probabilità che si verifichi ad esempio l’estrazione del numero 1 sappiano essere 1/6 : 0.166666666667 confrontando il dato con il valore ottenuto sperimentalmente si ha già un buona approssimazione

print("P(1) = " + str(P1))
print("P(2) = " + str(P2))
print("P(3) = " + str(P3))
print("P(4) = " + str(P4))
print("P(5) = " + str(P5))
print("P(6) = " + str(P6))

Come si può vedere con 100000 il valore della probabilità relativa tende ad approssimare il valore della probabilità reale.

P(1) = 0.16716
P(2) = 0.16604
P(3) = 0.16727
P(4) = 0.1674
P(5) = 0.16473
P(6) = 0.16739

Rifacendo 10000000  esperimenti si può notare un ulteriore miglioramento del dato atteso ed una conferma della legge dei grandi numeri :

P(1) = 0.1664698
P(2) = 0.1667475
P(3) = 0.1665987
P(4) = 0.1669888
P(5) = 0.1666978
P(6) = 0.1664973

Se invece facessimo solo 10 esperimenti il risultato sarebbe assolutamente non attendibile:

P(1) = 0.0
P(2) = 0.0
P(3) = 0.2
P(4) = 0.3
P(5) = 0.2
P(6) = 0.2

in questa ultima ipotesi sperimentale  risulterebbe ad esempio che il numero 1 ed il 2 non avrebbero possibilità di essere estratti mentre il 4 risulterebbe il numero fortunato e sappiamo benissimo che questo non è possibile a meno di avere una dado truccato.

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments