Sekarang, akan dianalisi hasil eksperimen dengan membatasi jumlah fitur, i.e. menggunakan hanya top sekian most frequent unigrams di thread tersebut, namun dengan menggunakan distance metric euclidean
.
Import tools yang dibutuhkan dan atur agar matplotlib menggambar grafik secara inline.
In [1]:
import numpy as np
import pandas as pd
%matplotlib inline
Load hasil eksperimen dan tampilkan hasilnya.
In [2]:
df = pd.read_hdf('../reports/large-exp-unigram-limited-feats.h5', 'df')
In [3]:
df
Out[3]:
num_norm
10
...
80
num_oot
1
...
8
num_top
1
3
5
...
5
result
base
perf
base
perf
base
...
base
perf
k
0
1
0
1
0
1
0
1
0
1
...
2
3
4
5
0
1
2
3
4
5
method
feature
max_features
metric
norm_dir
oot_dir
txt_comp_dist
unigram
7
euclidean
bbs152930
bbs57549
0.909091
0.090909
0.066667
0.933333
0.727273
0.272727
0.133333
0.866667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.066667
0.100000
0.833333
mus10142
0.909091
0.090909
0.033333
0.966667
0.727273
0.272727
0.100000
0.900000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
phy40008
0.909091
0.090909
0.166667
0.833333
0.727273
0.272727
0.100000
0.900000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
phy17301
bbs57549
0.909091
0.090909
0.033333
0.966667
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.000000
0.033333
0.966667
mus10142
0.909091
0.090909
0.033333
0.966667
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
phy40008
0.909091
0.090909
0.100000
0.900000
0.727273
0.272727
0.133333
0.866667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.133333
0.266667
0.333333
0.166667
0.100000
mus1139
bbs57549
0.909091
0.090909
0.133333
0.866667
0.727273
0.272727
0.133333
0.866667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.033333
0.066667
0.000000
0.200000
0.700000
mus10142
0.909091
0.090909
0.766667
0.233333
0.727273
0.272727
0.400000
0.600000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.033333
0.266667
0.233333
0.200000
0.200000
0.066667
phy40008
0.909091
0.090909
0.200000
0.800000
0.727273
0.272727
0.166667
0.833333
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.100000
0.100000
0.133333
0.233333
0.433333
20
euclidean
bbs152930
bbs57549
0.909091
0.090909
0.133333
0.866667
0.727273
0.272727
0.133333
0.866667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.133333
0.233333
0.300000
0.200000
0.133333
mus10142
0.909091
0.090909
0.066667
0.933333
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
phy40008
0.909091
0.090909
0.133333
0.866667
0.727273
0.272727
0.200000
0.800000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.100000
0.300000
0.266667
0.333333
phy17301
bbs57549
0.909091
0.090909
0.033333
0.966667
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.100000
0.200000
0.133333
0.300000
0.266667
mus10142
0.909091
0.090909
0.000000
1.000000
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.033333
0.200000
0.266667
0.266667
0.233333
phy40008
0.909091
0.090909
0.366667
0.633333
0.727273
0.272727
0.066667
0.933333
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.033333
0.433333
0.333333
0.133333
0.066667
0.000000
mus1139
bbs57549
0.909091
0.090909
0.266667
0.733333
0.727273
0.272727
0.166667
0.833333
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.066667
0.100000
0.166667
0.233333
0.200000
0.233333
mus10142
0.909091
0.090909
0.366667
0.633333
0.727273
0.272727
0.433333
0.566667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.233333
0.433333
0.100000
0.166667
0.033333
0.033333
phy40008
0.909091
0.090909
0.266667
0.733333
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.266667
0.033333
0.300000
0.233333
0.166667
0.000000
50
euclidean
bbs152930
bbs57549
0.909091
0.090909
0.166667
0.833333
0.727273
0.272727
0.066667
0.933333
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.033333
0.400000
0.500000
0.033333
0.033333
mus10142
0.909091
0.090909
0.033333
0.966667
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.300000
0.200000
0.500000
phy40008
0.909091
0.090909
0.133333
0.866667
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.033333
0.733333
0.233333
0.000000
phy17301
bbs57549
0.909091
0.090909
0.133333
0.866667
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.066667
0.133333
0.533333
0.200000
0.066667
mus10142
0.909091
0.090909
0.100000
0.900000
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.033333
0.100000
0.466667
0.233333
0.166667
phy40008
0.909091
0.090909
0.466667
0.533333
0.727273
0.272727
0.100000
0.900000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.200000
0.266667
0.433333
0.066667
0.033333
0.000000
mus1139
bbs57549
0.909091
0.090909
0.066667
0.933333
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.200000
0.400000
0.300000
0.000000
0.100000
0.000000
mus10142
0.909091
0.090909
0.400000
0.600000
0.727273
0.272727
0.533333
0.466667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.133333
0.600000
0.133333
0.100000
0.033333
0.000000
phy40008
0.909091
0.090909
0.133333
0.866667
0.727273
0.272727
0.066667
0.933333
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.266667
0.333333
0.333333
0.033333
0.033333
0.000000
100
euclidean
bbs152930
bbs57549
0.909091
0.090909
0.200000
0.800000
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.100000
0.266667
0.366667
0.266667
0.000000
mus10142
0.909091
0.090909
0.000000
1.000000
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.000000
0.100000
0.800000
0.100000
phy40008
0.909091
0.090909
0.233333
0.766667
0.727273
0.272727
0.066667
0.933333
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.133333
0.166667
0.333333
0.366667
0.000000
phy17301
bbs57549
0.909091
0.090909
0.133333
0.866667
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.033333
0.100000
0.233333
0.466667
0.166667
mus10142
0.909091
0.090909
0.000000
1.000000
0.727273
0.272727
0.000000
1.000000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.000000
0.000000
0.100000
0.333333
0.433333
0.133333
phy40008
0.909091
0.090909
0.233333
0.766667
0.727273
0.272727
0.066667
0.933333
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.133333
0.300000
0.400000
0.133333
0.033333
0.000000
mus1139
bbs57549
0.909091
0.090909
0.100000
0.900000
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.133333
0.466667
0.300000
0.100000
0.000000
0.000000
mus10142
0.909091
0.090909
0.400000
0.600000
0.727273
0.272727
0.500000
0.500000
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.166667
0.333333
0.333333
0.166667
0.000000
0.000000
phy40008
0.909091
0.090909
0.266667
0.733333
0.727273
0.272727
0.033333
0.966667
0.545455
0.454545
...
0.058722
0.004517
0.000143
0.000001
0.366667
0.300000
0.300000
0.033333
0.000000
0.000000
36 rows × 116 columns
Lakukan agregasi...
In [4]:
df_agg = df.groupby(level='max_features').mean().T.unstack(level='result')
In [5]:
df_agg
Out[5]:
max_features
7
20
50
100
result
base
perf
base
perf
base
perf
base
perf
num_norm
num_oot
num_top
k
10
1
1
0
0.909091
0.170370
0.909091
0.181481
0.909091
0.181481
0.909091
0.174074
1
0.090909
0.829630
0.090909
0.818519
0.090909
0.818519
0.090909
0.825926
3
0
0.727273
0.129630
0.727273
0.122222
0.727273
0.092593
0.727273
0.081481
1
0.272727
0.870370
0.272727
0.877778
0.272727
0.907407
0.272727
0.918519
5
0
0.545455
0.062963
0.545455
0.044444
0.545455
0.062963
0.545455
0.070370
1
0.454545
0.937037
0.454545
0.955556
0.454545
0.937037
0.454545
0.929630
4
1
0
0.714286
0.174074
0.714286
0.100000
0.714286
0.122222
0.714286
0.144444
1
0.285714
0.825926
0.285714
0.900000
0.285714
0.877778
0.285714
0.855556
3
0
0.329670
0.048148
0.329670
0.040741
0.329670
0.059259
0.329670
0.070370
1
0.494505
0.237037
0.494505
0.185185
0.494505
0.244444
0.494505
0.181481
2
0.164835
0.244444
0.164835
0.344444
0.164835
0.285185
0.164835
0.388889
3
0.010989
0.470370
0.010989
0.429630
0.010989
0.411111
0.010989
0.359259
5
0
0.125874
0.025926
0.125874
0.037037
0.125874
0.029630
0.125874
0.022222
1
0.419580
0.114815
0.419580
0.085185
0.419580
0.114815
0.419580
0.151852
2
0.359640
0.225926
0.359640
0.285185
0.359640
0.218519
0.359640
0.251852
3
0.089910
0.225926
0.089910
0.255556
0.089910
0.288889
0.089910
0.270370
4
0.004995
0.407407
0.004995
0.337037
0.004995
0.348148
0.004995
0.303704
8
1
0
0.555556
0.066667
0.555556
0.125926
0.555556
0.118519
0.555556
0.103704
1
0.444444
0.933333
0.444444
0.874074
0.444444
0.881481
0.444444
0.896296
3
0
0.147059
0.037037
0.147059
0.051852
0.147059
0.025926
0.147059
0.044444
1
0.441176
0.125926
0.441176
0.159259
0.441176
0.162963
0.441176
0.155556
2
0.343137
0.355556
0.343137
0.318519
0.343137
0.337037
0.343137
0.362963
3
0.068627
0.481481
0.068627
0.470370
0.068627
0.474074
0.068627
0.437037
5
0
0.029412
0.014815
0.029412
0.029630
0.029412
0.018519
0.029412
0.033333
1
0.196078
0.081481
0.196078
0.085185
0.196078
0.081481
0.196078
0.085185
2
0.392157
0.200000
0.392157
0.181481
0.392157
0.218519
0.392157
0.181481
3
0.294118
0.248148
0.294118
0.255556
0.294118
0.200000
0.294118
0.218519
4
0.081699
0.222222
0.081699
0.248148
0.081699
0.288889
0.081699
0.288889
5
0.006536
0.233333
0.006536
0.200000
0.006536
0.192593
0.006536
0.192593
80
1
1
0
0.987654
0.292593
0.987654
0.559259
0.987654
0.725926
0.987654
0.785185
1
0.012346
0.707407
0.012346
0.440741
0.012346
0.274074
0.012346
0.214815
3
0
0.962963
0.277778
0.962963
0.555556
0.962963
0.566667
0.962963
0.614815
1
0.037037
0.722222
0.037037
0.444444
0.037037
0.433333
0.037037
0.385185
5
0
0.938272
0.281481
0.938272
0.507407
0.938272
0.488889
0.938272
0.514815
1
0.061728
0.718519
0.061728
0.492593
0.061728
0.511111
0.061728
0.485185
4
1
0
0.952381
0.066667
0.952381
0.144444
0.952381
0.322222
0.952381
0.459259
1
0.047619
0.933333
0.047619
0.855556
0.047619
0.677778
0.047619
0.540741
3
0
0.862264
0.040741
0.862264
0.133333
0.862264
0.225926
0.862264
0.251852
1
0.132656
0.133333
0.132656
0.307407
0.132656
0.437037
0.132656
0.325926
2
0.005038
0.181481
0.005038
0.296296
0.005038
0.218519
0.005038
0.385185
3
0.000042
0.644444
0.000042
0.262963
0.000042
0.118519
0.000042
0.037037
5
0
0.778699
0.044444
0.778699
0.122222
0.778699
0.155556
0.778699
0.185185
1
0.204921
0.140741
0.204921
0.285185
0.204921
0.307407
0.204921
0.322222
2
0.015968
0.192593
0.015968
0.300000
0.015968
0.244444
0.015968
0.214815
3
0.000409
0.192593
0.000409
0.196296
0.000409
0.259259
0.000409
0.185185
4
0.000003
0.429630
0.000003
0.096296
0.000003
0.033333
0.000003
0.092593
8
1
0
0.909091
0.003704
0.909091
0.051852
0.909091
0.203704
0.909091
0.292593
1
0.090909
0.996296
0.090909
0.948148
0.090909
0.796296
0.090909
0.707407
3
0
0.748706
0.000000
0.748706
0.070370
0.748706
0.092593
0.748706
0.151852
1
0.230371
0.066667
0.230371
0.114815
0.230371
0.351852
0.230371
0.251852
2
0.020413
0.088889
0.020413
0.159259
0.020413
0.259259
0.020413
0.429630
3
0.000510
0.844444
0.000510
0.655556
0.000510
0.296296
0.000510
0.166667
5
0
0.613645
0.003704
0.613645
0.066667
0.613645
0.088889
0.613645
0.088889
1
0.322971
0.059259
0.322971
0.140741
0.322971
0.192593
0.322971
0.185185
2
0.058722
0.074074
0.058722
0.181481
0.058722
0.207407
0.058722
0.218519
3
0.004517
0.081481
0.004517
0.196296
0.004517
0.303704
0.004517
0.200000
4
0.000143
0.103704
0.000143
0.166667
0.000143
0.122222
0.000143
0.262963
5
0.000001
0.677778
0.000001
0.248148
0.000001
0.085185
0.000001
0.044444
Selanjutnya, tabel di atas akan disajikan dalam bentuk grafik. Sebelumnya, buang dulu kolom yang tidak dibutuhkan/redundan.
In [6]:
df_plot = df_agg.copy()
del df_plot[(20, 'base')]
del df_plot[(50, 'base')]
del df_plot[(100, 'base')]
In [7]:
df_plot
Out[7]:
max_features
7
20
50
100
result
base
perf
perf
perf
perf
num_norm
num_oot
num_top
k
10
1
1
0
0.909091
0.170370
0.181481
0.181481
0.174074
1
0.090909
0.829630
0.818519
0.818519
0.825926
3
0
0.727273
0.129630
0.122222
0.092593
0.081481
1
0.272727
0.870370
0.877778
0.907407
0.918519
5
0
0.545455
0.062963
0.044444
0.062963
0.070370
1
0.454545
0.937037
0.955556
0.937037
0.929630
4
1
0
0.714286
0.174074
0.100000
0.122222
0.144444
1
0.285714
0.825926
0.900000
0.877778
0.855556
3
0
0.329670
0.048148
0.040741
0.059259
0.070370
1
0.494505
0.237037
0.185185
0.244444
0.181481
2
0.164835
0.244444
0.344444
0.285185
0.388889
3
0.010989
0.470370
0.429630
0.411111
0.359259
5
0
0.125874
0.025926
0.037037
0.029630
0.022222
1
0.419580
0.114815
0.085185
0.114815
0.151852
2
0.359640
0.225926
0.285185
0.218519
0.251852
3
0.089910
0.225926
0.255556
0.288889
0.270370
4
0.004995
0.407407
0.337037
0.348148
0.303704
8
1
0
0.555556
0.066667
0.125926
0.118519
0.103704
1
0.444444
0.933333
0.874074
0.881481
0.896296
3
0
0.147059
0.037037
0.051852
0.025926
0.044444
1
0.441176
0.125926
0.159259
0.162963
0.155556
2
0.343137
0.355556
0.318519
0.337037
0.362963
3
0.068627
0.481481
0.470370
0.474074
0.437037
5
0
0.029412
0.014815
0.029630
0.018519
0.033333
1
0.196078
0.081481
0.085185
0.081481
0.085185
2
0.392157
0.200000
0.181481
0.218519
0.181481
3
0.294118
0.248148
0.255556
0.200000
0.218519
4
0.081699
0.222222
0.248148
0.288889
0.288889
5
0.006536
0.233333
0.200000
0.192593
0.192593
80
1
1
0
0.987654
0.292593
0.559259
0.725926
0.785185
1
0.012346
0.707407
0.440741
0.274074
0.214815
3
0
0.962963
0.277778
0.555556
0.566667
0.614815
1
0.037037
0.722222
0.444444
0.433333
0.385185
5
0
0.938272
0.281481
0.507407
0.488889
0.514815
1
0.061728
0.718519
0.492593
0.511111
0.485185
4
1
0
0.952381
0.066667
0.144444
0.322222
0.459259
1
0.047619
0.933333
0.855556
0.677778
0.540741
3
0
0.862264
0.040741
0.133333
0.225926
0.251852
1
0.132656
0.133333
0.307407
0.437037
0.325926
2
0.005038
0.181481
0.296296
0.218519
0.385185
3
0.000042
0.644444
0.262963
0.118519
0.037037
5
0
0.778699
0.044444
0.122222
0.155556
0.185185
1
0.204921
0.140741
0.285185
0.307407
0.322222
2
0.015968
0.192593
0.300000
0.244444
0.214815
3
0.000409
0.192593
0.196296
0.259259
0.185185
4
0.000003
0.429630
0.096296
0.033333
0.092593
8
1
0
0.909091
0.003704
0.051852
0.203704
0.292593
1
0.090909
0.996296
0.948148
0.796296
0.707407
3
0
0.748706
0.000000
0.070370
0.092593
0.151852
1
0.230371
0.066667
0.114815
0.351852
0.251852
2
0.020413
0.088889
0.159259
0.259259
0.429630
3
0.000510
0.844444
0.655556
0.296296
0.166667
5
0
0.613645
0.003704
0.066667
0.088889
0.088889
1
0.322971
0.059259
0.140741
0.192593
0.185185
2
0.058722
0.074074
0.181481
0.207407
0.218519
3
0.004517
0.081481
0.196296
0.303704
0.200000
4
0.000143
0.103704
0.166667
0.122222
0.262963
5
0.000001
0.677778
0.248148
0.085185
0.044444
Plot grafik dari tabel di atas. Pada grafik di bawah, warna biru, hijau, merah, cyan, dan ungu merepresentasikan baseline, 7 fitur, 20 fitur, 50 fitur, dan 100 fitur berturut-turut.
In [8]:
grouped = df_plot.groupby(level=['num_norm','num_oot','num_top'])
for name, group in grouped:
group.plot(kind='bar', use_index=False, legend=False, ylim=(0.,1.), title='num_norm={}, num_oot={}, num_top={}'.format(*name))
Cukup terlihat dari grafik bahwa pengurangan jumlah fitur secara umum meningkatkan performa metode, terutama jika num_norm
atau banyak normal posts besar. Agar lebih jelas, akan dihitung expected value-nya.
In [9]:
ngroup = len(grouped)
data = np.empty((ngroup, 8))
index = []
for i, (name, _) in enumerate(grouped):
df_tmp = df_agg.loc[name]
prod = df_tmp.T * np.array(df_tmp.index)
exp_val = prod.sum(axis=1)
data[i, :] = exp_val
index.append(name)
In [10]:
index = pd.MultiIndex.from_tuples(index, names=['num_norm','num_oot','num_top'])
columns = df_agg.columns.copy()
In [11]:
result = pd.DataFrame(data, index=index, columns=columns)
In [12]:
result
Out[12]:
max_features
7
20
50
100
result
base
perf
base
perf
base
perf
base
perf
num_norm
num_oot
num_top
10
1
1
0.090909
0.829630
0.090909
0.818519
0.090909
0.818519
0.090909
0.825926
3
0.272727
0.870370
0.272727
0.877778
0.272727
0.907407
0.272727
0.918519
5
0.454545
0.937037
0.454545
0.955556
0.454545
0.937037
0.454545
0.929630
4
1
0.285714
0.825926
0.285714
0.900000
0.285714
0.877778
0.285714
0.855556
3
0.857143
2.137037
0.857143
2.162963
0.857143
2.048148
0.857143
2.037037
5
1.428571
2.874074
1.428571
2.770370
1.428571
2.811111
1.428571
2.681481
8
1
0.444444
0.933333
0.444444
0.874074
0.444444
0.881481
0.444444
0.896296
3
1.333333
2.281481
1.333333
2.207407
1.333333
2.259259
1.333333
2.192593
5
2.222222
3.281481
2.222222
3.207407
2.222222
3.237037
2.222222
3.222222
80
1
1
0.012346
0.707407
0.012346
0.440741
0.012346
0.274074
0.012346
0.214815
3
0.037037
0.722222
0.037037
0.444444
0.037037
0.433333
0.037037
0.385185
5
0.061728
0.718519
0.061728
0.492593
0.061728
0.511111
0.061728
0.485185
4
1
0.047619
0.933333
0.047619
0.855556
0.047619
0.677778
0.047619
0.540741
3
0.142857
2.429630
0.142857
1.688889
0.142857
1.229630
0.142857
1.207407
5
0.238095
2.822222
0.238095
1.859259
0.238095
1.707407
0.238095
1.677778
8
1
0.090909
0.996296
0.090909
0.948148
0.090909
0.796296
0.090909
0.707407
3
0.272727
2.777778
0.272727
2.400000
0.272727
1.759259
0.272727
1.611111
5
0.454545
4.255556
0.454545
3.000000
0.454545
2.433333
0.454545
2.496296
Dari tabel di atas, terlihat sekali bahwa pengurangan jumlah fitur memang meningkatkan performa metode, khususnya untuk banyak posts yang besar. Hal ini berbeda sekali dengan hasil yang didapatkan jika menggunakan distance metric correlation
.
Content source: kemskems/otdet
Similar notebooks: