使用Orange python库进行交叉验证

2024-05-14 07:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用python包“Orange”进行交叉验证。 这个图书馆看起来很漂亮,但我有点问题。在

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

这里,重要的是在交叉验证循环中处理离散化和特征选择,如您所知。换言之,对于每个交叉验证循环,(1)只对训练数据进行离散化,对测试数据使用相同的分块切割;(2)从训练数据中获取重要特征,并将这些特征用于测试数据。在

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

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个特征)。在

然而,error表示在计算数值特征的信息增益时发生了错误。我认为特征选择是在离散化之前进行的。 我认为一些小的修改是必要的,但没有太多的例子在橘子网上。。。我对修改没有什么明显的想法。在

你能给我一些修改的要点吗? 谢谢您。在


Tags: 数据namedata特征交叉feature数值print
1条回答
网友
1楼 · 发布于 2024-05-14 07:26:55

恐怕您不能使用orngFSS.FilterBestN(n=3, measure=Orange.feature.scoring.InfoGain()),因为有些功能是连续的。方法”feature.scoring.InfoGain“将检查特征是否离散,引用here。在

我有两个建议:

  1. 使用分类树作为学习方法,选择树中的前三个特征。如果特征是连续的,分类树将使用“a>;0.1”这样的判别式使特征离散。在
  2. 手动使特征离散。例如,如果年龄是一个特征,那么将其标记为“D”,橙色将认为该特征是离散的。我想会有用的

相关问题 更多 >

    热门问题