main.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package main
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "os"
  6. )
  7. const (
  8. Node int = 2708
  9. Edge int = 5429
  10. Labeled float64 = 0.05
  11. )
  12. var (
  13. labelName = []string{
  14. "Case_Based",
  15. "Genetic_Algorithms",
  16. "Neural_Networks",
  17. "Probabilistic_Methods",
  18. "Reinforcement_Learning",
  19. "Rule_Learning",
  20. "Theory",
  21. }
  22. nodeId = make([]int, 0)
  23. )
  24. func main() {
  25. file, err := os.Open("cora/cora.content")
  26. if err != nil {
  27. panic(err)
  28. }
  29. G := MakeGraph()
  30. for i := 0; i < Node; i++ {
  31. if i%100 == 0 {
  32. fmt.Println("reading node", i)
  33. }
  34. var u int
  35. fmt.Fscan(file, &u)
  36. V := MakeVector(Input)
  37. for j := 0; j < Input; j++ {
  38. fmt.Fscan(file, &V[j])
  39. }
  40. var label string
  41. fmt.Fscan(file, &label)
  42. for j := 0; j < Output; j++ {
  43. if labelName[j] == label {
  44. if rand.Float64() < Labeled {
  45. G.AddNode(u, V, j)
  46. nodeId = append(nodeId, u)
  47. } else {
  48. G.AddNode(u, V, j+Output)
  49. }
  50. break
  51. }
  52. }
  53. }
  54. file.Close()
  55. file, err = os.Open("cora/cora.cites")
  56. if err != nil {
  57. panic(err)
  58. }
  59. for i := 0; i < Edge; i++ {
  60. var u, v int
  61. fmt.Fscan(file, &u, &v)
  62. G.AddEdge(v, u)
  63. }
  64. file.Close()
  65. l := Train(G)
  66. cnt1, cnt2 := 0, 0
  67. for u := range G.X {
  68. GetEmbedding(G, u, 2, l, false)
  69. id, _ := l[2].E[0].Max()
  70. fmt.Println(u, id)
  71. if G.L[u] == id {
  72. cnt1++
  73. }
  74. if G.L[u] == id+Output {
  75. cnt2++
  76. }
  77. }
  78. fmt.Println(cnt1, "/", len(nodeId), ",", cnt2, "/", Node-len(nodeId))
  79. fmt.Println(100.*cnt1/len(nodeId), ",", 100.*cnt2/(Node-len(nodeId)))
  80. }