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.2: 2017/10/?
A modified diagonal preconditioning is added to the Newton method