面向元学习和自适应分层分类器设计的python包
smartsvm的Python项目详细描述
智能支持向量机
smartsvm是一个python包,它实现了Fast Meta-Learning for Adaptive Hierarchical Classifier DesignbyGerrit J.J. van den Burg和Alfred O. Hero中的方法。该包包含 用henze-penrose散度和a 称为智能支持向量机的分层分类器。请参阅下面的使用文档 更多细节。
安装
SmartSVM可在PYPI上使用,并且可以通过以下方式轻松安装:
pip install smartsvm
用法
本文的重点是精确的bayes误差估计和 分层分类器SmartSVM。因此,这些将是最感兴趣的 SmartSVM包的用户。下面我们简单地解释一下如何使用这些 功能。
引用
如果你在研究中使用这个软件包,请用 以下是bibtex条目:
@article{van2017fast, title={Fast Meta-Learning for Adaptive Hierarchical Classifier Design}, author={Gerrit J.J. van den Burg and Alfred O. Hero}, journal={arXiv preprint arXiv:1711.03512}, archiveprefix={arXiv}, year={2017}, eprint={1711.03512}, url={https://arxiv.org/abs/1711.03512}, primaryclass={cs.LG} }
bayes误差估计
误差估计有三个功能:
hp_estimate用于bayes错误率的henze-penrose估计。 这可以用作:
>>>importnumpyasnp>>>fromsmartsvmimporthp_estimate>>>X1=np.random.multivariate_normal([-1,0],[[1,0],[0,1]],100)>>>X2=np.random.multivariate_normal([1,0],[[1,0],[0,1]],100)>>>hp_estimate(X1,X2)# with normalization>>>hp_estimate(X1,X2,normalize=False)# without normalization
compute_error_graph和compute_ovr_error分别计算 双误码率估计的完全加权图 每节课。它们有类似的界面:
>>>importnumpyasnp>>>fromsmartsvmimportcompute_error_graph,compute_ovr_error>>>fromsklearn.datasetsimportload_digits>>>digits=load_digits(5)>>>n_samples=len(digits.images)>>>X=digits.images.reshape((n_samples,-1))>>>y=digits.target>>>G=compute_error_graph(X,y,n_jobs=2,normalize=True)>>>d=compute_ovr_error(X,y,normalize=True)
智能支持向量机分类器
SMARTSVM是一种自适应的分层分类器,它构造一个 基于贝叶斯估计的分类层次 每对类之间的错误。分类器构建在 scikit learn和其他sklearn的使用方法完全相同 分类器:
>>>importnumpyasnp>>>fromsmartsvmimportSmartSVM>>>fromsklearn.datasetsimportload_digits>>>digits=load_digits(10)>>>n_samples=len(digits.images)>>>X=digits.images.reshape((n_samples,-1))>>>y=digits.target>>>clf=SmartSVM()>>>clf.fit(X,y)>>>clf.predict(X)
默认情况下,smartsvm分类器使用线性支持向量机 (LinearSVC)作为每个二进制子问题的底层二进制分类器 在等级制度中。使用^{tt5}可以很容易地更改$ 类构造函数的参数,例如:
>>>fromsklearn.treeimportDecisionTreeClassifier>>>clf=SmartSVM(binary_clf=DecisionTreeClassifier)>>>clf.fit(X,y)>>>clf._get_binary()DecisionTreeClassifier(class_weight=None,criterion='gini',max_depth=None,max_features=None,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,presort=False,random_state=None,splitter='best')
您可以选择通过 clf_params参数。这应该是一个带有 二进制分类器,如下所示:
>>>clf=SmartSVM(binary_clf=DecisionTreeClassifier,clf_params={'criterion':'entropy'})>>>clf.fit(X,y)>>>clf._get_binary()DecisionTreeClassifier(class_weight=None,criterion='entropy',max_depth=None,max_features=None,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,presort=False,random_state=None,splitter='best')
最后,如果 底层分类器支持predict_proba方法:
>>>fromsklearn.svmimportSVC>>>clf=SmartSVM(binary_clf=SVC,clf_params={"probabilities":True})>>>clf.fit(X,y)>>>prob=clf.predict_proba(X)>>>importpandasaspd>>>df=pd.DataFrame(prob)>>>df012...09.999997e-011.716831e-182.677824e-13...11.000000e-079.956408e-011.035589e-09...22.595652e-051.452011e-029.722321e-01...
有关SmartSVM参数的更多信息,请参阅API文档 here。
已知限制
bayes误差率的henze-penrose估计是基于构造的 欧氏最小生成树。当前的算法 smartsvm包使用了Whitney’s algorithm的改编。这不是最快的方法 构造最小生成树。而Fast Euclidean Minimal Spanning Tree algorithm by March et al.则是 一个更快的选择,但这使得构造正交mst更加困难。 将此算法合并到smartsvm包中被认为是一个主题 为了将来的工作。
参考文献
此软件包的主要参考资料是:
henze-penrose估计的理论发展于: