def test_ldsMartinDistance(): """Test Martin distance computation for LDS's (5 states). Config: 5 states (observation centering - default). """ fileA = os.path.join(TESTBASE, "data/data1.txt") fileB = os.path.join(TESTBASE, "data/data2.txt") # load data files dataA, _ = loadDataFromASCIIFile(fileA) dataB, _ = loadDataFromASCIIFile(fileB) ldsA = LinearDS(5, False, False) ldsB = LinearDS(5, False, False) # estimate LDS's ldsA.suboptimalSysID(dataA) ldsB.suboptimalSysID(dataB) # compute distances A<->A, A<->B dAA = ldsMartinDistance(ldsA, ldsA, 20) dAB = ldsMartinDistance(ldsA, ldsB, 20) truth = np.genfromtxt(os.path.join(TESTBASE, "data/ldsMartinDistanceData1Data2.txt")) np.testing.assert_almost_equal(dAB, truth, 2) np.testing.assert_almost_equal(dAA, 0, 2)
def test_LinearDS_suboptimalSysID(): """Test LinearDS system identification. """ dataFile = os.path.join(TESTBASE, "data/data1.txt") data, _ = loadDataFromASCIIFile(dataFile) lds = LinearDS(5, False, False) lds.suboptimalSysID(data) baseLDSFile = os.path.join(TESTBASE, "data/data1-dt-5c-center.pkl") baseLDS = pickle.load(open(baseLDSFile)) err = ldsMartinDistance(lds, baseLDS, N=20) np.testing.assert_almost_equal(err, 0, 2)
def main(argv=None): if argv is None: argv = sys.argv parser = OptionParser(add_help_option=False) parser.add_option("-s", dest="model1File") parser.add_option("-r", dest="model2File") parser.add_option("-n", dest="iterations", type="int", default=20) parser.add_option("-h", dest="shoHelp", action="store_true", default=False) parser.add_option("-v", dest="verbose", action="store_true", default=False) opt, args = parser.parse_args() if opt.shoHelp: usage() with open(opt.model1File, 'r') as fid: dt1 = pickle.load(fid) with open(opt.model2File, 'r') as fid: dt2 = pickle.load(fid) martinD = dsdist.ldsMartinDistance(dt1, dt2, opt.iterations) dsinfo.info('D(%s,%s) = %.4f' % (opt.model1File, opt.model2File, martinD))
def main(argv=None): if argv is None: argv = sys.argv parser = OptionParser(add_help_option=False) parser.add_option("-i", dest="iListFile") parser.add_option("-o", dest="oListFile") parser.add_option("-d", dest="dMatFile") parser.add_option("-b", dest="iBase") parser.add_option("-k", dest="kCenter", type="int", default=5) parser.add_option("-h", dest="shoHelp", action="store_true", default=False) parser.add_option("-v", dest="verbose", action="store_true", default=False) options, args = parser.parse_args() if options.shoHelp: usage() iBase = options.iBase dMatFile = options.dMatFile iListFile = options.iListFile oListFile = options.oListFile kCenter = options.kCenter verbose = options.verbose assert kCenter > 0, "Oops (kCenter < 1) ..." iList = pickle.load(open(iListFile)) if verbose: dsinfo.info("Loaded list with %d DT models!" % len(iList)) # load DT's dts = [] for dtFile in iList: dts.append(pickle.load(open(os.path.join(iBase, dtFile)))) if verbose: dsinfo.info("Running DT clustering with %d clusters ..." % kCenter) D = None if not dMatFile is None: if os.path.exists(dMatFile): if verbose: dsinfo.info("Try loading distance matrix %s!" % dMatFile) D = pickle.load(open(dMatFile)) if D is None: if verbose: dsinfo.info("Computing pairwise distances ...") nDTs = len(dts) D = np.zeros((nDTs, nDTs)) for i in range(nDTs): for j in range(nDTs): D[i,j] = ldsMartinDistance(dts[i], dts[j], 50) # run clustering (eData, ids) = LinearDS.cluster(D, kCenter, verbose) ids = list(ids) #write list of DT representatives oList = [] for j, dtFile in enumerate(iList): if j in ids: oList.append(dtFile) else: oList.append("Dummy") pickle.dump(oList, open(oListFile, "w")) if verbose: dsinfo.info("Wrote list of representative DS's to %s!" % oListFile) if not dMatFile is None: if verbose: dsinfo.info("Writing distance matrix to %s!" % dMatFile) pickle.dump(D, open(dMatFile, "w"))
def main(argv=None): if argv is None: argv = sys.argv parser = OptionParser(add_help_option=False) parser.add_option("-i", dest="iListFile") parser.add_option("-o", dest="oListFile") parser.add_option("-d", dest="dMatFile") parser.add_option("-b", dest="iBase") parser.add_option("-k", dest="kCenter", type="int", default=5) parser.add_option("-h", dest="shoHelp", action="store_true", default=False) parser.add_option("-v", dest="verbose", action="store_true", default=False) options, args = parser.parse_args() if options.shoHelp: usage() iBase = options.iBase dMatFile = options.dMatFile iListFile = options.iListFile oListFile = options.oListFile kCenter = options.kCenter verbose = options.verbose assert kCenter > 0, "Oops (kCenter < 1) ..." iList = pickle.load(open(iListFile)) if verbose: dsinfo.info("Loaded list with %d DT models!" % len(iList)) # load DT's dts = [] for dtFile in iList: dts.append(pickle.load(open(os.path.join(iBase, dtFile)))) if verbose: dsinfo.info("Running DT clustering with %d clusters ..." % kCenter) D = None if not dMatFile is None: if os.path.exists(dMatFile): if verbose: dsinfo.info("Try loading distance matrix %s!" % dMatFile) D = pickle.load(open(dMatFile)) if D is None: if verbose: dsinfo.info("Computing pairwise distances ...") nDTs = len(dts) D = np.zeros((nDTs, nDTs)) for i in range(nDTs): for j in range(nDTs): D[i, j] = ldsMartinDistance(dts[i], dts[j], 50) # run clustering (eData, ids) = LinearDS.cluster(D, kCenter, verbose) ids = list(ids) #write list of DT representatives oList = [] for j, dtFile in enumerate(iList): if j in ids: oList.append(dtFile) else: oList.append("Dummy") pickle.dump(oList, open(oListFile, "w")) if verbose: dsinfo.info("Wrote list of representative DS's to %s!" % oListFile) if not dMatFile is None: if verbose: dsinfo.info("Writing distance matrix to %s!" % dMatFile) pickle.dump(D, open(dMatFile, "w"))