Giter Site home page Giter Site logo

jamesalbert / p6-algorithm-libsvm Goto Github PK

View Code? Open in Web Editor NEW

This project forked from titsuki/raku-algorithm-libsvm

0.0 3.0 0.0 70 KB

A Perl 6 bindings for libsvm <!-- [SEO] perl6 -->

License: MIT License

Perl 6 40.61% C++ 56.04% C 2.91% Makefile 0.44%

p6-algorithm-libsvm's Introduction

Build Status

NAME

Algorithm::LibSVM - A Perl 6 bindings for libsvm

SYNOPSIS

EXAMPLE 1

use Algorithm::LibSVM;
use Algorithm::LibSVM::Parameter;
use Algorithm::LibSVM::Problem;
use Algorithm::LibSVM::Model;

my $libsvm = Algorithm::LibSVM.new;
my Algorithm::LibSVM::Parameter $parameter .= new(svm-type => C_SVC,
                                                  kernel-type => RBF);
my Algorithm::LibSVM::Problem $problem = $libsvm.load-problem('heart_scale');
my @r = $libsvm.cross-validation($problem, $param, 10);
$libsvm.evaluate($problem.y, @r).say; # {acc => 81.1111111111111, mse => 0.755555555555556, scc => 1.01157627463546}

EXAMPLE 2

use Algorithm::LibSVM;
use Algorithm::LibSVM::Parameter;
use Algorithm::LibSVM::Problem;
use Algorithm::LibSVM::Model;

sub gen-train {
    my $max-x = 1;
    my $min-x = -1;
    my $max-y = 1;
    my $min-y = -1;

    do for ^300 {
       my $x = $min-x + rand * ($max-x - $min-x);
       my $y = $min-y + rand * ($max-y - $min-y);

       my $label = do given $x, $y {
          when ($x - 0.5) ** 2 + ($y - 0.5) ** 2 <= 0.2 {
                 1
          }
          when ($x - -0.5) ** 2 + ($y - -0.5) ** 2 <= 0.2 {
              2
          }
          default { Nil }
    }
    ($label,"1:$x","2:$y") if $label.defined;
  }.sort({ $^a.[0] cmp $^b.[0] })>>.join(" ")
}

my Str @train = gen-train;

my Pair @test = parse-libsvmformat(q:to/END/).head<pairs>.flat;
1 1:0.5 2:0.5
END

my $libsvm = Algorithm::LibSVM.new;
my Algorithm::LibSVM::Parameter $parameter .= new(svm-type => C_SVC,
                                                  kernel-type => LINEAR);
my Algorithm::LibSVM::Problem $problem = $libsvm.load-problem(@train);
my $model = $libsvm.train($problem, $parameter);
say $model.predict(features => @test)<label> # 1

DESCRIPTION

Algorithm::LibSVM is a Perl 6 bindings for libsvm.

METHODS

cross-validation

Defined as:

method cross-validation(Algorithm::LibSVM::Problem $problem, Algorithm::LibSVM::Parameter $param, Int $nr-fold) returns Array

Conducts $nr-fold-fold cross validation and returns predicted values.

train

Defined as:

method train(Algorithm::LibSVM::Problem $problem, Algorithm::LibSVM::Parameter $param) returns Algorithm::LibSVM::Model

Trains a SVM model.

  • $problem The instance of Algorithm::LibSVM::Problem.

  • $param The instance of Algorithm::LibSVM::Parameter.

load-problem

Defined as:

multi method load-problem(\lines) returns Algorithm::LibSVM::Problem
multi method load-problem(Str $filename) returns Algorithm::LibSVM::Problem

Loads libsvm-format data.

load-model

Defined as:

method load-model(Str $filename) returns Algorithm::LibSVM::Model

Loads libsvm model.

evaluate

Defined as:

method evaluate(@true-values, @predicted-values) returns Hash

Evaluates the performance of the three metrics (i.e. accuracy, mean squared error and squared correlation coefficient)

  • @true-values The array that contains ground-truth values.

  • @predicted-values The array that contains predicted values.

nr-feature

Defined as:

method nr-feature returns Int:D

Returns the maximum index of all the features.

ROUTINES

parse-libsvmformat

Defined as:

sub parse-libsvmformat(Str $text) returns Array is export

Is a helper routine for handling libsvm-format text.

CAUTION

DON'T USE PRECOMPUTED KERNEL

As a temporary expedient for RT130187, I applied the patch programs (e.g. src/3.22/svm.cpp.patch) for the sake of disabling random access of the problematic array.

Sadly to say, those patches drastically increase the complexity of using PRECOMPUTED kernel.

SEE ALSO

AUTHOR

titsuki [email protected]

COPYRIGHT AND LICENSE

Copyright 2016 titsuki

This library is free software; you can redistribute it and/or modify it under the terms of the MIT License.

libsvm ( https://github.com/cjlin1/libsvm ) by Chih-Chung Chang and Chih-Jen Lin is licensed under the BSD 3-Clause License.

p6-algorithm-libsvm's People

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.