4 void node2vec(
PWNet& InNet,
const double& ParamP,
const double& ParamQ,
5 const int& Dimensions,
const int& WalkLen,
const int& NumWalks,
6 const int& WinSize,
const int& Iter,
const bool& Verbose,
12 for (
TWNet::TNodeI NI = InNet->BegNI(); NI < InNet->EndNI(); NI++) {
13 NIdsV.
Add(NI.GetId());
20 for (
int64 i = 0; i < NumWalks; i++) {
22 #pragma omp parallel for schedule(dynamic)
23 for (
int64 j = 0; j < NIdsV.
Len(); j++) {
24 if ( Verbose && WalksDone%10000 == 0 ) {
25 printf(
"\rWalking Progress: %.2lf%%",(
double)WalksDone*100/(
double)AllWalks);fflush(stdout);
29 for (
int64 k = 0; k < WalkV.
Len(); k++) {
30 WalksVV.
PutXY(i*NIdsV.
Len()+j, k, WalkV[k]);
41 LearnEmbeddings(WalksVV, Dimensions, WinSize, Iter, Verbose, EmbeddingsHV);
46 const int& Dimensions,
const int& WalkLen,
const int& NumWalks,
47 const int& WinSize,
const int& Iter,
const bool& Verbose,
51 node2vec(InNet, ParamP, ParamQ, Dimensions, WalkLen, NumWalks, WinSize,
52 Iter, Verbose, OutputWalks, WalksVV, EmbeddingsHV);
57 const int& Dimensions,
const int& WalkLen,
const int& NumWalks,
58 const int& WinSize,
const int& Iter,
const bool& Verbose,
63 if (!NewNet->IsNode(EI.GetSrcNId())) { NewNet->AddNode(EI.GetSrcNId()); }
64 if (!NewNet->IsNode(EI.GetDstNId())) { NewNet->AddNode(EI.GetDstNId()); }
65 NewNet->AddEdge(EI.GetSrcNId(), EI.GetDstNId(), 1.0);
67 node2vec(NewNet, ParamP, ParamQ, Dimensions, WalkLen, NumWalks, WinSize, Iter,
68 Verbose, OutputWalks, WalksVV, EmbeddingsHV);
72 const int& Dimensions,
const int& WalkLen,
const int& NumWalks,
73 const int& WinSize,
const int& Iter,
const bool& Verbose,
77 node2vec(InNet, ParamP, ParamQ, Dimensions, WalkLen, NumWalks, WinSize,
78 Iter, Verbose, OutputWalks, WalksVV, EmbeddingsHV);
82 const int& Dimensions,
const int& WalkLen,
const int& NumWalks,
83 const int& WinSize,
const int& Iter,
const bool& Verbose,
88 if (!NewNet->IsNode(EI.GetSrcNId())) { NewNet->AddNode(EI.GetSrcNId()); }
89 if (!NewNet->IsNode(EI.GetDstNId())) { NewNet->AddNode(EI.GetDstNId()); }
90 NewNet->AddEdge(EI.GetSrcNId(), EI.GetDstNId(), InNet->GetFltAttrDatE(EI,
"weight"));
92 node2vec(NewNet, ParamP, ParamQ, Dimensions, WalkLen, NumWalks, WinSize, Iter,
93 Verbose, OutputWalks, WalksVV, EmbeddingsHV);
97 const int& Dimensions,
const int& WalkLen,
const int& NumWalks,
98 const int& WinSize,
const int& Iter,
const bool& Verbose,
101 bool OutputWalks = 0;
102 node2vec(InNet, ParamP, ParamQ, Dimensions, WalkLen, NumWalks, WinSize,
103 Iter, Verbose, OutputWalks, WalksVV, EmbeddingsHV);
TEdgeI EndEI() const
Returns an iterator referring to the past-the-end edge in the graph.
TSizeTy Len() const
Returns the number of elements in the vector.
TEdgeI BegEI() const
Returns an iterator referring to the first edge in the graph.
void LearnEmbeddings(TVVec< TInt, int64 > &WalksVV, const int &Dimensions, const int &WinSize, const int &Iter, const bool &Verbose, TIntFltVH &EmbeddingsHV)
Learns embeddings using SGD, Skip-gram with negative sampling.
Edge iterator. Only forward iteration (operator++) is supported.
Node iterator. Only forward iteration (operator++) is supported.
void SimulateWalk(PWNet &InNet, int64 StartNId, const int &WalkLen, TRnd &Rnd, TIntV &WalkV)
Simulates one walk and writes it into Walk vector.
Edge iterator. Only forward iteration (operator++) is supported.
void PutXY(const TSizeTy &X, const TSizeTy &Y, const TVal &Val)
void Shuffle(TRnd &Rnd)
Randomly shuffles the elements of the vector.
void PreprocessTransitionProbs(PWNet &InNet, const double &ParamP, const double &ParamQ, const bool &Verbose)
Preprocesses transition probabilities for random walks. Has to be called once before SimulateWalk cal...
void node2vec(PWNet &InNet, const double &ParamP, const double &ParamQ, const int &Dimensions, const int &WalkLen, const int &NumWalks, const int &WinSize, const int &Iter, const bool &Verbose, const bool &OutputWalks, TVVec< TInt, int64 > &WalksVV, TIntFltVH &EmbeddingsHV)
Calculates node2vec feature representation for nodes and writes them into EmbeddinsHV, see http://arxiv.org/pdf/1607.00653v1.pdf.
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.