{"id":1871,"date":"2016-08-23T23:13:35","date_gmt":"2016-08-23T15:13:35","guid":{"rendered":"http:\/\/www.magicandlove.com\/blog\/?p=1871"},"modified":"2016-08-23T23:16:05","modified_gmt":"2016-08-23T15:16:05","slug":"searching-in-weka-with-processing","status":"publish","type":"post","link":"http:\/\/www.magicandlove.com\/blog\/2016\/08\/23\/searching-in-weka-with-processing\/","title":{"rendered":"Searching in Weka with Processing"},"content":{"rendered":"<p>Further to the <a href=\"http:\/\/www.magicandlove.com\/blog\/2016\/08\/23\/first-trial-of-weka-in-processing\/\">last Weka example<\/a>, I used the same CSV data file for neighbourhood search. By pressing the mouse button, it generated a random sequence of numbers between 1 to 4. The program used the sequence as an instance to match against the database from the CSV data file. The closet match will be shown together with the distance between the test case (random) and the closet match from the database.<\/p>\n<p><em>A sample screenshot<\/em><br \/>\n<a href=\"http:\/\/www.magicandlove.com\/blog\/wp-content\/uploads\/2016\/08\/weka0274.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1872\" title=\"weka0274\" src=\"http:\/\/www.magicandlove.com\/blog\/wp-content\/uploads\/2016\/08\/weka0274-300x300.png\" alt=\"\" width=\"300\" height=\"300\" srcset=\"http:\/\/www.magicandlove.com\/blog\/wp-content\/uploads\/2016\/08\/weka0274-300x300.png 300w, http:\/\/www.magicandlove.com\/blog\/wp-content\/uploads\/2016\/08\/weka0274-150x150.png 150w, http:\/\/www.magicandlove.com\/blog\/wp-content\/uploads\/2016\/08\/weka0274.png 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n&nbsp;<br \/>\n<em>Source codes<\/em><\/p>\n<pre lang=\"java\">\r\nimport weka.core.converters.CSVLoader;\r\nimport weka.core.Instances;\r\nimport weka.core.DenseInstance;\r\nimport weka.core.Instance;\r\nimport weka.core.neighboursearch.LinearNNSearch;\r\nimport java.util.Enumeration;\r\nimport java.io.File;\r\n\r\nInstances data;\r\nString csv;\r\nLinearNNSearch lnn;\r\nboolean search;\r\nint idx;\r\nfloat dist;\r\nString testCase;\r\nString matchCase;\r\nString distance;\r\n\r\nvoid setup() {\r\n  size(500, 500);\r\n  csv = \"Testing.csv\";\r\n  try {\r\n    loadData();\r\n    buildModel();\r\n  } \r\n  catch (Exception e) {\r\n    e.printStackTrace();\r\n  }\r\n  search = false;\r\n  idx = -1;\r\n  dist = 0.0;\r\n  testCase = \"\";\r\n  matchCase = \"\";\r\n  distance = \"\";\r\n  fill(255);\r\n}\r\n\r\nvoid draw() {\r\n  background(0);\r\n  if (search) {\r\n    text(testCase, 100, 100);\r\n    text(matchCase, 100, 150);\r\n    text(distance, 100, 200);\r\n  }\r\n}\r\n\r\nvoid loadData() throws Exception {\r\n  \/\/ load external CSV data file, without header row.\r\n  CSVLoader loader = new CSVLoader();\r\n  loader.setNoHeaderRowPresent(true);\r\n  loader.setSource(new File(dataPath(csv)));\r\n  data = loader.getDataSet();\r\n  data.setClassIndex(0);\r\n\r\n  println(\"Attributes : \" + data.numAttributes());\r\n  println(\"Instances : \" + data.numInstances());\r\n  println(\"Name : \" + data.classAttribute().toString());\r\n\r\n  Enumeration all = data.enumerateInstances();\r\n  while (all.hasMoreElements()) {\r\n    Instance single = (Instance) all.nextElement();\r\n    println(\"Instance : \" + (int) single.classValue() + \": \" + single.toString());\r\n  }\r\n}\r\n\r\nvoid buildModel() throws Exception {\r\n  \/\/ Build linear search model.\r\n  lnn = new LinearNNSearch(data);\r\n  println(\"Model built ...\");\r\n}\r\n\r\nvoid test() throws Exception {\r\n  \/\/ Construct a test case and do a linear searching.\r\n  double [] val = new double[data.numAttributes()];\r\n  val[0] = 0;\r\n  testCase  = \"Test case:  \";\r\n  matchCase = \"Match case: \";\r\n  distance  = \"Distance:   \";\r\n  for (int i=1; i<val.length; i++) {\r\n    val[i] = floor(random(4))+1;\r\n    testCase += (nf((float)val[i]) + \",\");\r\n  }\r\n  testCase = testCase.substring(0, testCase.length()-1);\r\n  DenseInstance x = new DenseInstance(1.0, val);\r\n  x.setDataset(data);\r\n  Instance c = lnn.nearestNeighbour(x);\r\n  double [] tmp = lnn.getDistances();\r\n  dist = (float) tmp[0];\r\n  idx = (int) c.classValue();\r\n  matchCase += data.instance(idx).toString();\r\n  distance += nf(dist);\r\n  saveFrame(\"weka####.png\");\r\n}\r\n\r\nvoid mousePressed() {\r\n  try {\r\n    test();\r\n  } \r\n  catch (Exception e) {\r\n    e.printStackTrace();\r\n  }\r\n  search = true;\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Further to the last Weka example, I used the same CSV data file for neighbourhood search. By pressing the mouse button, it generated a random sequence of numbers between 1 to 4. The program used the sequence as an instance to match against the database from the CSV data file. The closet match will be [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[89,79],"tags":[147,62,148],"class_list":["post-1871","post","type-post","status-publish","format-standard","hentry","category-research","category-software-2","tag-machine-learning","tag-processing-org","tag-weka"],"_links":{"self":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts\/1871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/comments?post=1871"}],"version-history":[{"count":4,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts\/1871\/revisions"}],"predecessor-version":[{"id":1876,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts\/1871\/revisions\/1876"}],"wp:attachment":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/media?parent=1871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/categories?post=1871"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/tags?post=1871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}