析取正规网络的PyTorch实现

disjunctive-nn的Python项目详细描述


PyPI version shields.ioPyPI licensePyPI license

析取正规网络

析取正态网络(DNN)是一种用于二值分类的神经网络。它使用相交凸多面体(超维多边形)覆盖正样本的特征空间。这使得DNNs能够在特征空间中以约束不等式的形式找到规则,这些规则类似于决策树(DTs)中的规则。在

在2D中,它可以看作是平面上的多个凸多边形,将所有正样本包围,而将负样本留在外面。在

基于纸张:

Mehdi Sajjadi, Mojtaba Seyedhosseini, Tolga Tasdizen (2014). Disjunctive Normal Networks. CoRR, abs/1412.8534. [pdf]

如何使用析取神经网络

disjuntive nn包继承自scikit learn类,因此可以直接放在其他具有相同调用API的sklearn转换器旁边。在

fromdisjunctive_nnimportDisjunctiveNormalNetworkfromsklearn.datasetsimportmake_moonsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_scoreX,y=make_moons(n_samples=1000,noise=0.2)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.33,random_state=42)dnn=DisjunctiveNormalNetwork(n_polytopes=2,m=4)dnn.fit(X_train,y_train)y_pred=dnn.predict(X_test)print(accuracy_score(y_test,y_pred))

安装

PyPI安装:

^{pr2}$

或者下载软件包,安装要求,然后手动运行安装程序:

wget https://github.com/tsitsimis/disjunctive-normal-networks/archive/master.zip
unzip master.zip
rm master.zip
cd disjunctive-normal-networks-master

pip install -r requirements.txt

python setup.py install

析取正规网络的优点

析取正规网络可以看作是一个通过最小化误差函数用反向传播学习的Oblique Decision Tree(ODT)。在

倾斜决策树是规则决策树的一种推广,它的规则是多元的,这导致了边界与轴不平行的特征空间的划分。在

这使得dnn比一般的神经网络具有更高的可解释性(特征线性组合的不等式规则),并且可以用反向传播进行训练。在

总的来说,DNN比DT的主要优势是:

  • 用多面体代替水母
  • 用反向传播进行训练,因此可以作为最后或中间步骤并入任何神经网络拓扑中
  • 不太容易过度拟合(尽管这只是一些简单实验的快速结果)

理论背景

析取范式

决策树通过绘制轴对齐的超平面来分割超立方体中的空间。每一个超曲线包围一个类的点,形成树的最终决策函数

在二元分类的情况下,包围正样本的超立方体的内部可以看作布尔函数为真(1)而ouside为假(0)的子空间。在

对于上图中的树,关联的布尔函数(1表示正类,0表示类)为

这个布尔函数是用Disjunctive Normal Form写成的,这意味着它是交集的并集,或者是“或”的AND(就逻辑门而言)。在

这是析取正规网络用来表示这种布尔函数的时候。在

半空间与多面体

多面体是多边形和更高维多面体的推广。它可以看作M个半空间的交集,其中半空间定义为它所在的子空间

许多这样的多面体可以用作覆盖物,并优化为在二元分类问题中包含所有阳性样本:

决策函数

半空间可以表示为特征空间线性组合的sigmoid函数 . M半空间的交集是它们的乘积(布尔与)并形成一个多面体

最后,N个多面体的并构成决策函数。为了计算并集,我们可以把所有的加在一起,但在重叠的区域,结果将大于1。为了解决这个问题,可以使用DeMorgan规则将总和转换为乘积

在上面的表达式中,我们将变量的布尔求反替换为与布尔值,并用乘积替换。在

然后用梯度下降法对函数进行优化。在

示例和基准

在2D合成数据集上对DNNs进行了测试,并与决策树进行了比较,决策树是最接近决策函数的分类器。重点本实验旨在说明这两种分类器的决策边界性质。这应该是小菜一碟,因为性能不一定会影响到真实的数据集。在

将列车数据集与测试集分割后的测试集精度相对应。通过实验设置了DNN参数(N:多面体个数,M:每个多面体的半空间数)。在

下图显示了在整个数据集上进行训练时两个模型的决策功能。目的是展示模型对训练集的记忆(过拟合)程度。在

卫星

圆圈

螺旋

总体上看,DNNs提供了更平滑的决策边界,并且对训练数据的过度拟合更少。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
http POST请求Java CouchDB   java删除带有大量尾随0的浮点字符串上的科学符号   JavaEE5和Hibernate   java如何在Spring Social中获得比特定id更早的tweet   java是框架。revalidate()在事件后获取输出是否重要?   java为什么不能返回通用映射?   java如何理解和优化工厂方法的高自时间   java Eclipse 202006错误由于项目的生成路径不完整,因此未生成该项目   多线程是java。util。向量序列化线程安全?   在Eclipse和java中使用不同的构建配置。属性文件   编译Java:从命令行运行的问题   java如何知道消息是否已确认/取消?   Java铸造一套   java Android Seekbar progress已更改变量,给出错误