使用橙色python库进行交叉验证

时间:2016-12-07 09:51:02

标签: python cross-validation orange discretization

我尝试用python包“Orange”进行交叉验证。 这个库看起来很不错,但我遇到了一些问题。

对于版本信息,我使用Python 2.7和Orange 2.7.8。 我的任务很简单。 我想通过交叉验证验证模型,(1)数值属性的离散化和(2)特征选择。

如您所知,在交叉验证循环中处理离散化和特征选择非常重要。换句话说,对于每个交叉验证循环,(1)仅对训练数据进行离散化,并对测试数据使用相同的分级切割,以及(2)从训练数据中获取重要特征,并将这些特征用于测试数据。

在研究了Orange之后,我编写了以下脚本。

import Orange, orange, orngDisc, orngTest, orngStat, orngFSS

data = Orange.data.Table("test.tab") # has numeric, discrete features

nb = Orange.classification.bayes.NaiveLearner()
dBayes = orngDisc.DiscretizedLearner(nb, method=Orange.feature.discretization.Entropy(), name="disc nb")

# feature selection (three important features based on information gain)
fss = orngFSS.FilterBestN(n=3, measure=Orange.feature.scoring.InfoGain())
fBayes = orngFSS.FilteredLearner(dBayes, filter=fss, name="nb & fss")

learners = [nb, dBayes, fBayes]
results = orngTest.crossValidation(learners, data, folds=10, storeClassifiers=1, storeExamples=1)

# print accuracy for the three models (no errors in this block!)
print "\nLearner         Accuracy  #Atts"
for i in range(len(learners)):
  print "%-15s %5.3f     %5.2f" % (learners[i].name, orngStat.CA(results)[i], natt[i])

简而言之,数据集(代码中的“数据”)包含数字和离散特征,我想进行离散化(基于熵),然后在交叉验证过程中进行特征选择(基于信息增益的前3个特征)

但是,错误表示在计算数字要素的信息增益时发生错误。我认为在离散化之前处理特征选择。 我认为有一些小的修改是必要的,但是在网上的Orange上没有足够的例子......而且我对修改没有明显的想法。

你能给我一些修改点吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

我担心您无法使用orngFSS.FilterBestN(n=3, measure=Orange.feature.scoring.InfoGain())因为某些功能是连续的。方法" feature.scoring.InfoGain"将检查功能是否是离散的,参考here

我有两点建议:

  1. 使用分类树作为学习方法,并选择树中的前三个功能。如果该特征是连续的,则经典树将使用诸如" A>之类的判别式。 0.1"使功能离散。
  2. 手动使功能离散。例如,如果年龄是一项功能,则将其标记为“D' D'和Orange将该功能视为离散的。我认为它会起作用