In [1]:
import sys
sys.path.append('../src/mane/prototype/')
import numpy as np
import graph as g
import pickle as p

from sklearn.preprocessing import normalize, scale
from sklearn.metrics import f1_score
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import LinearSVC
from sklearn.linear_model import LogisticRegression

In [2]:
def svc_embeddings(exp_id, graph_name, portition=0.5):
    weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
    graphfile = '../src/mane/data/' + graph_name
    with open(weightfile, 'rb') as f:
        w = p.load(f)
    graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
    e_norm = normalize(w[0])
    xids, y_train = graph.gen_community(portition)
    X = [e_norm[i] for i in xids]
    predictor = OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y_train)
    y_true = [graph._communities[i] for i in graph.nodes()]
    y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
    print('Experiment ', exp_id, ' ', graph_name)
    print('f1_macro (emb): ', f1_score(y_true, y_pred, average='macro'))
    print('f1_micro (emb): ', f1_score(y_true, y_pred, average='micro'))
    
def svc_average(exp_id, graph_name, portition=0.5):
    weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
    graphfile = '../src/mane/data/' + graph_name
    with open(weightfile, 'rb') as f:
        w = p.load(f)
    graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
    e_norm = normalize((w[0]+w[1])/2)
    xids, y_train = graph.gen_community(portition)
    X = [e_norm[i] for i in xids]
    predictor = OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y_train)
    y_true = [graph._communities[i] for i in graph.nodes()]
    y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
    print('Experiment ', exp_id, ' ', graph_name)
    print('f1_macro (avg): ', f1_score(y_true, y_pred, average='macro'))
    print('f1_micro (avg): ', f1_score(y_true, y_pred, average='micro'))

def svc_all(exp_id, graph_name, portition=0.5):
    weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
    graphfile = '../src/mane/data/' + graph_name
    with open(weightfile, 'rb') as f:
        w = p.load(f)
    graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
    e_norm = normalize(w[0]+w[1]+w[2])
    xids, y_train = graph.gen_community(portition)
    X = [e_norm[i] for i in xids]
    predictor = OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y_train)
    y_true = [graph._communities[i] for i in graph.nodes()]
    y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
    print('Experiment ', exp_id, ' ', graph_name)
    print('f1_macro (all): ', f1_score(y_true, y_pred, average='macro'))
    print('f1_micro (all): ', f1_score(y_true, y_pred, average='micro'))

In [3]:
def lg_embeddings(exp_id, graph_name, portition=0.5, max_iter=1000):
    weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
    graphfile = '../src/mane/data/' + graph_name
    with open(weightfile, 'rb') as f:
        w = p.load(f)
    graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
    e_norm = normalize(w[0])
    xids, y_train = graph.gen_community(portition)
    X = [e_norm[i] for i in xids]
    predictor = LogisticRegression(max_iter=max_iter, n_jobs=2).fit(X, y_train)
    y_true = [graph._communities[i] for i in graph.nodes()]
    y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
    print('Experiment ', exp_id, ' ', graph_name)
    print('f1_macro (emb): ', f1_score(y_true, y_pred, average='macro'))
    print('f1_micro (emb): ', f1_score(y_true, y_pred, average='micro'))
    
def lg_nce(exp_id, graph_name, portition=0.5, max_iter=1000):
    weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
    graphfile = '../src/mane/data/' + graph_name
    with open(weightfile, 'rb') as f:
        w = p.load(f)
    graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
    e_norm = normalize(w[2])
    xids, y_train = graph.gen_community(portition)
    X = [e_norm[i] for i in xids]
    predictor = LogisticRegression(max_iter=max_iter, n_jobs=2).fit(X, y_train)
    y_true = [graph._communities[i] for i in graph.nodes()]
    y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
    print('Experiment ', exp_id, ' ', graph_name)
    print('f1_macro (emb): ', f1_score(y_true, y_pred, average='macro'))
    print('f1_micro (emb): ', f1_score(y_true, y_pred, average='micro'))
    
def lg_average(exp_id, graph_name, portition=0.5, max_iter=1000):
    weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
    graphfile = '../src/mane/data/' + graph_name
    with open(weightfile, 'rb') as f:
        w = p.load(f)
    graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
    e_norm = normalize((w[0]+w[1])/2)
    xids, y_train = graph.gen_community(portition)
    X = [e_norm[i] for i in xids]
    predictor = LogisticRegression(max_iter=max_iter, n_jobs=2).fit(X, y_train)
    y_true = [graph._communities[i] for i in graph.nodes()]
    y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
    print('Experiment ', exp_id, ' ', graph_name)
    print('f1_macro (avg): ', f1_score(y_true, y_pred, average='macro'))
    print('f1_micro (avg): ', f1_score(y_true, y_pred, average='micro'))
    
def lg_all(exp_id, graph_name, portition=0.5, max_iter=1000):
    weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
    graphfile = '../src/mane/data/' + graph_name
    with open(weightfile, 'rb') as f:
        w = p.load(f)
    graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
    e_norm = normalize(w[0]+w[1]+w[2])
    xids, y_train = graph.gen_community(portition)
    X = [e_norm[i] for i in xids]
    predictor = LogisticRegression(max_iter=max_iter, n_jobs=2).fit(X, y_train)
    y_true = [graph._communities[i] for i in graph.nodes()]
    y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
    print('Experiment ', exp_id, ' ', graph_name)
    print('f1_macro (avg): ', f1_score(y_true, y_pred, average='macro'))
    print('f1_micro (avg): ', f1_score(y_true, y_pred, average='micro'))

In [17]:
svc_all('BC3014', 'blogcatalog3')


f1_macro (all):  0.0946316840644
f1_micro (all):  0.120927075252

In [30]:
lg_embeddings('BC3014', 'blogcatalog3', max_iter=1000000)


f1_macro (emb):  0.0269281947945
f1_micro (emb):  0.121411947246
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [42]:
lg_average('BC3001', 'blogcatalog3', portition=0.5)
lg_average('BC3002', 'blogcatalog3', portition=0.5)
lg_average('BC3003', 'blogcatalog3', portition=0.5)
lg_average('BC3004', 'blogcatalog3', portition=0.5)
lg_average('BC3005', 'blogcatalog3', portition=0.5)
lg_average('BC3006', 'blogcatalog3', portition=0.5)
lg_average('BC3007', 'blogcatalog3', portition=0.5)
lg_average('BC3008', 'blogcatalog3', portition=0.5)
lg_average('BC3009', 'blogcatalog3', portition=0.5)
lg_average('BC3010', 'blogcatalog3', portition=0.5)
lg_average('BC3011', 'blogcatalog3', portition=0.5)
lg_average('BC3012', 'blogcatalog3', portition=0.5)
lg_average('BC3013', 'blogcatalog3', portition=0.5)
lg_average('BC3014', 'blogcatalog3', portition=0.5)
lg_average('BC3015', 'blogcatalog3', portition=0.5)


Experiment  BC3001   blogcatalog3
f1_macro (avg):  0.120741256524
f1_micro (avg):  0.2656128782
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)
Experiment  BC3002   blogcatalog3
f1_macro (avg):  0.123178153015
f1_micro (avg):  0.269006982157
Experiment  BC3003   blogcatalog3
f1_macro (avg):  0.114756830236
f1_micro (avg):  0.257370054306
Experiment  BC3004   blogcatalog3
f1_macro (avg):  0.108147342708
f1_micro (avg):  0.250969743988
Experiment  BC3005   blogcatalog3
f1_macro (avg):  0.0295066525118
f1_micro (avg):  0.117920868891
Experiment  BC3006   blogcatalog3
f1_macro (avg):  0.0598227858022
f1_micro (avg):  0.181730023274
Experiment  BC3007   blogcatalog3
f1_macro (avg):  0.0843716419659
f1_micro (avg):  0.225271528317
Experiment  BC3008   blogcatalog3
f1_macro (avg):  0.0729542710343
f1_micro (avg):  0.200737005431
Experiment  BC3009   blogcatalog3
f1_macro (avg):  0.0855055982381
f1_micro (avg):  0.222944142746
Experiment  BC3010   blogcatalog3
f1_macro (avg):  0.0914467033607
f1_micro (avg):  0.224107835531
Experiment  BC3011   blogcatalog3
f1_macro (avg):  0.0991445255452
f1_micro (avg):  0.241272304112
Experiment  BC3012   blogcatalog3
f1_macro (avg):  0.119425489689
f1_micro (avg):  0.265321955004
Experiment  BC3013   blogcatalog3
f1_macro (avg):  0.154397165779
f1_micro (avg):  0.307990690458
Experiment  BC3014   blogcatalog3
f1_macro (avg):  0.0320126973325
f1_micro (avg):  0.118890612878
Experiment  BC3015   blogcatalog3
f1_macro (avg):  0.100140854008
f1_micro (avg):  0.243890612878

In [45]:
lg_embeddings('BC3017', 'blogcatalog3', max_iter=1000)


Experiment  BC3017   blogcatalog3
f1_macro (emb):  0.0740177477011
f1_micro (emb):  0.217028704422
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [48]:
svc_embeddings('BC3017', 'blogcatalog3')
svc_average('BC3017', 'blogcatalog3')
svc_all('BC3017', 'blogcatalog3')


Experiment  BC3017   blogcatalog3
f1_macro (emb):  0.141430565099
f1_micro (emb):  0.232738557021
Experiment  BC3017   blogcatalog3
f1_macro (avg):  0.118029813235
f1_micro (avg):  0.183378588053
Experiment  BC3017   blogcatalog3
f1_macro (all):  0.0997574498978
f1_micro (all):  0.18357253685
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [49]:
lg_embeddings('BC3017', 'blogcatalog3')
lg_average('BC3017', 'blogcatalog3')
lg_all('BC3017', 'blogcatalog3')


Experiment  BC3017   blogcatalog3
f1_macro (emb):  0.0739755316051
f1_micro (emb):  0.217901474011
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)
Experiment  BC3017   blogcatalog3
f1_macro (avg):  0.0586539985843
f1_micro (avg):  0.181826997673
Experiment  BC3017   blogcatalog3
f1_macro (avg):  0.0515113628997
f1_micro (avg):  0.177560124127

In [87]:
exp_id = 'BC3018'
graph_name = 'blogcatalog3'
max_iter = 1000
portition = 0.5
weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
graphfile = '../src/mane/data/' + graph_name
with open(weightfile, 'rb') as f:
    w = p.load(f)
graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
e_norm = normalize((w[0]+w[1])/2)
xids, y_train = graph.gen_community(portition)
X = [e_norm[i] for i in xids]
predictor = LogisticRegression(max_iter=max_iter, n_jobs=2).fit(X, y_train)
y_true = [graph._communities[i] for i in graph.nodes()]
y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
print('Experiment ', exp_id, ' ', graph_name)
print('f1_macro (avg): ', f1_score(y_true, y_pred, average='macro'))
print('f1_micro (avg): ', f1_score(y_true, y_pred, average='micro'))


Experiment  BC3018   blogcatalog3
f1_macro (avg):  0.0358347269964
f1_micro (avg):  0.133145849496
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [62]:
np.dot(e_norm[0], e_norm[2])


Out[62]:
0.056121148

In [77]:
lg_nce('BC3017', 'blogcatalog3')


Experiment  BC3017   blogcatalog3
f1_macro (emb):  0.00697080884053
f1_micro (emb):  0.104926299457
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [81]:
lg_nce('BC3018', 'blogcatalog3')


Experiment  BC3018   blogcatalog3
f1_macro (emb):  0.00484540632064
f1_micro (emb):  0.104344453064
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [82]:
lg_average('BC3018', 'blogcatalog3')


Experiment  BC3018   blogcatalog3
f1_macro (avg):  0.0379183026585
f1_micro (avg):  0.136830876649
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [88]:
svc_average('BC3018', 'blogcatalog3')


Experiment  BC3018   blogcatalog3
f1_macro (avg):  0.111613353682
f1_micro (avg):  0.141582622188

In [89]:
lg_average('BC3019', 'blogcatalog3')


Experiment  BC3019   blogcatalog3
f1_macro (avg):  0.114644283468
f1_micro (avg):  0.255042668735
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [7]:
# Test embedding from node2vec

exp_id = 'BC3_node2vec'
graph_name = 'blogcatalog3'
max_iter = 1000
portition = 0.5
weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
graphfile = '../src/mane/data/' + graph_name
with open(weightfile, 'rb') as f:
    w = p.load(f)
graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
wl = np.ndarray(shape=(10313,128), dtype=np.float32)
for i in graph.nodes():
    wl[i][:] = w[i]
e_norm = normalize(wl)
xids, y_train = graph.gen_community(portition)
X = [e_norm[i] for i in xids]
#predictor = LogisticRegression(max_iter=max_iter, n_jobs=2).fit(X, y_train)
predictor = OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y_train)
y_true = [graph._communities[i] for i in graph.nodes()]
y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
print('Experiment ', exp_id, ' ', graph_name)
print('f1_macro (avg): ', f1_score(y_true, y_pred, average='macro'))
print('f1_micro (avg): ', f1_score(y_true, y_pred, average='micro'))


Experiment  BC3_node2vec   blogcatalog3
f1_macro (avg):  0.0372267615661
f1_micro (avg):  0.121217998448
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [9]:
exp_id = 'BC3019'
graph_name = 'blogcatalog3'
max_iter = 1000
portition = 0.5
weightfile = '../src/mane/prototype/embeddings/' + exp_id + '.weights'
graphfile = '../src/mane/data/' + graph_name
with open(weightfile, 'rb') as f:
    w = p.load(f)
graph = g.graph_from_pickle(graphfile+'.graph', graphfile+'.community')
e_norm = normalize((w[0]+w[1])/2)
xids, y_train = graph.gen_community(portition)
X = [e_norm[i] for i in xids]
predictor = LogisticRegression(max_iter=max_iter, n_jobs=2).fit(X, y_train)
y_true = [graph._communities[i] for i in graph.nodes()]
y_pred = [predictor.predict(e_norm[i].reshape(1,-1))[0] for i in graph.nodes()]
print('Experiment ', exp_id, ' ', graph_name)
print('f1_macro (avg): ', f1_score(y_true, y_pred, average='macro'))
print('f1_micro (avg): ', f1_score(y_true, y_pred, average='micro'))


Experiment  BC3019   blogcatalog3
f1_macro (avg):  0.115953017044
f1_micro (avg):  0.255139643134
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [16]:
svc_average('BC3019', 'blogcatalog3')


Experiment  BC3019   blogcatalog3
f1_macro (avg):  0.177792482894
f1_micro (avg):  0.263576415826
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [18]:
svc_average('BC3020', 'blogcatalog3')


Experiment  BC3020   blogcatalog3
f1_macro (avg):  0.00723476802024
f1_micro (avg):  0.105702094647
/home/hoangnt/anaconda3/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

In [ ]: