Nalezení optimální šířky binu histogramu

podle algoritmu H. Shimazaki, S. Shinomoto, Neural Computation 19, 1503-1527 (2007)

In [14]:
import numpy as np
import matplotlib.pyplot as plt

načtení dat

In [15]:
data=np.loadtxt('data.dat') #nacteni dat ze souboru data.dat

výpočet ztrátové funkce

In [16]:
Ndata=np.size(data)
C=np.empty(Ndata)
delta=np.empty(Ndata)
for i in range(1,Ndata):
    hist,bin_edges=np.histogram(data,bins=i) #vytvoreni histogramu
    mean=np.mean(hist)
    sigma=np.std(hist)
    delta[i]=bin_edges[1]-bin_edges[0]
    C[i]=(2*mean-sigma**2)/delta[i]**2

Výpis výsledků

In [17]:
Cmin=np.min(C)
imin=np.where(C==Cmin)[0]
print('pocet dat:',np.size(data)) 
print('optimalni pocet binu: {0:d}'.format(imin[0]))
print('optimalni sirka binu: {0:f}'.format(delta[imin[0]]))
pocet dat: 1000
optimalni pocet binu: 27
optimalni sirka binu: 0.970145

Nakreslení ztrátové funkce

In [18]:
fig,ax=plt.subplots()
ax.scatter(delta[1:Ndata],C[1:Ndata]) #nakresleni histogramu
ax.plot([delta[imin[0]],delta[imin[0]]],[np.min(C),np.max(C)],c='red',ls='dashed' )
plt.xscale('log')
ax.set_xlabel('$\Delta$')
ax.set_ylabel('$C\, (\Delta)$')
plt.show()
No description has been provided for this image

Nakreslení histogramu s optimální šířkou binu

In [19]:
fig,ax=plt.subplots(figsize=(4,4))
ax.hist(data,bins=imin[0],fc='orange',ec='black')
ax.set_xlabel('biny')
ax.set_ylabel('četnosti')
plt.show()
No description has been provided for this image