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
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
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
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
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():