Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,9 @@ MANIFEST
docs/_build
docs/_templates
docs/*.log
.DS_Store
.DS_Store

.Rproj.user
*.o
*.so
.Rhistory
21 changes: 13 additions & 8 deletions include/blitzml/base/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,29 @@ namespace BlitzML {
#define LIBRARY_API extern "C"
#endif

typedef double value_t;
typedef double value_t;

#ifdef BLITZML_R_WRAPPER
typedef uint32_t size_t;
#else
typedef std::size_t size_t;
typedef int index_t;
#endif

typedef uint32_t index_t;

typedef std::vector<index_t>::iterator index_itr;
typedef std::vector<value_t>::iterator value_itr;
typedef std::vector<index_t>::const_iterator const_index_itr;
typedef std::vector<value_t>::const_iterator const_value_itr;


void assert(bool okay, std::string error_message);
void assert_with_error_message(bool okay, std::string error_message);
void warn_if(bool condition, std::string message);
void print(const char* fmt, ...);
void debug(const char* fmt, ...);


class ObjectiveValues {
public:
ObjectiveValues()
ObjectiveValues()
: dual_obj_(std::numeric_limits<value_t>::min()),
primal_obj_x_(std::numeric_limits<value_t>::max()),
primal_obj_y_(std::numeric_limits<value_t>::max()),
Expand Down Expand Up @@ -82,9 +87,9 @@ class Parameters {

virtual ~Parameters() { debug("delete params"); }

private:
private:
const value_t *values;
size_t count;
size_t count;

Parameters();
};
Expand Down
3 changes: 3 additions & 0 deletions r-package/.Rbuildignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
^.*\.Rproj$
^\.Rproj\.user$
^docs/*
24 changes: 24 additions & 0 deletions r-package/DESCRIPTION
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Package: blitzml
Type: Package
Title: Efficient Solver for Linear Models with Various Loss Functions and L1 penalty
Version: 0.1.1
Authors@R: c(
person("Tyler", "Johnson", role = c("aut"), comment = "backend C++ solver"),
person("Dmitriy", "Selivanov", role = c("aut", "cre"), email = "selivanov.dmitriy@gmail.com", comment = "R package")
)
Description: Efficient Solver for Linear Models with L1 penalty.
License: GPL (>= 2)
Encoding: UTF-8
LazyData: true
SystemRequirements: GNU make
Depends:
R (>= 3.1.0),
methods
Imports:
Matrix,
R6,
Rcpp (>= 0.12.0),
futile.logger,
data.table
LinkingTo: Rcpp
RoxygenNote: 6.1.1
12 changes: 12 additions & 0 deletions r-package/NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Generated by roxygen2: do not edit by hand

export(BlitzMLLassoRegression)
export(auc)
import(Matrix)
import(methods)
importFrom(Rcpp,sourceCpp)
importFrom(futile.logger,flog.debug)
importFrom(futile.logger,flog.info)
importFrom(futile.logger,flog.trace)
importFrom(futile.logger,flog.warn)
useDynLib("blitzml", .registration=TRUE)
51 changes: 51 additions & 0 deletions r-package/R/RcppExports.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Generated by using Rcpp::compileAttributes() -> do not edit by hand
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393

BlitzML_new_sparse_dataset <- function(x, y) {
.Call(`_blitzml_BlitzML_new_sparse_dataset`, x, y)
}

BlitzML_new_dense_dataset <- function(x, y) {
.Call(`_blitzml_BlitzML_new_dense_dataset`, x, y)
}

BlitzML_new_solver <- function() {
.Call(`_blitzml_BlitzML_new_solver`)
}

BlitzML_new_logreg_solver <- function() {
.Call(`_blitzml_BlitzML_new_logreg_solver`)
}

BlitzML_new_linear_solver <- function() {
.Call(`_blitzml_BlitzML_new_linear_solver`)
}

BlitzML_new_parameters <- function(params) {
.Call(`_blitzml_BlitzML_new_parameters`, params)
}

BlitzML_solver_compute_max_l1_penalty <- function(xptr_solver, xptr_dataset, xptr_params) {
.Call(`_blitzml_BlitzML_solver_compute_max_l1_penalty`, xptr_solver, xptr_dataset, xptr_params)
}

BlitzML_solve_problem <- function(xptr_solver, xptr_dataset, xptr_params, result, status_buffer, log_dir) {
invisible(.Call(`_blitzml_BlitzML_solve_problem`, xptr_solver, xptr_dataset, xptr_params, result, status_buffer, log_dir))
}

BlitzML_set_tolerance <- function(xptr_solver, value) {
invisible(.Call(`_blitzml_BlitzML_set_tolerance`, xptr_solver, value))
}

BlitzML_set_max_time <- function(xptr_solver, value) {
invisible(.Call(`_blitzml_BlitzML_set_max_time`, xptr_solver, value))
}

BlitzML_set_max_iterations <- function(xptr_solver, value) {
invisible(.Call(`_blitzml_BlitzML_set_max_iterations`, xptr_solver, value))
}

BlitzML_set_use_working_sets <- function(xptr_solver, value) {
invisible(.Call(`_blitzml_BlitzML_set_use_working_sets`, xptr_solver, value))
}

13 changes: 13 additions & 0 deletions r-package/R/dataset.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
BlitzML_create_dataset = function(x, y) {

if(!is.numeric(y)) stop("'y' should be numeric vector")

if(!(inherits(x, "matrix") || inherits(x, "dgCMatrix")))
stop("'x' should inherit from 'matrix' or 'dgCMatrix'")

if(inherits(x, "dgCMatrix")) {
BlitzML_new_sparse_dataset(x, y)
} else {
BlitzML_new_dense_dataset(x, y)
}
}
28 changes: 28 additions & 0 deletions r-package/R/plot.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
error.bars = function (x, upper, lower, width = 0.02, ...) {
xlim <- range(x)
barw <- diff(xlim) * width
graphics::segments(x, upper, x, lower, ...)
graphics::segments(x - barw, upper, x + barw, upper, ...)
graphics::segments(x - barw, lower, x + barw, lower, ...)
range(upper, lower)
}

plot.cv.BlitzMLLassoRegression = function (x, ...) {
cvobj = x
xlab = "log10(lambda)"

new.args = list(...)
if (length(new.args)) plot.args[names(new.args)] = new.args
plot.args = list(x = log10(cvobj$lambda),
y = cvobj$cvm,
ylim = range(cvobj$cvup, cvobj$cvlo),
xlab = xlab,
ylab = "auc",
type = "n")
do.call("plot", plot.args)

error.bars(log10(cvobj$lambda), cvobj$cvup,
cvobj$cvlo, width = 0.01, col = "darkgrey")
graphics::points(log10(cvobj$lambda), cvobj$cvm, pch = 20, col = "red")
invisible()
}
Loading