Renascence使用方法

Renascence使用方法

下层库的适配

类型

下层库所有向Renascence架构提供的函数,其输入输出都必须给一个对应的继承于IStatusType的类,用于读取、保存、映射、释放该类型。

/*Basic API*/
class IStatusType
{
public:
    IStatusType(const std::string name):mName(name){}
    virtual ~IStatusType(){}
    inline std::string name() const {return mName;}

    /*GPStream是输入流的抽象,输入可能来源于文件、内存、网络等等*/
    virtual void* vLoad(GPStream* input) const = 0;

    /*GPWStream是输出流的抽象,可能输出到文件、内存、网络等等*/
    virtual void vSave(void* contents, GPWStream* output) const = 0;
    virtual void vFree(void* contents) const = 0;
    /* map
     * Modify contents by values.
     * return the number of parameters it needed.
     * If value is NULL, just return the number of parameters.
     * If *content is NULL and value is not NULL, alloc a new one.
     */
    virtual int vMap(void** content, double* value) const = 0;
    /* Check(Optional)
     * For Continue Data (Stream), Check if the data is completed, content must be not null
     */
    virtual bool vCheckCompleted(void* content) const {return NULL!=content;}
    /* Merge(Optional)
     * For Continue Data (Stream), Merge the src data to dst, dst and src must be not null
     * Normally, dst and src will be freed after calling this api
     * return NULL means can't merge
     */
    virtual void* vMerge(void* dst, void* src) const {return NULL;}

private:
    std::string mName;
};

函数

下层库需要提供如下形式的标准函数:

typedef GPContents*(*computeFunction)(GPContents* inputs);

GPContents 中包含一组带类型定义的数据:

struct GPContents
{
    struct GP_Unit
    {
        void* content;
        const IStatusType* type;
    };
    std::vector<GP_Unit> contents;
};

鉴于直接写这种类型的函数比较复杂,可以按如下方式,在需要导出的函数(函数本身需要保证单输出,不改输入,不改变全局、静态变量)前加 /*GP FUNCTION*/,然后执行 tools/makeGPFunction.py,自动生成对应的函数。
下面是机器学习库中的导出例子:

/*GP FUNCTION*/ALFloatMatrix* ALPackageValidateMatrix(ALIMatrixPredictor* l, ALFloatMatrix* m);
/*GP FUNCTION*/ALFloatMatrix* ALPackageValidateChain(ALFloatPredictor* l, ALLabeldData* c);
/*GP FUNCTION*/ALIMatrixPredictor* ALPackageSuperLearning(ALISuperviseLearner* l, ALFloatMatrix* m);
/*GP FUNCTION*/ALIMatrixPredictor* ALPackageUnSuperLearning(ALIUnSuperLearner* l, ALFloatMatrix* m);
/*GP FUNCTION*/ALFloatPredictor* ALPackageLearn(ALIChainLearner* l, ALLabeldData* d);
/*GP FUNCTION*/ALIChainLearner* ALPackageCreateDivider(ALIChainLearner* l, ALIChainLearner* r, ALDividerParameter* p/*S*/);
/*GP FUNCTION*/ALIChainLearner* ALPackageCreateCGP(ALCGPParameter* p/*S*/);
/*GP FUNCTION*/ALISuperviseLearner* ALPackageCreateRegress();
/*GP FUNCTION*/ALLabeldData* ALPackageLabled(ALFloatDataChain* c, double delay);
/*GP FUNCTION*/double ALPackageCrossValidate(ALIChainLearner* l, ALLabeldData* c);
/*GP FUNCTION*/ALIChainLearner* ALPackageCombine(ALARStructure* ar/*S*/, ALISuperviseLearner* l);
/*GP FUNCTION*/ALClassifierCreator* ALPackageCreateSVM(ALSVMParameter* p/*S*/);
/*GP FUNCTION*/ALClassifierCreator* ALPackageCreateGMM();
/*GP FUNCTION*/ALClassifierCreator* ALPackageCreateLogicalRegress();
/*GP FUNCTION*/ALClassifierCreator* ALPackageCreateDecisionTree(ALDecisionTreeParameter* p/*S*/);
/*GP FUNCTION*/ALFloatMatrix* ALPackageMatrixMerge(ALFloatMatrix* A, ALFloatMatrix* B, double aleft, double aright, double bleft, double bright);
/*GP FUNCTION*/ALFloatMatrix* ALPackageMatrixCrop(ALFloatMatrix* A, double aleft, double aright);

最终需要提供一个函数表,这个函数表可以在运行makeGPFunction.py时自动生成。
如上面的例子:

<libAbstract_learning>
    <ALPackageCreateClassify_GPpackage>
        <shortName>CreateClassify</shortName>
        <output>ALClassifier</output>
        <status></status>
        <input>ALClassifierCreator ALFloatMatrix </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageCreateClassify_GPpackage>

    <ALPackageRamdomForest_GPpackage>
        <shortName>RamdomForest</shortName>
        <output>ALClassifier</output>
        <status></status>
        <input>ALFloatMatrix </input>
        <inputNeedComplete>False </inputNeedComplete>
    </ALPackageRamdomForest_GPpackage>

    <ALPackageClassify_GPpackage>
        <shortName>Classify</shortName>
        <output>ALFloatMatrix</output>
        <status></status>
        <input>ALClassifier ALFloatMatrix </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageClassify_GPpackage>

    <ALPackageClassifyProb_GPpackage>
        <shortName>ClassifyProb</shortName>
        <output>ALFloatMatrix</output>
        <status></status>
        <input>ALClassifier ALFloatMatrix </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageClassifyProb_GPpackage>

    <ALPackageClassifyProbValues_GPpackage>
        <shortName>ClassifyProbValues</shortName>
        <output>ALFloatMatrix</output>
        <status></status>
        <input>ALClassifier </input>
        <inputNeedComplete>False </inputNeedComplete>
    </ALPackageClassifyProbValues_GPpackage>

    <ALPackageCrossValidateClassify_GPpackage>
        <shortName>CrossValidateClassify</shortName>
        <output>double</output>
        <status></status>
        <input>ALClassifierCreator ALFloatMatrix </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageCrossValidateClassify_GPpackage>

    <ALPackageValidateMatrix_GPpackage>
        <shortName>ValidateMatrix</shortName>
        <output>ALFloatMatrix</output>
        <status></status>
        <input>ALIMatrixPredictor ALFloatMatrix </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageValidateMatrix_GPpackage>

    <ALPackageValidateChain_GPpackage>
        <shortName>ValidateChain</shortName>
        <output>ALFloatMatrix</output>
        <status></status>
        <input>ALFloatPredictor ALLabeldData </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageValidateChain_GPpackage>

    <ALPackageSuperLearning_GPpackage>
        <shortName>SuperLearning</shortName>
        <output>ALIMatrixPredictor</output>
        <status></status>
        <input>ALISuperviseLearner ALFloatMatrix </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageSuperLearning_GPpackage>

    <ALPackageUnSuperLearning_GPpackage>
        <shortName>UnSuperLearning</shortName>
        <output>ALIMatrixPredictor</output>
        <status></status>
        <input>ALIUnSuperLearner ALFloatMatrix </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageUnSuperLearning_GPpackage>

    <ALPackageLearn_GPpackage>
        <shortName>Learn</shortName>
        <output>ALFloatPredictor</output>
        <status></status>
        <input>ALIChainLearner ALLabeldData </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageLearn_GPpackage>

    <ALPackageCreateDivider_GPpackage>
        <shortName>CreateDivider</shortName>
        <output>ALIChainLearner</output>
        <status>ALDividerParameter </status>
        <input>ALIChainLearner ALIChainLearner </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageCreateDivider_GPpackage>

    <ALPackageCreateCGP_GPpackage>
        <shortName>CreateCGP</shortName>
        <output>ALIChainLearner</output>
        <status>ALCGPParameter </status>
        <input></input>
        <inputNeedComplete></inputNeedComplete>
    </ALPackageCreateCGP_GPpackage>

    <ALPackageCreateRegress_GPpackage>
        <shortName>CreateRegress</shortName>
        <output>ALISuperviseLearner</output>
        <status></status>
        <input></input>
        <inputNeedComplete></inputNeedComplete>
    </ALPackageCreateRegress_GPpackage>

    <ALPackageLabled_GPpackage>
        <shortName>Labled</shortName>
        <output>ALLabeldData</output>
        <status></status>
        <input>ALFloatDataChain double </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageLabled_GPpackage>

    <ALPackageCrossValidate_GPpackage>
        <shortName>CrossValidate</shortName>
        <output>double</output>
        <status></status>
        <input>ALIChainLearner ALLabeldData </input>
        <inputNeedComplete>False False </inputNeedComplete>
    </ALPackageCrossValidate_GPpackage>

    <ALPackageCombine_GPpackage>
        <shortName>Combine</shortName>
        <output>ALIChainLearner</output>
        <status>ALARStructure </status>
        <input>ALISuperviseLearner </input>
        <inputNeedComplete>False </inputNeedComplete>
    </ALPackageCombine_GPpackage>

    <ALPackageCreateSVM_GPpackage>
        <shortName>CreateSVM</shortName>
        <output>ALClassifierCreator</output>
        <status>ALSVMParameter </status>
        <input></input>
        <inputNeedComplete></inputNeedComplete>
    </ALPackageCreateSVM_GPpackage>

    <ALPackageCreateGMM_GPpackage>
        <shortName>CreateGMM</shortName>
        <output>ALClassifierCreator</output>
        <status></status>
        <input></input>
        <inputNeedComplete></inputNeedComplete>
    </ALPackageCreateGMM_GPpackage>

    <ALPackageCreateLogicalRegress_GPpackage>
        <shortName>CreateLogicalRegress</shortName>
        <output>ALClassifierCreator</output>
        <status></status>
        <input></input>
        <inputNeedComplete></inputNeedComplete>
    </ALPackageCreateLogicalRegress_GPpackage>

    <ALPackageCreateDecisionTree_GPpackage>
        <shortName>CreateDecisionTree</shortName>
        <output>ALClassifierCreator</output>
        <status>ALDecisionTreeParameter </status>
        <input></input>
        <inputNeedComplete></inputNeedComplete>
    </ALPackageCreateDecisionTree_GPpackage>

    <ALPackageMatrixMerge_GPpackage>
        <shortName>MatrixMerge</shortName>
        <output>ALFloatMatrix</output>
        <status></status>
        <input>ALFloatMatrix ALFloatMatrix double double double double </input>
        <inputNeedComplete>False False False False False False </inputNeedComplete>
    </ALPackageMatrixMerge_GPpackage>

    <ALPackageMatrixCrop_GPpackage>
        <shortName>MatrixCrop</shortName>
        <output>ALFloatMatrix</output>
        <status></status>
        <input>ALFloatMatrix double double </input>
        <inputNeedComplete>False False False </inputNeedComplete>
    </ALPackageMatrixCrop_GPpackage>

</libAbstract_learning>

GP公式语法

见 doc/formula.txt
1、基本形式:
f(x0, g(x1, h(x2), f(x2, x3)));
f(x0, ADF[NAME, x0,x1,f(x0,x3)])
2、符号说明:
f、g、h:函数的简写或全写,在xml格式的metaData中提供
x0-xn:输入变量名,必须从x0开始,中间不允许间断,此函数构建完成后的ADF,必须按由小到大的顺序组织输入变量
ADF:自动生成标志
NAME:ADF别名,必须取一个独特的名字,以便后续使用
f(x0,x3):此表示ADF的一个输入为固定的函数
3、自动生成
自动生成是将某一个输入变量改由指定了输入的子函数替代,子函数由GP库去搜索得出
格式为 ADF[NAME, x1, x2, x3, f(x0,x1), …]
自动生成函数的输入由[]中的内容描述,按类型:输入变量编号来排,输出类型就是该位置上的输入所应有的类型
自动生成的函数确定用完所有输入,但有可能会重复利用

调用方法

C层级调用

就当做一般的C++库使用,对外接口均封装在

include/user/GPAPI.h

Python层级调用

先安装 swig,然后进入python-renascence/module,运行 ./build_source.sh && sudo python setup.py install,这样安装好。

下面这个例子使用 Renascence架构,调用机器学习库作一次时间序列的预测:

#!/usr/bin/python
import Renascence

producer = Renascence.init(["./libAbstract_learning.xml"])
print producer.listAllFunctions()
print producer.listAllTypes()
x0 = producer.load('ALFloatDataChain', './bao.txt')
formula = 'CrossValidate(ADF(GodTrain), Labled(x0, x1))'
#formula = 'CrossValidate(CreateCGP(), Labled(x0, x1))'
#[trainedformula, bestValue] = producer.train(formula, producer.merge(x0, 1.0))
[trainedformula, bestValue] = producer.train(formula, producer.merge(x0, 1.0), times=100000, cacheFile='temp.txt')
print bestValue
print trainedformula.ADF('GodTrain')
#print trainedformula.parameters()
p = trainedformula.parameters()
with open('temp_parameter.txt', 'w') as f:
    f.write(p)
时间: 2024-09-27 18:22:02

Renascence使用方法的相关文章

Renascence架构简介

Renascence架构 Renascence架构是 A-GP-B 式的桥梁架构,它要求下层库不直接对外提供接口,而是往GP库注册函数,上层库用GP公式间接调用下层库的代码. GP库位于应用与lib库之间,作为应用调用lib库的桥梁而存在,它本身不依赖任何基础库. 上层调用 通过引入训练这一过程,应用跨平台的问题有了最好的解决方案,即在安装过程中,应用提供一个模板供平台训练,得到适合的实际运行的程序,然后应用在运行时用该程序就可以. 应用本身无须考虑平台问题,在任一平台下功能自动兼容.性能自动达

解决win7系统无法将网页添加到收藏夹的方法

  许多用户在访问网站时,如果看到自己感兴趣的网页内容或网站,通常我们都会通过Ctrl+D添加到收藏夹中,但近期有部分win7系统用户,在浏览器下添加网页收藏时,却发现无法将网页添加到收藏夹,对于这一问题我们如何解决呢?下面看小编为大家提供的详细解决方法吧! 原因分析: 很多时候网址不能收藏都是由于收藏夹目录指向错误引起的,我们可以到注册表里将其修复. 操作方法: 1.在开始菜单中点击"运行",然后输入"regedit"并且回车; 2.打开注册表编辑器,依次展开[H

电脑中通过修改注册表解决网页无法添加到收藏夹的方法

  电脑中通过修改注册表解决网页无法添加到收藏夹的方法.最近有不少用户反映在电脑中出现了无法添加网页到收藏夹的问题,尝试了各种方法都无法解决这个问题.对此,在接下来的内容中,小编为大家提供了一种通过修改注册表解决网页无法添加到收藏夹的方法,大家可以参考一下. 1.按Win+R打开运行,输入regedit并按回车键; 2.在注册表编辑器依次展开HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/UserShell

win7系统将Google浏览器收藏夹拉到桌面成快捷方式的方法

  win7系统将Google浏览器收藏夹拉到桌面成快捷方式的方法 具体方法如下: 1.在进行演示之后,需要在浏览器中进行添加的是收藏的夹的内容,进行点击地址栏中点击收藏夹按钮; 2.可以看到的网页地址被收藏夹收藏起来了; 3.然后点击点击浏览器中的地址中的更多的菜单中,弹出了下拉菜单中进行选择为"书签"; 4.就会弹出了下一级菜单中进行选择为了刚才你收藏的收藏夹的地址; 5.把收藏夹地址进行拖动到自己桌面中当中; 6.可以看到的是百度一下的收藏夹快捷方式创建成功了.下次就可以直接双击

解决win7系统无法进入操作中心的方法教程

  Windows操作中心是一个查看警报和执行操作的中心位置,它可帮助保持 Windows 稳定运行,不过在win7系统下,windows操作中心貌似很少用户会进入查看,不过不能因为我们不经常使用而对其不理不睬,近期有部分使用win7系统的用户向小编反映,在即的windows操作中心无法打开,对于出现该问题的用户我们应该如何解决呢?下面看小编为大家带来的解决方法! 解决win7系统无法进入操作中心的方法教程 1.首先,我们同时按下win7电脑键盘上的win+R快捷键打开电脑的运行窗口,在打开的运

解决win7系统下安全弹出U盘出现电脑重启的问题方法

  U盘是一种能够方便用户便携式存储数据的设备,U盘在我们的生活中较为广泛被使用,不过有些用户在win7系统下使用U盘时进行备份或转移资料后,在不使用U盘时,使用安全弹出U盘时出现电脑自动重启的问题,对于该奇葩问题很多用户表示不解,故此小编针对遇到该问题的用户提供了解决方法,需要的用户赶快试试吧! 解决win7系统下安全弹出U盘出现电脑重启的问题方法 1.返回到桌面位置,找到"这台电脑"图标,直接鼠标右键点击这台电脑,在出现的菜单里面选中选择设备管理器选项. 2.这样就能够打开win8

解决win7系统所有中文显示乱码的方法教程

  在win7系统下我们如果把语言操作系统界面语言修改为英文后,有部分用户的电脑中的英文字体将显示乱码的问题,对于出现该问题是因为中文不是Unicode语言,用户在将系统语言设置为英文后,语言设置的非Unicode设置出问题而导致的,故此我们需要将非Unicode的语言修改为中文语言即可解决这个问题,下面我们看下具体的操作教程吧! 解决win7系统所有中文显示乱码的方法教程 1.点击开始菜单图标并单击打开控制面板. 2.在区域和语言设置-管理中,选择更改显示语言. 3.选择管理标签,并点击更改系

解决win7系统唤醒休眠状态出现“拒绝访问”错误的方法

  windows休眠状态是指将所有运行的实时数据存储到硬盘上,并且关闭一切不必要的硬件从而节省电量,无论你所使用的windows是哪个版本,系统都能够让用户自动进入休眠状态,当然在你没有关闭休眠功能的前提下,不过在近期有部分win7用户反映,将系统从休眠状态唤醒时,出现"拒绝访问"的错误,对于该问题我们如何解决呢?下面看为您带来的解决方法! 解决win7系统唤醒休眠状态出现"拒绝访问"错误的方法 第一步.进入Win7系统后,我们在键盘中按"Win+R&q

win7系统下批量重命名文件的方法

  在win7下我们对于同类文件来说,如果想要以数字编号的形式命名文件的话,是无需借助第三方软件即可完成修改的,不过很多不知道如何操作,故此小编为大家带来了Win7如何同时重命名多个文件的方法,需要的用户赶快学习下吧! win7系统下批量重命名文件的方法 1.在保存文件的时候可以采用系统自动分配名字的方法,即保存的时候系统显示的什么名字,就让它默认为什么名字,这样的名字也不会重名,保存起来相当的快. 2.选中文件夹中所有需要重命名的文件,直接按组合键ctrl+a就行,然后按F2,接下来输入希望设