1.0: 2007/4/30, initial release. Support only logistic
regression. Called liblr in the beginning.
1.1: 2007/7/18, support l2loss SVM. Rename to liblinear
split cpp file to tron.cpp and linear.cpp
improve Makefile
svn version:
1.2: 2007/12/17, support l1loss SVM.
New coordinate descent method for L2loss and L1loss SVM
tron: better stopping condition for unbalanced data
matlab interface: row and column formats
1.21: 2007/12/18,
Windows binaries not updated in 1.2
Fix an error of setting eps in matlab interface
1.22: 2008/1/12,
Better shrinking
Better way to calculate the final obj value
1.23: 2008/04/05
New way to store w: [1..class|1..class|...]; faster testing
Fix a matlab interface bug on handling the bias
Support Octave interface
1.24: 2008/05/08
Fix a matlab interface bug on handling multi-class data
model.w is nr_classifier by n matrix (was n by nr_classifier)
1.3: 2008/06/02
Support multi-class SVM via Crammer & Singer (the class MCSVM_CS)
1.31: 2008/06/06
Remove wrongly included redundent files in 1.3
1.32: 2008/07/26
Improve README following comments for the paper appearing in JMLR
1.33: 2008/09/21
Improve the code to read data -> now much faster
info() in linear.cpp becomes static
Strict conversion check (-Wconversion) in Makefile
1.34: 2009/08/03
Maximal number of iterations changed from 20,000 to 1,000
train -q option (disable outputs)
read_sparse changed to libsvmread; add libsvmwrite
Add explanation of model structure in README
Minor code cleanup and better error descriptions
1.4: 2009/08/24
L1-regularized SVM and LR
Rename solver names
1.5: 2009/10/04
Improve sufficient decrease condition of L1 solvers
Set default -B -1 (i.e., no bias term)
1.51: 2009/12/20
Column format used by L1r solvers have index start from 1
GET(i) to get class weight for an instance; easily modified to support instance weight
1.6: 2010/06/20
Use set_print_string_function to set the print function
Add free_model_content and free_and_destroy_model functions (avoid memory problem is users declare a model variable)
Add check_probability_model (consistent with libsvm)
New Python interface (using ctypes)
1.7: 2010/09/13
A new solver: coordinate descent for dual logistic regression
1.8: 2011/04/01
New optimization method for l1-regularized logistic regression
linear.cpp:
Use 1-norm stopping condition for l1-regularized solvers
newton_iter < l/10 replaced by newton_iter <= l/10
in l2r_lr_dual (for l < 10)
train.c and predict.c
Better format check in reading data labels
Python interface:
Rename linear.py and linearutil.py to liblinear.py and liblinearutil.py
relative path to load *.dll and *.so
MATLAB interface:
Using mexPrintf() when calling info() in MATLAB interface.
Use tron.o and linear.o in the parent directory (iinstead of regenerating them
64- instead of 32-bit windows binary files are provided
1.9: 2012/04/17
Add linear support vector regression (L2 and L1 loss)
Add setlocale when saving and loading model so not affected by users' locale
MATLAB interface:
new make.m for unix/mac/windows and for matlab/octave
1.91: 2012/04/26
Fix some bugs in python interface due to the introduction of SVR solvers
1.92: 2012/10/10
add -q for predict
remove matlab/run.m
1.93: 2013/1/27
python interface:
local package searched first
liblinear options can be str or list
param.show() becomes print(param)
1.94: 2013/11/12
svm.cpp:
if class labels are 1 and -1, ensure labels[0] = 1 and labels[1] = -1; this follows the change in libsvm
fix a bug, delete should be delete []
if nr_fold > # data, change nr_fold to be # data and ro leave-one-out cv; this follows the change in libsvm
type of nnz (total number of feature nodes) in transpose() becomes long int
MATLAB interface:
interface parameter checking
check 'nlhs' argument.
allow various output size for predict.
1.95: 2014/10/27
blas/*.h and *.c:
avoid being compiled as C++ subroutines by
#ifdef __cplusplus
extern "C" {
#endif
linear.cpp:
Gnorm1_init initialized as -1 to avoid warning (though it's set at 1st iter)
size_t to handle > 2^31 (index,value) pairs on both unix/windows
A new function check_regression_model
New functions get_decfun_coef and get_decfun_bias to get weight vector of the model
Makefile:
SHVER = 2 due to a change on functions
matlab interface:
use size_t and mwIndex to avoid many type conversions
Makefile supports matlab only. Octave users should use make.m
python interface:
use __all__ to declare functions
1.96: 2014/11/15
windows directory:
we now provide 64-bit exe files
matlab interface:
fix a bug in libsvmwrite.c introduced in 3.19 (cannot run on windows)
2.0: 2015/6/30
major change: -C option added to search for the best C by CV. The technique
is based on KDD 2015 paper by Chu et al.:
-a new function find_parameter_C for parameter search
-new element init_sol in the struct parameter
-the function train supports initial solution for L2R_LR and L2R_L2LOSS_SVC
-interface and train.c updates: option -C is added
change the path of linear.h in matlab interface
2.01: 2015/7/8
address bugs/issues introduced in the major change of version 2.0
-SVR w initialization wasn't added in 2.0
-prev_w may be wrongly allocated several times
-CV's subprobs were not freed in the end of parameter selection
-w_new in tron is allocated after w0 is deleted. Keep the same memory usage
-improve README to show that some options can be used together with -C
2.1: 2015/9/27
A new class sparse_operator including dot and axpy operations. Most solvers now uses these operations for main computational tasks
Hessian-vector product in Newton is by sum x_i D_ii x_i^T s rather than two products Xs and X^T(...)
Check return values of fscanf (similar to settings in LIBSVM)
2.11: 2017/3/29
An effective change of trust-region update rules so the Newton method (-s 0) is much faster in some situation
linear.h: provide version number like that in svm.h of libsvm
Python interface: support scipy objects
2.20: 2017/12/6
A modified diagonal preconditioner is used for PCG in the Newton method
2.21: 2018/10/4
include LIBSVM's svm-scale.c in the package.
fix a bug in tron.cpp
trust-region size failed to be adjusted due to an "iter == 1" flag to initialize delta
rename get_diagH to get_diag_preconditioner in case not using diagonal elements of Hessian in some branches
more digits in printing model parameters and labels to %.17g (similar changes in libsvm 3.23)
python interface: (similar changes in libsvm 3.23)
add scaling (csr_find_scale_param and csr_scale functions)
put some utility functions identical in LIBSVM to commonutil.py.
functions for scaling are put in commonutil.py.
sort column indices of csr matrix before training as feature indices must be ascending
use array for reading data in python/commonutil.py to lower the memory usage (not in libsvm 3.23 yet)
fix a bug in python/commonutil.py that the function "csr_scale" does not return the scaled data (not in libsvm 3.23 yet)
2.30: 2019/3/21
-C option extended to support parameter search for L2R_L2LOSS_SVR
-add function find_parameters for parameter search
-modify function find_parameter_C as subroutine of find_parameters
-add function calc_max_p for maximal p parameter for L2R_L2LOSS_SVR
-modify function calc_start_C for L2R_L2LOSS_SVR
-modify function train to support initial solution for L2R_L2LOSS_SVR
-change L2R_L2LOSS_SVR default -e to (0.0001)
-change parameter stopping condition from num_unchanged_w == 3 to 5
-modify python/MATLAB interface and train.c update
-REDME update
Fix compiling issues in matlab interface
Set a max_cg_iter for the CG while loop of the Newton solver
2.40: 2020/7/22
A new solver: dual coordinate descent method for linear one-class SVM
The Newton solver is updated from trust region to line search; faster in some situations
A new option -R to allow users not to regularize bias (when -B 1 is used)
The setting of changing eps_cg in parameter selection (-C) is abolished
2.41: 2020/7/29
Fix a bug on one-class linear SVM prediction
Fix a bug in matlab interface of one-class linear SVM
2.42: 2020/11/1
If dual CD (lr/l2 losses but not l1) fails, automatically switch to primal Newton
Add a check in pcg() to avoid possible 0/0
Improve the output form of primal Newton
2.43: 2021/2/25
Add python/setup.py for installation via PyPI
python directory reorganized
python sources now in the directory python/liblinear
Not adding -std=c99 to CFLAGS in generating mex (this causes MinGW to fail)
Other minor bug fixes
2.44: 2022/3/17
Change SHVER in Makefile due to changes in earlier versions
Other minor bug fixes or improvements of the description
2.45: 2022/8/11
Python: use numpy instead of scipy for basic operations
2.46: 2023/2/17
Using quickselect instead of heap for the working set selection in the one-class solver
Other minor changes (e.g., README improvement)