Esempio n. 1
0
def calcMinChi2(flux_target, templateDir, waveRange):
    minChi2 = 0
    templatePath = ""
    minCoeff = None

    templatePaths = util.listDirFiles(templateDir)
    for path in templatePaths:
        data = np.loadtxt(path)
        wave, flux = formatWaveAndFlux(data[:, 0], data[:, 1], waveRange)
        try:
            coeff = mathUtil.calcChi2Coeff(flux_target, flux, wave)
        except Exception, ex:
            exUtil.printTagMessage(ex, "error", path)
            continue
        chi2_value = mathUtil.chi2_ploy(wave, flux_target, flux, coeff[0], coeff[1], coeff[2])

        if minChi2 == 0 or chi2_value < minChi2:
            minChi2 = chi2_value
            templatePath = path
            minCoeff = coeff
Esempio n. 2
0
def calcMinChi22(flux_target, templateDir, waveRange):
    minChi2 = 0
    templatePath = ""

    templatePaths = util.listDirFiles(templateDir)
    for path in templatePaths:
        data = np.loadtxt(path)
        wave, flux = formatWaveAndFlux(data[:, 0], data[:, 1], waveRange)
        chi2_value = mathUtil.chi2(flux_target, flux)

        if minChi2 == 0 or chi2_value < minChi2:
            minChi2 = chi2_value
            templatePath = path

    return templatePath, minChi2
Esempio n. 3
0
def testData(data):
    m, n = data.shape
    tags = data[:, n - 1]
    errorCount = 0

    for i in range(m):
        print "%d : classification" % i
        maxPro = 0
        maxClass = 0
        for key in classMeanVar.keys():
            p = 1.0
            for j in range(n - 1):
                if j < 3:
                    num = classMeanVar[key][j][2]
                    var = classMeanVar[key][j][1]
                    mean = classMeanVar[key][j][0]
                    p = p * MathUtil.calcNormPDF(mean, var, data[i][j])
                else:
                    bp = (float(classMeanVar[key][j] + 1) / (subClassCount[key] + 1))
                    if data[i][j] == 0:
                        p *= 1 - bp
                    else:
                        p *= bp

            p = p * subClassCount[key] / m

            print "subclass %d MAP: %f" % (key, p)

            if p > maxPro:
                maxPro = p
                maxClass = key

        if maxClass == 0:
            continue
        if maxClass != tags[i]:
            errorCount += 1
            print "Error! Estimate :  %d, True : %d" % (maxClass, tags[i])
    return float(errorCount) / m
Esempio n. 4
0
def formatWaveAndFlux(wave, flux, waveRange):
    tck = interpolate.splrep(wave, flux)
    flux_spl = interpolate.splev(waveRange, tck)
    wave_range, flux_range = getMetalRegion(waveRange, flux_spl)
    flux_normalize = mathUtil.normalize(flux_range)
    return wave_range, flux_normalize
Esempio n. 5
0
inputFile = "data_v4.txt"
data = util.loadTxtData(inputFile)
m, n = data.shape

testCount = int(m * 0.2)
testData = data[0:testCount, :]
trainData = data[testCount:m, :]

subClassData, subClassCount = astroUtil.formatClassifyData(trainData)
classMeanVar = {}

for key in subClassData.keys():
    classMeanVar[key] = []
    for i in range(len(subClassData[key])):
        if i < 3:
            mean, var, num = MathUtil.calcMeanVarCount(subClassData[key][i])
            classMeanVar[key].append([mean, var, num])
        else:
            classMeanVar[key].append(np.sum(subClassData[key][i]))


def testData(data):
    m, n = data.shape
    tags = data[:, n - 1]
    errorCount = 0

    for i in range(m):
        print "%d : classification" % i
        maxPro = 0
        maxClass = 0
        for key in classMeanVar.keys():