{"id":23080626,"url":"https://github.com/chen0040/java-libsvm","last_synced_at":"2025-07-01T05:03:40.143Z","repository":{"id":85884375,"uuid":"89990829","full_name":"chen0040/java-libsvm","owner":"chen0040","description":"Package provides the direct java conversion of the origin libsvm C codes as well as a number of adapter to make it easier to program with libsvm on Java","archived":false,"fork":false,"pushed_at":"2017-05-24T03:20:12.000Z","size":255,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-01T05:02:48.864Z","etag":null,"topics":["anomaly-detection","binary-classification","java","libsvm","libsvm-format","multi-class-classification","one-class-learning","outlier-detection","regression","supervised-learning","svm","unsupervised-learning"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chen0040.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-05-02T04:14:17.000Z","updated_at":"2022-04-24T08:36:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"d2fe0c95-5970-4076-b949-ca7314bf6a7b","html_url":"https://github.com/chen0040/java-libsvm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/chen0040/java-libsvm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen0040%2Fjava-libsvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen0040%2Fjava-libsvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen0040%2Fjava-libsvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen0040%2Fjava-libsvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chen0040","download_url":"https://codeload.github.com/chen0040/java-libsvm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen0040%2Fjava-libsvm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262900086,"owners_count":23381657,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anomaly-detection","binary-classification","java","libsvm","libsvm-format","multi-class-classification","one-class-learning","outlier-detection","regression","supervised-learning","svm","unsupervised-learning"],"created_at":"2024-12-16T13:15:52.011Z","updated_at":"2025-07-01T05:03:40.120Z","avatar_url":"https://github.com/chen0040.png","language":"Java","readme":"# java-libsvm\nPackage provides the direct java conversion of the origin libsvm\n\n[![Build Status](https://travis-ci.org/chen0040/java-libsvm.svg?branch=master)](https://travis-ci.org/chen0040/java-libsvm) [![Coverage Status](https://coveralls.io/repos/github/chen0040/java-libsvm/badge.svg?branch=master)](https://coveralls.io/github/chen0040/java-libsvm?branch=master)\n\n# Install\n\nAdd the following dependency to your POM file:\n\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.chen0040\u003c/groupId\u003e\n  \u003cartifactId\u003ejava-libsvm\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.4\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n# Usage\n\nThe package use data frame as containers for training and testing data (Please refers to this [link](https://github.com/chen0040/java-data-frame) on how to create a data frame from file or from scratch) \n\n# One-class SVM \n\nBelow is the code to create and train a one-class SVM:\n\n```java\nOneClassSVM algorithm = new OneClassSVM();\nalgorithm.fit(training_data)\n```\n\nBelow is the code to predict if data point is an outlier:\n\n```java\nalgorithm.isAnomaly(data_point)\n```\n\n# SVR\n\nBelow is the code to create and train a SVR for regression modelling:\n\n```java\nSVR algorithm = new SVR();\nalgorithm.fit(training_data)\n```\n\nBelow is the code to perform data regression prediction:\n\n```java\nalgorithm.isAnomaly(data_point)\n```\n\n# BinarySVC\n\nBelow is the code to create and train a BinarySVC for binary classification:\n\n```java\nBinarySVC algorithm = new BinarySVC();\nalgorithm.fit(training_data)\n```\n\nBelow is the code to perform data binary classification:\n\n```java\nalgorithm.isInClass(data_point)\n```\n\n# OneVsOneSVC\n\nBelow is the code to create and train a OneVsOneSVC for multi-class classification:\n\n```java\nBinarySVC algorithm = new BinarySVC();\nalgorithm.fit(training_data)\n```\n\nBelow is the code to perform multi-class classification:\n\n```java\nalgorithm.classify(data_point)\n```\n\n# Data Format\n\nThe data format default is the DataFrame class, which can be used to load csv and libsvm format text file. Please refers to the unit test cases on how they can be used.\n\n# Sample codes\n\n### Sample code for OneClassSVM:\n\nBelow is a sample code example of the one-class SVM for the example below here:\n\n![scki-learn example for one-class](http://scikit-learn.org/stable/_images/sphx_glr_plot_oneclass_001.png)\n\n```java\nimport com.github.chen0040.data.frame.DataFrame;\nimport com.github.chen0040.data.frame.DataQuery;\nimport com.github.chen0040.data.frame.Sampler;\nimport com.github.chen0040.svmext.oneclass.OneClassSVM;\n\nDataQuery.DataFrameQueryBuilder schema = DataQuery.blank()\n      .newInput(\"c1\")\n      .newInput(\"c2\")\n      .newOutput(\"anomaly\")\n      .end();\n\nSampler.DataSampleBuilder negativeSampler = new Sampler()\n      .forColumn(\"c1\").generate((name, index) -\u003e randn() * 0.3 + (index % 2 == 0 ? -2 : 2))\n      .forColumn(\"c2\").generate((name, index) -\u003e randn() * 0.3 + (index % 2 == 0 ? -2 : 2))\n      .forColumn(\"anomaly\").generate((name, index) -\u003e 0.0)\n      .end();\n\nSampler.DataSampleBuilder positiveSampler = new Sampler()\n      .forColumn(\"c1\").generate((name, index) -\u003e rand(-4, 4))\n      .forColumn(\"c2\").generate((name, index) -\u003e rand(-4, 4))\n      .forColumn(\"anomaly\").generate((name, index) -\u003e 1.0)\n      .end();\n\nDataFrame trainingData = schema.build();\n\ntrainingData = negativeSampler.sample(trainingData, 200);\n\nSystem.out.println(trainingData.head(10));\n\nDataFrame crossValidationData = schema.build();\n\ncrossValidationData = negativeSampler.sample(crossValidationData, 40);\n\nDataFrame outliers = schema.build();\n\noutliers = positiveSampler.sample(outliers, 40);\n\nfinal double threshold = 0.5;\nOneClassSVM algorithm = new OneClassSVM();\nalgorithm.set_gamma(0.1);\nalgorithm.set_nu(0.1);\nalgorithm.thresholdSupplier = () -\u003e 0.0;\n\nalgorithm.fit(trainingData);\n\nfor(int i = 0; i \u003c crossValidationData.rowCount(); ++i){\n boolean predicted = algorithm.isAnomaly(crossValidationData.row(i));\n logger.info(\"predicted: {}\\texpected: {}\", predicted, crossValidationData.row(i).target() \u003e threshold);\n}\n\nfor(int i = 0; i \u003c outliers.rowCount(); ++i){\n boolean predicted = algorithm.isAnomaly(outliers.row(i));\n logger.info(\"outlier predicted: {}\\texpected: {}\", predicted, outliers.row(i).target() \u003e threshold);\n}\n```\n\n### Sample codes for SVR\n\nBelow is another complete sample code of the SVR to predict y = 4 + 0.5 * x1 + 0.2 * x2:\n\n![sample image for regression](images/svr.png)\n\n```java\nimport com.github.chen0040.data.frame.DataFrame;\nimport com.github.chen0040.data.frame.DataQuery;\nimport com.github.chen0040.data.frame.Sampler;\nimport com.github.chen0040.svmext.oneclass.SVR;\n\nDataQuery.DataFrameQueryBuilder schema = DataQuery.blank()\n      .newInput(\"x1\")\n      .newInput(\"x2\")\n      .newOutput(\"y\")\n      .end();\n\n// y = 4 + 0.5 * x1 + 0.2 * x2\nSampler.DataSampleBuilder sampler = new Sampler()\n      .forColumn(\"x1\").generate((name, index) -\u003e randn() * 0.3 + index)\n      .forColumn(\"x2\").generate((name, index) -\u003e randn() * 0.3 + index * index)\n      .forColumn(\"y\").generate((name, index) -\u003e 4 + 0.5 * index + 0.2 * index * index + randn() * 0.3)\n      .end();\n\nDataFrame trainingData = schema.build();\n\ntrainingData = sampler.sample(trainingData, 200);\n\nSystem.out.println(trainingData.head(10));\n\nDataFrame crossValidationData = schema.build();\n\ncrossValidationData = sampler.sample(crossValidationData, 40);\n\nSVR svr = new SVR();\nsvr.fit(trainingData);\n\nfor(int i = 0; i \u003c crossValidationData.rowCount(); ++i){\n double predicted = svr.transform(crossValidationData.row(i));\n double actual = crossValidationData.row(i).target();\n System.out.println(\"predicted: \" + predicted + \"\\texpected: \" + actual);\n}\n```\n\n### Sample code for BinarySVC\n\nBelow is another complete sample code of the BinarySVC for binary classification:\n\n```java\nimport com.github.chen0040.data.frame.DataFrame;\nimport com.github.chen0040.data.frame.DataQuery;\nimport com.github.chen0040.data.frame.Sampler;\nimport com.github.chen0040.svmext.classifiers.BinarySVC;\n\nDataQuery.DataFrameQueryBuilder schema = DataQuery.blank()\n      .newInput(\"c1\")\n      .newInput(\"c2\")\n      .newOutput(\"anomaly\")\n      .end();\n\nSampler.DataSampleBuilder negativeSampler = new Sampler()\n      .forColumn(\"c1\").generate((name, index) -\u003e randn() * 0.3 + (index % 2 == 0 ? -2 : 2))\n      .forColumn(\"c2\").generate((name, index) -\u003e randn() * 0.3 + (index % 2 == 0 ? -2 : 2))\n      .forColumn(\"anomaly\").generate((name, index) -\u003e 0.0)\n      .end();\n\nSampler.DataSampleBuilder positiveSampler = new Sampler()\n      .forColumn(\"c1\").generate((name, index) -\u003e rand(-4, 4))\n      .forColumn(\"c2\").generate((name, index) -\u003e rand(-4, 4))\n      .forColumn(\"anomaly\").generate((name, index) -\u003e 1.0)\n      .end();\n\nDataFrame trainingData = schema.build();\n\ntrainingData = negativeSampler.sample(trainingData, 200);\ntrainingData = positiveSampler.sample(trainingData, 200);\n\nSystem.out.println(trainingData.head(10));\n\nDataFrame crossValidationData = schema.build();\n\ncrossValidationData = negativeSampler.sample(crossValidationData, 40);\ncrossValidationData = positiveSampler.sample(crossValidationData, 40);\n\nBinarySVC algorithm = new BinarySVC();\nalgorithm.fit(trainingData);\n\nBinaryClassifierEvaluator evaluator = new BinaryClassifierEvaluator();\n\nfor(int i = 0; i \u003c crossValidationData.rowCount(); ++i){\n boolean predicted = algorithm.isInClass(crossValidationData.row(i));\n boolean actual = crossValidationData.row(i).target() \u003e 0.5;\n evaluator.evaluate(actual, predicted);\n System.out.println(\"predicted: \" + predicted + \"\\texpected: \" + actual);\n}\n\nevaluator.report();\n```\n\n### Sample codes for OneVsOneSVC\n\nBelow is another complete sample code of the OneVsOneSVC for multi-class classification:\n\n```java\nimport com.github.chen0040.data.frame.DataFrame;\nimport com.github.chen0040.data.frame.DataQuery;\nimport com.github.chen0040.data.frame.Sampler;\nimport com.github.chen0040.svmext.classifiers.OneVsOneSVC;\n\nInputStream irisStream = new FileInputStream(\"iris.data\");\nDataFrame irisData = DataQuery.csv(\",\", false)\n      .from(irisStream)\n      .selectColumn(0).asNumeric().asInput(\"Sepal Length\")\n      .selectColumn(1).asNumeric().asInput(\"Sepal Width\")\n      .selectColumn(2).asNumeric().asInput(\"Petal Length\")\n      .selectColumn(3).asNumeric().asInput(\"Petal Width\")\n      .selectColumn(4).asCategory().asOutput(\"Iris Type\")\n      .build();\n\nTupleTwo\u003cDataFrame, DataFrame\u003e parts = irisData.shuffle().split(0.9);\n\nDataFrame trainingData = parts._1();\nDataFrame crossValidationData = parts._2();\n\nSystem.out.println(crossValidationData.head(10));\n\nOneVsOneSVC multiClassClassifier = new OneVsOneSVC();\nmultiClassClassifier.fit(trainingData);\n\nClassifierEvaluator evaluator = new ClassifierEvaluator();\n\nfor(int i=0; i \u003c crossValidationData.rowCount(); ++i) {\n String predicted = multiClassClassifier.classify(crossValidationData.row(i));\n String actual = crossValidationData.row(i).categoricalTarget();\n System.out.println(\"predicted: \" + predicted + \"\\tactual: \" + actual);\n evaluator.evaluate(actual, predicted);\n}\n\nevaluator.report();\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchen0040%2Fjava-libsvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchen0040%2Fjava-libsvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchen0040%2Fjava-libsvm/lists"}