此处用的是Dekang Lin的实现代码:
命令行的格式为USAGE: testme MODEL TRAIN < TEST
参数1:模型配置文件,以zoo.model为例。
0.10 5
7c1 c2 c3 c4 c5 c6 c7
第一行的有三列,数值分别为0.1, 0, 5, 表示alpha , threshold, maxIterations。
第二行第一列的数字7表示有7个tag,后面分别表示着7个tag的值。
参数2:训练文件,以zoo.train为例。
c1f21 f30 f40 f51 f60 f70 f81 f91 f101 f111 f120 f130 f144 f150 f160 f171
c1f21 f30 f40 f51 f60 f70 f80 f91 f101 f111 f120 f130 f144 f151 f160 f171
c4f20 f30 f41 f50 f60 f71 f81 f91 f101 f110 f120 f131 f140 f151 f160 f170
c1f21 f30 f40 f51 f60 f70 f81 f91 f101 f111 f120 f130 f144 f150 f160 f171
c1f21 f30 f40 f51 f60 f70 f81 f91 f101 f111 f120 f130 f144 f151 f160 f171
c1f21 f30 f40 f51 f60 f70 f80 f91 f101 f111 f120 f130 f144 f151 f160 f171
c1f21 f30 f40 f51 f60 f70 f80 f91 f101 f111 f120 f130 f144 f151 f161 f171
c4f20 f30 f41 f50 f60 f71 f80 f91 f101 f110 f120 f131 f140 f151 f161 f170
c4f20 f30 f41 f50 f60 f71 f81 f91 f101 f110 f120 f131 f140 f151 f160 f170
c1f21 f30 f40 f51 f60 f70 f80 f91 f101 f111 f120 f130 f144 f150 f161 f170
c1f21 f30 f40 f51 f60 f70 f81 f91 f101 f111 f120 f130 f144 f151 f160 f171
c2f20 f31 f41 f50 f61 f70 f80 f90 f101 f111 f120 f130 f142 f151 f161 f170
c4f20 f30 f41 f50 f60 f71 f81 f91 f101 f110 f120 f131 f140 f151 f160 f170
c7f20 f30 f41 f50 f60 f70 f81 f90 f100 f110 f120 f130 f140 f150 f160 f170
c7f20 f30 f41 f50 f60 f71 f81 f90 f100 f110 f120 f130 f144 f150 f160 f170
c7f20 f30 f41 f50 f60 f71 f81 f90 f100 f110 f120 f130 f146 f150 f160 f170
c2f20 f31 f41 f50 f61 f70 f81 f90 f101 f111 f120 f130 f142 f151 f160 f170
c1f21 f30 f40 f51 f60 f70 f80 f91 f101 f111 f120 f130 f144 f151 f160 f171
c4f20 f30 f41 f50 f60 f71 f81 f91 f101 f110 f120 f131 f140 f151 f160 f171
c1f20 f30 f40 f51 f60 f71 f81 f91 f101 f111 f120 f131 f140 f151 f160 f171
c2f20 f31 f41 f50 f61 f70 f80 f90 f101 f111 f120 f130 f142 f151 f161 f170
c2f20 f31 f41 f50 f61 f71 f80 f90 f101 f111 f120 f130 f142 f151 f160 f170
c1f21 f30 f40 f51 f60 f70 f80 f91 f101 f111 f120 f130 f144 f151 f160 f171
c2f20 f31 f41 f50 f61 f70 f80 f90 f101 f111 f120 f130 f142 f151 f160 f171
c6f20 f30 f41 f50 f60 f70 f80 f90 f100 f111 f120 f130 f146 f150 f160 f170
c5f20 f30 f41 f50 f60 f71 f81 f91 f101 f111 f120 f130 f144 f150 f160 f170
c5f20 f30 f41 f50 f60 f71 f81 f91 f101 f111 f121 f130 f144 f150 f160 f170
训练文件很容易看懂,跟其他的分类器训练文件的格式相同。
测试文件为zoo.test。数据如下:
c3f20 f30 f41 f50 f60 f70 f81 f91 f101 f111 f120 f130 f140 f151 f160 f170
c7f20 f30 f41 f50 f60 f70 f80 f90 f100 f111 f120 f130 f140 f150 f160 f170
c4f20 f30 f41 f50 f60 f71 f80 f91 f101 f110 f120 f131 f140 f151 f160 f170
c2f20 f31 f41 f50 f61 f70 f80 f90 f101 f111 f120 f130 f142 f151 f160 f170
c1f21 f30 f40 f51 f60 f70 f80 f91 f101 f111 f120 f130 f142 f151 f160 f170
训练后的模型文件数据格式为:以7(7为tag的数量)行为单位,为每个特征(feature)和每个trag的lambda值。总的行数除以7等于特征(feature)的数量。
lambda(c1,f21)=0.277537
lambda(c2,f21)=0
lambda(c3,f21)=0
lambda(c4,f21)=0
lambda(c5,f21)=0
lambda(c6,f21)=0
lambda(c7,f21)=0
lambda(c1,f30)=0.160808
lambda(c2,f30)=0
lambda(c3,f30)=0
lambda(c4,f30)=0.085728
lambda(c5,f30)=0.0129319
lambda(c6,f30)=0
lambda(c7,f30)=0.0373493
lambda(c1,f40)=0.285687
lambda(c2,f40)=0
lambda(c3,f40)=0
lambda(c4,f40)=0
lambda(c5,f40)=0
lambda(c6,f40)=0
lambda(c7,f40)=0
lambda(c1,f51)=0.285687
lambda(c2,f51)=0
lambda(c3,f51)=0
lambda(c4,f51)=0
lambda(c5,f51)=0
lambda(c6,f51)=0
lambda(c7,f51)=0
lambda(c1,f60)=0.160808
lambda(c2,f60)=0
lambda(c3,f60)=0
lambda(c4,f60)=0.085728
lambda(c5,f60)=0.0129319
lambda(c6,f60)=0
lambda(c7,f60)=0.0373493
lambda(c1,f70)=0.199835
lambda(c2,f70)=0.113958
lambda(c3,f70)=0
lambda(c4,f70)=0
lambda(c5,f70)=0
lambda(c6,f70)=0.00735244
lambda(c7,f70)=0
lambda(c1,f81)=0.0787015
lambda(c2,f81)=0
lambda(c3,f81)=0
lambda(c4,f81)=0.101876
lambda(c5,f81)=0.0799012
lambda(c6,f81)=0
lambda(c7,f81)=0.125868
lambda(c1,f91)=0.197843
lambda(c2,f91)=0
lambda(c3,f91)=0
lambda(c4,f91)=0.148178
lambda(c5,f91)=0.0606241
lambda(c6,f91)=0
lambda(c7,f91)=0
lambda(c1,f101)=0.1531
lambda(c2,f101)=0.0840857
lambda(c3,f101)=0
lambda(c4,f101)=0.0884363
lambda(c5,f101)=0.0161881
lambda(c6,f101)=0
lambda(c7,f101)=0
lambda(c1,f111)=0.188289
lambda(c2,f111)=0.127382
lambda(c3,f111)=0
lambda(c4,f111)=0
lambda(c5,f111)=0.0539811
lambda(c6,f111)=0
lambda(c7,f111)=0
lambda(c1,f120)=0.130759
lambda(c2,f120)=0.0472869
lambda(c3,f120)=0
lambda(c4,f120)=0.0484933
lambda(c5,f120)=0
lambda(c6,f120)=0
lambda(c7,f120)=0.0053166
lambda(c1,f130)=0.146261
lambda(c2,f130)=0.0981419
lambda(c3,f130)=0
lambda(c4,f130)=0
lambda(c5,f130)=0.0278883
lambda(c6,f130)=0
lambda(c7,f130)=0.054843
lambda(c1,f144)=0.229922
lambda(c2,f144)=0
lambda(c3,f144)=0
lambda(c4,f144)=0
lambda(c5,f144)=0.143334
lambda(c6,f144)=0
lambda(c7,f144)=0
lambda(c1,f150)=0.0628279
lambda(c2,f150)=0
lambda(c3,f150)=0
lambda(c4,f150)=0
lambda(c5,f150)=0.211791
lambda(c6,f150)=0.0514771
lambda(c7,f150)=0.241189
lambda(c1,f160)=0.119261
lambda(c2,f160)=0
lambda(c3,f160)=0
lambda(c4,f160)=0.0224336
lambda(c5,f160)=0.0119663
lambda(c6,f160)=0
lambda(c7,f160)=0.0322028
lambda(c1,f171)=0.252457
lambda(c2,f171)=0
lambda(c3,f171)=0
lambda(c4,f171)=0
lambda(c5,f171)=0
lambda(c6,f171)=0
lambda(c7,f171)=0
lambda(c1,f80)=0.156366
lambda(c2,f80)=0.165327
lambda(c3,f80)=0
lambda(c4,f80)=0
lambda(c5,f80)=0
lambda(c6,f80)=0.03888
lambda(c7,f80)=0
lambda(c1,f151)=0.141626
lambda(c2,f151)=0.139117
lambda(c3,f151)=0
lambda(c4,f151)=0.15056
lambda(c5,f151)=0
lambda(c6,f151)=0
lambda(c7,f151)=0
lambda(c1,f20)=0
lambda(c2,f20)=0.128111
lambda(c3,f20)=0
lambda(c4,f20)=0.123551
lambda(c5,f20)=0.046964
lambda(c6,f20)=0
lambda(c7,f20)=0.0717097
lambda(c1,f41)=0
lambda(c2,f41)=0.13954
lambda(c3,f41)=0
lambda(c4,f41)=0.143177
lambda(c5,f41)=0.0607272
lambda(c6,f41)=0
lambda(c7,f41)=0.0855619
lambda(c1,f50)=0
lambda(c2,f50)=0.13954
lambda(c3,f50)=0
lambda(c4,f50)=0.143177
lambda(c5,f50)=0.0607272
lambda(c6,f50)=0
lambda(c7,f50)=0.0855619
lambda(c1,f71)=0
lambda(c2,f71)=0
lambda(c3,f71)=0
lambda(c4,f71)=0.215911
lambda(c5,f71)=0.153335
lambda(c6,f71)=0
lambda(c7,f71)=0.073583
lambda(c1,f110)=0
lambda(c2,f110)=0
lambda(c3,f110)=0
lambda(c4,f110)=0.289101
lambda(c5,f110)=0
lambda(c6,f110)=0
lambda(c7,f110)=0.271602
lambda(c1,f131)=0
lambda(c2,f131)=0
lambda(c3,f131)=0
lambda(c4,f131)=0.351465
lambda(c5,f131)=0
lambda(c6,f131)=0
lambda(c7,f131)=0
lambda(c1,f140)=0
lambda(c2,f140)=0
lambda(c3,f140)=0
lambda(c4,f140)=0.315972
lambda(c5,f140)=0
lambda(c6,f140)=0
lambda(c7,f140)=0.0080449
lambda(c1,f170)=0
lambda(c2,f170)=0.0994497
lambda(c3,f170)=0
lambda(c4,f170)=0.10216
lambda(c5,f170)=0.0750253
lambda(c6,f170)=0
lambda(c7,f170)=0.104251
lambda(c1,f161)=0.114521
lambda(c2,f161)=0.179967
lambda(c3,f161)=0
lambda(c4,f161)=0.0632252
lambda(c5,f161)=0
lambda(c6,f161)=0
lambda(c7,f161)=0
lambda(c1,f31)=0
lambda(c2,f31)=0.365528
lambda(c3,f31)=0
lambda(c4,f31)=0
lambda(c5,f31)=0
lambda(c6,f31)=0
lambda(c7,f31)=0
lambda(c1,f61)=0
lambda(c2,f61)=0.365528
lambda(c3,f61)=0
lambda(c4,f61)=0
lambda(c5,f61)=0
lambda(c6,f61)=0
lambda(c7,f61)=0
lambda(c1,f90)=0
lambda(c2,f90)=0.25513
lambda(c3,f90)=0
lambda(c4,f90)=0
lambda(c5,f90)=0
lambda(c6,f90)=0.0528795
lambda(c7,f90)=0.241876
lambda(c1,f142)=0
lambda(c2,f142)=0.365528
lambda(c3,f142)=0
lambda(c4,f142)=0
lambda(c5,f142)=0
lambda(c6,f142)=0
lambda(c7,f142)=0
lambda(c1,f100)=0
lambda(c2,f100)=0
lambda(c3,f100)=0
lambda(c4,f100)=0
lambda(c5,f100)=0
lambda(c6,f100)=0.23756
lambda(c7,f100)=0.411311
lambda(c1,f146)=0
lambda(c2,f146)=0
lambda(c3,f146)=0
lambda(c4,f146)=0
lambda(c5,f146)=0
lambda(c6,f146)=0.431628
lambda(c7,f146)=0.256715
lambda(c1,f121)=0
lambda(c2,f121)=0
lambda(c3,f121)=0
lambda(c4,f121)=0
lambda(c5,f121)=0.562904
lambda(c6,f121)=0
lambda(c7,f121)=0
测试数据的格式为,前半为训练显示结果,后一部分为测试结果,每行前带*号为错误的标记,rate等于错误的标记除以总的测试数据行数。
Iteration1 logProb=-52.5396
Iteration2 logProb=-37.2368
Iteration3 logProb=-30.1993
Iteration4 logProb=-25.7499
Iteration5 logProb=-22.5456
*c3 c1 0.285194 c2 0.162795 c3 0.0532969 c4 0.253496 c5 0.089
634 c6 0.0536902 c7 0.101894
c7 c1 0.200433 c2 0.198171 c3 0.0532642 c4 0.155351 c5 0.094
6512 c6 0.0785248 c7 0.219605
c4 c1 0.153828 c2 0.11648 c3 0.0453888 c4 0.459132 c5 0.075
6931 c6 0.0471883 c7 0.102289
c2 c1 0.136814 c2 0.553784 c3 0.0397705 c4 0.0904785 c5 0.056
633 c6 0.0439141 c7 0.0786059
c1 c1 0.569759 c2 0.145711 c3 0.0421548 c4 0.087625 c5 0.055
3063 c6 0.0441495 c7 0.0552938
errorrate=0.2
同样的数据,张乐最大熵的数据模型文件为:
#txt,maxent
34
f21
f30
f40
f51
f60
f70
f81
f91
f101
f111
f120
f130
f144
f150
f160
f171
f80
f151
f20
f41
f50
f71
f110
f131
f140
f170
f161
f31
f61
f90
f142
f100
f146
f121
6
c1
c4
c2
c7
c6
c5
10
50 1 3 4 5
10
10
50 1 3 4 5
40 2 3 4
50 1 2 3 5
30 1 5
40 1 2 5
40 2 4 5
60 1 2 3 4 5
50 2 3 4 5
30 3 5
40 3 4 5
60 1 2 3 4 5
30 1 2
40 1 2 4
30 1 2
60 1 2 3 4 5
51 2 3 4 5
51 2 3 4 5
50 1 2 3 5
21 3
20 1
30 1 3
60 1 2 3 4 5
30 1 2
12
12
32 3 4
12
23 4
23 4
15
115
0.44193449550393193
0.28747380544262063
0.072240466426972072
0.021106503521367614
-0.15855704714333535
-0.045397586105484895
0.51815016279210202
0.51815016279210202
0.28747380544262063
0.072240466426972072
0.021106503521367614
-0.15855704714333535
-0.045397586105484895
0.30757412297351266
0.18614111398861924
-0.37032516226188394
0.43441590393375362
0.16088653864813418
0.012976841988856389
-0.63147510447844546
0.32269105148183425
0.23151343579175687
0.35186448703960244
0.31065656413776704
0.29561989388544518
0.2688475800853608
0.15355447489924975
0.16915950637029684
0.071718222471034362
0.34325026414730314
0.24753901374378259
0.2749370462687879
0.35339528531044995
0.22720269659903372
-0.018302839226478823
0.027049403586376405
-0.11260740940209919
-0.40994238942255506
-0.88884788526508229
0.21148618569136216
0.16685817613326021
0.20775494567991742
-0.18212341935424081
0.13965366431983095
0.35838154413166012
-0.11450805178335834
0.64577307793058314
0.13368838862875879
0.61913483098125521
0.49031985557116775
0.65011910317817123
0.18179519243943534
-0.14805850308357626
-0.097781048331686091
-0.020158227958478422
-0.19229157959918455
-0.040679058952031645
0.41480336652953775
-0.40223659091349484
-0.24638959349077308
0.25610320094413264
-0.27518744891518554
0.24800103011209607
0.74006205049233786
0.24161587132129506
0.36826856203189234
0.30887070595486388
-0.88177243395233829
0.092951388767138585
0.19979478871168438
0.012100564249099673
-0.11044270713771454
0.093018507399484834
0.21670640990018719
0.22355442355155131
0.06170781423156943
-0.046253720108994839
0.16922014353976467
0.21670640990018719
0.22355442355155131
0.06170781423156943
-0.046253720108994839
0.16922014353976467
-0.350002448012526
0.33780642216231621
-0.53310653638854344
-0.032210125967348242
0.43210958457341603
0.60895528322811632
0.7302119397290654
0.28248380398377215
0.7373171921300945
0.13562095006575078
0.61738900009790332
-0.086916393505105827
-0.84063184719464801
0.047172917241443721
0.090418500595002713
0.14158688805639236
0.00037967648955599331
0.21026768056566164
0.34533679065067507
0.32705505959219233
0.2086210333276767
0.73877116296162271
0.73877116296162271
0.48135805884130362
0.67284044475785965
0.43097408961580602
0.73877116296162271
1.049549947184033
1.021523623295107
0.39456397934694548
1.6293650975391127
1.158483121176749
测试显示的结果为:
Accuracy:80% (4/5)
c4
c7
c4
c2
c1
总结:张乐的最大熵工具包,功能齐全,但是实现复杂,不便于学习爱。DeKang Lin的实现代码量很小,可以通过学习此源代码的实现,透彻的理解最大熵的实现过程。