weka的java使用(3)——特征選擇
繼續weka的編程系列。數據挖掘的一個重要的過程就是要特征選擇,主要作用就是降維,并且降低計算的復雜性,摒棄那些可能的潛在噪聲。在我的paper中和碩士論文中都用到了CFS的特征子集選擇方法,配以最佳優先的搜索或者貪心搜索,這樣可以將維度比較高的訓練特征集降維并簡化,大概用CFS+Best first可以將我的訓練樣本中的145維特征降到40-50之間。具體的實現方法見下面的測試代碼(只做示范用):

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

其中的注釋部分是使用交叉驗證的部分。默認是十折交叉驗證,當然這個可以通過set方法設置。具體的使用或者用到reduce dimensionality的方法大家可以參看源代碼。畢竟weka開源很是方便。源代碼涉及到的類主要是查看weka.attributeSelection.AttributeSelection類就可以了。當然如何調用和選擇可以看看weka.gui.explorer.AttributeSelectionPanel類。
上面代碼的實驗結果如下:
result is
=== Attribute Selection on all input data ===
Search Method:
Best first.
Start set: no attributes
Search direction: forward
Stale search after 5 node expansions
Total number of subsets evaluated: 12
Merit of best subset found: 0.887
Attribute Subset Evaluator (supervised, Class (nominal): 5 class):
CFS Subset Evaluator
Including locally predictive attributes
Selected attributes: 3,4 : 2
petallength
petalwidth
old number of Attributes is 5
new number of Attributes is 2
2
3
4
原來的iris數據集中共有4個屬性(包含一個分類類標所以一共5維),經過特征選擇后,只有第3和第4兩個維度的特征保留,所以新特征子集有兩個維度(不包含類標,有點繞,不好意思,我總是這樣)。
最后的2,3,4是屬性數組的下標,表示經過特征選擇保留的屬性子集是第3,4,5個屬性。
posted on 2010-11-23 10:06 changedi 閱讀(17990) 評論(19) 編輯 收藏 所屬分類: 機器學習