from classes.KernelContext import KernelContext
from classes.SampleGenerator.MultimodalGenerator import MultimodalGenerator

# Def le nombre de points pour le linspace et pour la multimodale

nbPointsFirstGauss = 45
nbPointsSecondGauss = 30
nbPointsTot = nbPointsFirstGauss + nbPointsSecondGauss

# Def du step pour la génération du linspace dans KernelContext
stepLinspace = 0.1


# Génération multimodale

sample = MultimodalGenerator([(nbPointsFirstGauss,-1,1),(nbPointsSecondGauss,5,2)]).generateNormalSamples()

# Def du hOpt

sigma=stdev(sample)

hOpt = 1.06*sigma*(nbPointsFirstGauss+nbPointsSecondGauss)**(-1/5)
#print("hopt",hOpt)

# Def epsilon

#epsilon = 0.2*hOpt   #mettre ce paramettre en fonction du hOpt trouvé.


#def Kernel
tKernelTri = KernelContext(sample,TriangularKernel(hOpt),stepLinspace)
    plt.axvline(x=maxStruct['potentialHValue'], color="green")

    #distances = sorted(distances)
    #for ind,p in enumerate(distances):
    #if ind != 9:
    #plt.axvline(x=(distances[ind+1]+p)/2, color='green')

    hDomain = np.linspace(0, 40, 200)

    hX = []
    tKernel = TriangularKernel(0.1)
    for ind, i in enumerate(hDomain):
        tKernel.bandwidth = i
        hX.append(0)
        for j in experimentalSample:
            hX[ind] += tKernel.value(centerPoint, j)

    plt.plot(hDomain, hX)
    plt.show()

    sample = MultimodalGenerator([
        (100, -1, 1), (400, 5, 2)
    ]).generateNormalSamples()  #sample = echantillon
    hist, bins = np.histogram(sample, bins=50)
    width = 0.7 * (bins[1] - bins[0])
    center = (bins[:-1] + bins[1:]) / 2
    plt.bar(center, hist, align='center', width=width)
    plt.show()
else:
    print("error")
Пример #3
0
from statistics import stdev


from classes.Kernels.EpanechnikovKernel import EpanechnikovKernel
from classes.SampleGenerator.MultimodalGenerator import MultimodalGenerator
from classes.KernelContext import KernelContext

totalErrorKernel = 0
totalErrorNB = 0
totalErrorKernelPrecis = 0

nbTotalIterations = 10

for e in range(nbTotalIterations):
    # On commence par générer des données
    sample1 = MultimodalGenerator([(100,2,2),(100,8,2)]).generateNormalSamples()
    sample2 = MultimodalGenerator([(100,5,2)]).generateNormalSamples()

    # On sait que sur ce jeu de données, les 200 premières données sont de la classe A, et les 100 dernières sont de la classe 2
    # Recherche d'une largeur optimale
    sigma1=stdev(sample1)
    sigma2=stdev(sample2)
    hOpt = 1.06 * (sigma1*2+sigma2)/3 * (300) ** (-1 / 5)
    # Création de notre kernel
    epaKernel = EpanechnikovKernel(hOpt)

    # On génère la fonction de densité de la classe A
    AClassContext = KernelContext(sample1, epaKernel)
    AClassDensity, AClassDensityDomain = AClassContext.computeTotalDensity()

    # Pareil pour la classe B