Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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))
Exemple #4
0
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"))
Exemple #5
0
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"))