我使用两种方法得到了矛盾的结果,而在我看来这两种方法应该产生相同的结果。能否有人指出其中的差异,因为我实在是搞不明白 :S
我正在处理Drexel_Stats.arff文件。我使用了1-NN分类器并进行了10折交叉验证。在没有任何预处理的情况下,我得到了以下混淆矩阵:
a b <-- classified as 14 3 | a = Win 5 1 | b = Loss
为了获得更好的结果,我使用了:
weka.attributeSelection.InfoGainAttributeEval weka.attributeSelection.Ranker -T -1.0 -N 5
来获取数据集中最具区分性的5个特征。然后我手动删除了所有其他特征,并重新运行了我的1-NN分类器,得到的结果如下:
a b <-- classified as 16 1 | a = Win 1 5 | b = Loss
现在事情变得令人困惑了(至少对我来说是这样)。我尝试使用元过滤分类器来避免手动删除特征的麻烦。这是我的使用方法(从GUI中复制):
weka.classifiers.meta.FilteredClassifier-F "weka.filters.supervised.attribute.AttributeSelection-E \"weka.attributeSelection.InfoGainAttributeEval \"-S \"weka.attributeSelection.Ranker -T -1.0 -N 5\""-W weka.classifiers.lazy.IB1 -D
我理解这是对之前操作的自动化,但实际上这次得到的结果却不同:
a b <-- classified as 15 2 | a = Win 4 2 | b = Loss
我哪里做错了?
谢谢
编辑: 这是WEKA输出的部分内容:
=== Attribute Selection on all input data ===Search Method: Attribute ranking.Attribute Evaluator (supervised, Class (nominal): 39 Outcome): Information Gain Ranking FilterRanked attributes: 0.828 1 Opponent 0.469 38 Opp_Steals 0.42 24 Opp_Field_Goal_Pct 0.331 15 Def_Rebounds 0.306 28 Opp_Free_Throws_MadeSelected attributes: 1,38,24,15,28 : 5Header of reduced data:@relation 'Basketball_Statistics-weka.filters.unsupervised.attribute.Remove-V-R1,38,24,15,28,39'@attribute Opponent {Florida_Gulf_Coast,Vermont,Penn,Rider,Toledo,Saint_Joseph,Fairleigh_Dickinson,Villanova,Syracuse,Temple,George_Mason,Georgia_State,UNC_Wilmington,James_Madison,Hofstra,Old_Dominion,Northeastern,Delaware,VCU,Towson}@attribute Opp_Steals numeric@attribute Opp_Field_Goal_Pct numeric@attribute Def_Rebounds numeric@attribute Opp_Free_Throws_Made numeric@attribute Outcome {Win,Loss}@data
这些特征在交叉验证的每一折中都是相同的吗?根据实例的分割,选择的特征可能会不同吗?
回答:
你第一次(全局)的特征选择使用了所有数据点,包括所有标签,即它可以访问在交叉验证期间你无法访问的类信息。因此,你的第一种方法是有缺陷的,导致错误估计过好。你的第二种方法是正确的。它表现得较差,因为在十次运行的交叉验证中,它很可能不会为每次选择相同的五个特征。希望对你有帮助 Bernhard