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)