FRI MLDM WORKSHOP 2012

1

Weka on .NET Matic Potoˇcnik, Gregor Majcen

Abstract—This paper will describe and benchmark several approaches to using Weka on the .NET Framework. Index Terms—Weka, .NET, benchmark, machine learning.

I. I NTRODUCTION

T

HIS paper will provide the reader with an overview and performance notes on using the Weka data-mining library [1] on the Microsoft .NET framework. Weka originally runs on the Java Virtual Machine (JVM), but there are methods which allow running Java code on .NET. This paper will describe several approaches and benchmark the performance of each approach on multiple machine learning algorithms. We will also list some possible use-cases of Weka on .NET. For a brief description of the technologies used, see Appendix A.

But if you have the .class files precompiled you can run them on .NET without having Java installed on your system. All the user needs to do to use this approach is to use the command-line command ikvm instead of java when running a program from the console. IKVM automatically accepts and uses additional Java libraries and no additional action is needed. Weka example javac -cp weka.jar;. Program.java ikvm -cp weka.jar;. Program

The ikvm command accepts all the command-line switches java does, but some don’t necessary do anything. For instance – memory switches such as -xmx1024m get ignored, as the .NET handles memory differently and does not hardlimit heap space the same way the JVM does. IKVM alerts us if some option is ignored or unsupported.

January 15, 2012 Note: The complete source code and most files, which were used while creating this paper, are available online at: https://github.com/HairyFotr/Weka-on-.NET

II. JAVA ON .NET

B. Using a IKVM-generated .dll with .NET/Mono For this approach we need a Java library inside a .jar package. We can then proceed to generate a .dll library using ikvmc. The ikvmc command has several options, but the most important for our use is the -target parameter, which can take the following values: •

In this section we will describe a few methods for using Java code on the .NET Framework. The text presumes usage of Microsoft Windows and that Java JDK, .NET Framework, Weka, IKVM, C# and F# compiler and Mono are already installed and that the correct directories have been added to the system PATH. The exact versions of software used for generating the results in this paper are: • Microsoft Windows 7 Professional x64 • Java 1.6.0 26 • Microsoft.NET Framework v4.0.30319 • Weka 3.6.6 • Microsoft Visual C# 2010 Compiler 4.0.30319.1 • Microsoft F# Compiler 2.0.0.0 • IKVM 0.46.0.1 • Mono 2.10.8

• • •

exe – generates an .exe that runs in a command window winexe – generates an .exe for GUI applications library – generates a .dll module – generates a .netmodule

We are going to use the library value, which generates a .dll which can then be referenced by .NET Framwork and Mono code. In C# programs we use the using directive and the open directive is used in F#. Weka example ikvmc -target:library weka.jar

After ikvmc has generated the .dll for us, we can use Visual Studio or the command-line compiler to compile our program with the .dll. Weka example (.NET) csc Program.cs -r:weka.dll,IKVM.OpenJDK.Core.←dll,IKVM.Runtime.dll Program.exe

A. IKVM directly running Java code on .NET This approach is the simplest if we just want to run Java on the .NET Framework, but its practical use is somewhat questionable as you cannot mix Java and .NET code this way. That means you cannot use any of the .NET libraries and code.

Weka example (Mono) dmcs Program.cs -r:weka.dll,IKVM.OpenJDK.Core.←dll,IKVM.Runtime.dll mono Program.exe

FRI MLDM WORKSHOP 2012

2

C. Using WekaSharp on .NET/Mono Here a pre-built F# wrapper around Weka is used. It also uses IKVM, but there is also some native F# code, which simplifies Weka programming in F#. In this paper we’ve used Weka directly with the Weka.dll provided with WekaSharp, and didn’t explore the options and benefits the wrapper provides. Weka example (F#) fsc Program.fsx -r:weka.dll -r:IKVM.OpenJDK.←Core.dll -r:IKVM.Runtime.dll Program.exe

III. B ENCHMARKING In this section we will discuss the benchmarking setup and methods used to generate the results. A. Overview We will use the following Weka algorithms: • weka.classifiers.bayes.NaiveBayes • weka.classifiers.trees.RandomForest • weka.classifiers.trees.J48 • weka.classifiers.rules.ConjunctiveRule • weka.classifiers.functions.MultilayerPerceptron • weka.classifiers.functions.SMO Measurements will be made for these languages/platforms: • java – Java with Weka.jar • javaikvm – Java with Weka.jar on .NET via IKVM • net – C# with IKVM-generated Weka.dll on .NET • mono – C# with IKVM-generated Weka.dll on Mono • fsharp – F# with WekaSharp’s Weka.dll on .NET B. Benchmarking code For benchmarking purposes, a functionally equivalent short benchmarking program was written in Java, C# and F#. Benchmark (pseudocode) read number of runs from args (default 1) read classifier name from args (default All) read dataset name from args (default "train") for 1 to runs { measure reading time { read training data set the last attribute as class read test data set the last attribute as class } measure building time { forall classifiers { build classifier } } measure classifying time { forall classifiers { forall testsamples { predict testsample class } } } }

print print print print print

classifier name read time build time classify time total time

The only difference between implementations, that is worth noting was the use of System.nanoTime() in Java and the Stopwatch class in C# and F# for measuring time, but we’ve tested both approaches on .NET and found that there is no noticeable difference. C. Code correctness One of the concerns we had was whether or not the Weka library behaviour was still the same on .NET, as it was on the JVM, and also if our programs were really equivalent. To test this we ran all the programs and checked if the classification accuracy is the same on all three. The test was run on all the selected algorithms. Below is a sample output of one of these runs. As you can see there are some additional trailing zeroes with the last line, which is the F# output, but as we’ve discovered this was due to typing, not due to numerical error. The other examples remained of the type java.lang.Float, but F# has a different type-sytem, which raised a type-error when doing arithmetic with mixed types, so we had to cast the numbers to F#’s float type which has a slightly different behaviour when converting float to string. Also, this difference appears in the calculation of the percentage – the classification results are exactly the same on all runs and so we have concluded that the code is correct. Sample output ConjunctiveRule ConjunctiveRule ConjunctiveRule ConjunctiveRule ConjunctiveRule

61004 61004 61004 61004 61004

out out out out out

of of of of of

100000 100000 100000 100000 100000

correct correct correct correct correct

(61.004%) (61.004%) (61,004%) (61.004%) (61.004000%)

D. Benchmarking script To simplify and speed-up the benchmarking process we have constructed a script which runs all the benchmarks and saves the results into a file. The script was written in Windows Batch. The script allowed us to set the number of runs, desired algorithms, the name of the dataset and which languages/platforms are included in the benchmarked. Benchmarking script (pseudocode) set number of runs set algorithms set datasets forall methods { forall algorithms { forall datasets { compile and run programs } } } save results

The script outputs the results in a format that is useful almost as-is in Mathematica for further analysis and graph plotting. Here is an example of a small Java run:

FRI MLDM WORKSHOP 2012

3

Result sample langs={java}; java = {"NaiveBayes",531,20,202,753}; java = {"RandomForest",488,60,350,898}; java = {"SMO",478,189,319,986}; java = {"J48",469,29,21,519}; java = {"MultilayerPerceptron",491,12814,1578,14883}; java = {"ConjunctiveRule",465,22,17,504};

time @msD java

javaikvm

net

56 876

65 266

69 293

278 275

mono

fsharp

67 687 50 000

Fig. 1.

100 000

150 000

200 000

250 000

Joint results

IV. R ESULTS In this section we will present the benchmarking results.

As we can see from the graph Java is the fastest, the programs on .NET Framework ran at aproximately the same speed, and the program ran on Mono was several times slower. Next we will look at the joint performance across all algorithms for reading, classifier building and classifier execution.

A. Dataset We used a bioinformatics dataset which was used as a part of a challenge/homework in an bioinformatics class on FRI [?]. The dataset was in CSV format (Comma-Separated Values), and Weka uses the ARFF (Attribute-Relation File Format), so we used an online CSV to ARFF converter to convert it into an appropriate format. We then then took a sample of only 500 rows from the training data. This was done because some machine-learning algorithms, such as SMO and MultilayerPerceptron, don’t work well with multi-valued attributes, and we wished to run all classifiers on the same dataset. The testing data on which we executed the classification was 100000 rows long. Here is the ARFF header of the dataset in question:

time @msD java javaikvm net

12 562 20 401 20 539 60 043

mono fsharp

22 798 10 000

Dataset header @relation train @attribute @attribute @attribute @attribute @attribute @attribute @attribute @attribute @attribute

DNA {A,T,C,G} gene_structure_on_plus {_,O,I,E} gene_structure_on_minus {O,_,I,E} UTR&TSS {_,5utr,tss,3utr} expression {_,H} histone_binding {NN,N,Z,P,PP} histone_modifications {Z,P,N} nucleosome_occupancy {Z,P,N} polII_presence {Z,N,P}

Fig. 2.

20 000

40 000

50 000

60 000

Reading performance results

time @msD java

javaikvm

net

32 295

30 987

35 283

144 425

mono

B. Joint results fsharp

We will begin the presentation of the results with the graph of the total time for all algorithms. We ran the benchmark 10 times on the above dataset for each of the algortihms and each of the language/platform combinations.

30 000

30 650 20 000

Fig. 3.

40 000

60 000

80 000 100 000 120 000 140 000

Classifier building performance results

FRI MLDM WORKSHOP 2012

4

time @msD java

javaikvm

net

java

13 878

javaikvm

13 471

net 73 807

mono

fsharp

mono

14 239 10 000

Fig. 4.

time @msD

12 019

fsharp 20 000

30 000

40 000

50 000

60 000

70 000

Classifier execution performance results

1000

Fig. 7.

2000

3000

4000

5000

SMO performance results

C. Results by algoritm In this subsection we will present the performance results for each algorithm, separately.

time @msD

We have used the following colors: .  – classifier building time .  – classifier exectuion time

java

time @msD

javaikvm

java

net

javaikvm

mono

net

fsharp 200

mono fsharp

Fig. 8. 2000

Fig. 5.

4000

6000

8000

10 000

600

800

J48 performance results

12 000

NaiveBayes performance results

time @msD

time @msD

java

java

javaikvm

javaikvm

net

net

mono

mono

fsharp

fsharp 500

Fig. 6.

400

1000

RandomForest performance results

1500

2000

20 000

Fig. 9.

40 000

60 000

80 000 100 000 120 000 140 000

MultilayerPerceptron performance results

FRI MLDM WORKSHOP 2012

5

time @msD

time @msD 15 619

java

java

javaikvm

25 431 javaikvm

net 27 328 net mono 27 002 fsharp

fsharp 200

Fig. 10.

400

600

800

ConjunctiveRule performance results

Fig. 12.

D. Memory usage One aspect of performance is also the memory usage of the programs. The memory benchmark was performed simply by stopping the programms right before their ending (this was done by adding a readLine command to the end of all three programs), and then writting down the Memory - Peak Working Set figure from the Windows Task Manager.

memory @KBD java

43 932

89 592

javaikvm 69 068

net

74 068

mono

71 216

fsharp 20 000

40 000

5000

60 000

80 000

10 000

15 000

20 000

25 000

Total performance results

The results show that Java is the fastest by about 60%, and the memory benchmarks also show about 60% lower memory usage. Based on these results we conclude that using Weka on the .NET Framework is indeed possible and for some usecases practical. VI. F URTHER WORK More algorithms and different datasets could be tested – this paper doesn’t include any regressional algoritms, and some algorithms used were not a good match for the dataset used. Weka also includes algorithms for preprocessing and filtering which were not featured here. The resulting joint data should also be normalized before being plotted, to avoid the skew in data which manifested itself here. We should also investigate how it was possible for .NET to be faster than Java in the MultilayerPerceptron benchmark, and why Mono performance was so bad in some cases. Another thing which could be added are possible use-cases for Weka on .NET, such as using tools only available in the .NET ecosystem. Microsoft SQL server with its Analysis Services is a good example of a such tool [2]. R EFERENCES

Fig. 11.

Memory performance results

The result shown above was produced by building and executing all of the selected algorithms once. The benchmark was repeated a few times, but there was less than 1MB difference in memory usage between runs. V. C ONCLUSION The results of the total classifier building performance were a bit of a surprise, as javaikvm and fsharp are actually faster than java. Later results on particular classifiers showed that the benchmark was skewed by the MultilayerPerceptron benchmark, which accounted for more than half of the total benchmarking time. Another abnormality was Mono – its performance was so bad, that it made some graphs hard to read. Here is the total graph again, with the MultilayerPerceptron and Mono results left out.

[1] Mark Hall, Eibe Frank, Geoffrey Holmes, Bernhard Pfahringer, Peter Reutemann, Ian H. Witten (2009); The WEKA Data Mining Software: An Update; SIGKDD Explorations, Volume 11, Issue 1. [2] David Hrovat (2012); Data Analysis with Microsoft SQL Server 2008 R2 Analysis Services; FRI MLDM Workshop 2012

FRI MLDM WORKSHOP 2012

A PPENDIX A T OOLS In this appendix section we will briefly describe some of the technologies and tools we’ve used. A. Weka Weka (Waikato Environment for Knowledge Analysis) is a widely used machine learning library, both in academia and business.

Fig. 13.

Weka logo

Its development started in 1993 at the University of Waikato, New Zealand. Initially it was written in TCL/TK and C, but later in 1997 it was completely rewritten in Java. Weka is free software released under the GNU General Public License. B. Mono Mono is a software platform designed to allow developers to easily create cross platform applications. Mono is an opensource implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime (CLI).

Fig. 14.

Mono logo

C. IKVM IKVM.NET is an implementation of Java for both Mono and the Microsoft .NET Framework. It includes the following components: • A Java Virtual Machine implemented in .NET • A .NET implementation of the Java class libraries • Tools that enable Java and .NET interoperability

Fig. 15.

IKVM logo

6

Weka on .NET

Jan 15, 2012 - Program. The ikvm command accepts all the command-line switches java does ... One of the concerns we had was whether or not the Weka.

513KB Sizes 19 Downloads 208 Views

Recommend Documents

weka pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. weka pdf.

AI32 — Guide to Weka
Mar 1, 2005 - Of course, it is a generic toolkit, which means it provides many more .... MLnet, the Machine Learning Network Online Information Service —.

weka data mining tutorial pdf
Loading… Page 1. Whoops! There was a problem loading more pages. weka data mining tutorial pdf. weka data mining tutorial pdf. Open. Extract. Open with.

islamabad HC on net freedom.pdf
In a nut shell, the. appellant Company and the petitioners have challenged the. suspension of mobile cellular services pursuant to the orders. of the Pakistan Telecommunication Authority (hereinafter. referred to as the “Authority”). The appellan

Witten, Frank, Weka, Machine Learning Algorithms in Java.pdf ...
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Witten, Frank ...

gratify-net-selling-dense-on-steroid-tips-counsellor-ease-marketing ...
Page 1. Whoops! There was a problem loading more pages. Retrying... gratify-net-selling-dense-on-steroid-tips-counsellor-ease-marketing-1499536326618.pdf.

Pre- Consultation Paper on Net Neutrality.pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Main menu.

gratify-net-selling-dense-on-steroid-tips-counsellor-ease-marketing ...
... APremier Net Marketing Firm, Content ,. Title Tags And. Page 2 of 2. gratify-net-selling-dense-on-steroid-tips-counsellor-ease-marketing-1499536326618.pdf.

Net-Technologies-Dec201311 NET TECHNOLOGIES (USING ASP ...
Net-Technologies-Dec201311 NET TECHNOLOGIES (USING ASP.NET).pdf. Net-Technologies-Dec201311 NET TECHNOLOGIES (USING ASP.NET).pdf. Open.

Net-Technologies-May201412 .NET TECHNOLOGIES(USING ASP ...
Net-Technologies-May201412 .NET TECHNOLOGIES(USING ASP.NET).pdf. Net-Technologies-May201412 .NET TECHNOLOGIES(USING ASP.NET).pdf.

seating arrangement for ugc net test held on 29.06.2014 msuniversity ...
Jun 29, 2014 - EDUCATION. 35090001 35090012. 12. 2. 2. COMMERCE. 35080013 35080024. 12. EDUCATION. 35090013 ..... ADULT EDUCATION.

SAHAR: Support and Listening on the Netרתימת האינטרנט לתמיכה ...
SAHAR: Support and Listening on the Netרתימת האינטרנט לתמיכה ולהצלה במצבי מצוקה נפשית .pdf. SAHAR: Support and Listening on the Netרתימת האינטרנט לתמיכה ...

Prospects of application of microwave discharges on a dielectric net ...
Some problems: necessity of flow deceleration, stable ignition in a wide range of mix flow parameters, completeness of combustion at various flow speed, stabilization in space and reduction of burning zone, etc. Page 3. MRTI. 3. Quasi-Optical Microwa

seating arrangement for ugc net test held on 29.06.2014 msuniversity ...
Jun 29, 2014 - EDUCATION. 35090013 .... M.S.UNIVERSITY OF BARODA, NEAR D.N.HALL CRECRIT GROUND, PRATAP GANJ, NEAR C.C.MEHTA.

Sep-Mar Sum: gross net T/O gross net T/O gross net ...
26,000 741 679 17 29 732 666 1 15 732 667 30 31 714 648 7 37 708 643 11 28 699 633 10 34 691 627 2 28 691 627 7 31 693 628 12 19 691 627 2 17 689 625 27 20 705 641 19 15 703 649 0 8 703 649 1 6 702 648 0 4 702 648 1 3 701 647 7 7 705 652 0 3 705 652

Dec-Jun Sum: gross net T/O gross net T/O gross net T ...
23,400 1,833 1,450 784 290 1,576 1,153 163 293 1,509 1,099 186 195 1,422 1,095 75 248 1,438 1,089 416 285 1,638 1,157 94 365 1,628 1,172 95 312 ..... 27,000 363 286 55 1 363 281 4 1 362 283 0 1 362 283 0 1 362 283 15 1 362 284 13 1 364 286 31 1 364 2

NET Unconstitutional.pdf
Whoops! There was a problem previewing this document. Retrying... Download. Connect more apps... NET Unconstitutional.pdf. NET Unconstitutional.pdf. Open.

Crystal Reports .NET Programming
NET, Microsoft gave programmers the first powerful report writing tool that is completely ..... a non-standard data source such as an Excel spreadsheet. Figure 2-2. The Data tab of ...... one-to-one mapping between languages. You'll keep this ...

cs50.net/movie
so, should I use a string to tie these balloons together? Page 5. no, you should use a char *. Page 6. Page 7. problem set 7. Page 8. Page 9.

Specification - cdn.cs76.net
Building Mobile Applications CSCI E-‐76. Harvard Extension School Spring 2011. 1 of 11. iOS: Staff's Choice. Evil Hangman* due by noon ET on Thu 4/21.

Specification - cdn.cs76.net
24 Feb 2011 - Android Software Development Kit. •. Eclipse. •. Java. Help. Help is available throughout the week at http://help.cs76.net/! We'll do our best to respond within 24 hours. Be sure ... You may also turn to the Web for instruction ...

Specification - cdn.cs76.net
Feb 24, 2011 - environment (IDE), which would provide a GUI-‐based application to help develop your application. For this reason ... to build native Android applications, and finally create some Android Virtual Devices to use the .... of class, and

NET Reverse Engineering - owasp
Exploiting ANY server / application vulnerability to execute commands. • Example application has a vulnerability that let us to access the file system.