def learn_metal_cdtw(parentLabels, parent, childLabels, child, symmetric, squared, parameters=None): """learn optimal parameters for gem on metal data""" if parameters == None: parameters = np.array(range(21))*0.01 errors = [] for relative_window in parameters: window = int(np.round(len(parent[0])*relative_window)) func = lambda query, subject: dist.cdtw(query, subject, window, squared) e, l = c.obtain_1NN_error(parentLabels, parent, childLabels, child, func) errors.append((e, (relative_window, squared))) print errors[-1] errs = list(sorted(errors, key=lambda x: x[0][0])) # pick only the best and take parameter in the "middle" best = filter(lambda (x, y): x[0]==errs[0][0][0], errs) best.sort(key=lambda (x, y): y[0]) best = best[len(best)/2] return best, errs
def learn_metal_cdtw(parentLabels, parent, childLabels, child, symmetric, squared, parameters=None): """learn optimal parameters for gem on metal data""" if parameters == None: parameters = np.array(range(21)) * 0.01 errors = [] for relative_window in parameters: window = int(np.round(len(parent[0]) * relative_window)) func = lambda query, subject: dist.cdtw(query, subject, window, squared ) e, l = c.obtain_1NN_error(parentLabels, parent, childLabels, child, func) errors.append((e, (relative_window, squared))) print errors[-1] errs = list(sorted(errors, key=lambda x: x[0][0])) # pick only the best and take parameter in the "middle" best = filter(lambda (x, y): x[0] == errs[0][0][0], errs) best.sort(key=lambda (x, y): y[0]) best = best[len(best) / 2] return best, errs
def loocv_cdtw(loocvLabels, loocvSet, relative_window, squared): """calculate LOOCV error rate for given window on a given set""" error, window = 0, int(np.round(relative_window*len(loocvSet[0]))) # 1NN with Leave One Out Cross Validation for index, (queryLabel, query) in enumerate(zip(loocvLabels, loocvSet)): search = np.vstack((loocvSet[:index], loocvSet[index+1:])) labels = np.hstack((loocvLabels[:index], loocvLabels[index+1:])) vals =[dist.cdtw(query, subject, window, squared) for subject in search] best = np.array(vals).argmin() if queryLabel != labels[best]: error +=1 return error, len(loocvSet), float(error)/len(loocvSet)
def loocv_cdtw(loocvLabels, loocvSet, relative_window, squared): """calculate LOOCV error rate for given window on a given set""" error, window = 0, int(np.round(relative_window * len(loocvSet[0]))) # 1NN with Leave One Out Cross Validation for index, (queryLabel, query) in enumerate(zip(loocvLabels, loocvSet)): search = np.vstack((loocvSet[:index], loocvSet[index + 1:])) labels = np.hstack((loocvLabels[:index], loocvLabels[index + 1:])) vals = [ dist.cdtw(query, subject, window, squared) for subject in search ] best = np.array(vals).argmin() if queryLabel != labels[best]: error += 1 return error, len(loocvSet), float(error) / len(loocvSet)