Skip to main content

Python binding of LIBLINEAR

Project description

-------------------------------------
--- Python interface of LIBLINEAR ---
-------------------------------------

Table of Contents
=================

- Introduction
- Installation via PyPI
- Installation via Sources
- Quick Start
- Quick Start with Scipy
- Design Description
- Data Structures
- Utility Functions
- Additional Information

Introduction
============

Python (http://www.python.org/) is a programming language suitable for rapid
development. This tool provides a simple Python interface to LIBLINEAR, a library
for support vector machines (http://www.csie.ntu.edu.tw/~cjlin/liblinear). The
interface is very easy to use as the usage is the same as that of LIBLINEAR. The
interface is developed with the built-in Python library "ctypes."

Installation via PyPI
=====================

To install the interface from PyPI, execute the following command:

> pip install -U liblinear-official

Installation via Sources
========================

Alternatively, you may install the interface from sources by
generating the LIBLINEAR shared library.

Depending on your use cases, you can choose between local-directory
and system-wide installation.

- Local-directory installation:

On Unix systems, type

> make

This generates a .so file in the LIBLINEAR main directory and you
can run the interface in the current python directory.

For Windows, starting from version 2.48, we no longer provide the
pre-built shared library liblinear.dll. To run the interface in the
current python directory, please follow the instruction of building
Windows binaries in LIBLINEAR README. You can copy liblinear.dll to
the system directory (e.g., `C:\WINDOWS\system32\') to make it
system-widely available.

- System-wide installation:

Type

> pip install -e .

or

> pip install --user -e .

The option --user would install the package in the home directory
instead of the system directory, and thus does not require the
root privilege.

Please note that you must keep the sources after the installation.

For Windows, to run the above command, Microsoft Visual C++ and
other tools are needed.

In addition, DON'T use the following FAILED commands

> python setup.py install (failed to run at the python directory)
> pip install .

Quick Start
===========

"Quick Start with Scipy" is in the next section.

There are two levels of usage. The high-level one uses utility
functions in liblinearutil.py and commonutil.py (shared with LIBSVM
and imported by svmutil.py). The usage is the same as the LIBLINEAR
MATLAB interface.

>>> from liblinear.liblinearutil import *
# Read data in LIBSVM format
>>> y, x = svm_read_problem('../heart_scale')
>>> m = train(y[:200], x[:200], '-c 4')
>>> p_label, p_acc, p_val = predict(y[200:], x[200:], m)

# Construct problem in python format
# Dense data
>>> y, x = [1,-1], [[1,0,1], [-1,0,-1]]
# Sparse data
>>> y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}]
>>> prob = problem(y, x)
>>> param = parameter('-s 0 -c 4 -B 1')
>>> m = train(prob, param)

# Other utility functions
>>> save_model('heart_scale.model', m)
>>> m = load_model('heart_scale.model')
>>> p_label, p_acc, p_val = predict(y, x, m, '-b 1')
>>> ACC, MSE, SCC = evaluations(y, p_label)

# Getting online help
>>> help(train)

The low-level use directly calls C interfaces imported by liblinear.py. Note that
all arguments and return values are in ctypes format. You need to handle them
carefully.

>>> from liblinear.liblinear import *
>>> prob = problem([1,-1], [{1:1, 3:1}, {1:-1,3:-1}])
>>> param = parameter('-c 4')
>>> m = liblinear.train(prob, param) # m is a ctype pointer to a model
# Convert a Python-format instance to feature_nodearray, a ctypes structure
>>> x0, max_idx = gen_feature_nodearray({1:1, 3:1})
>>> label = liblinear.predict(m, x0)

Quick Start with Scipy
======================

Make sure you have Scipy installed to proceed in this section.
If numba (http://numba.pydata.org) is installed, some operations will be much faster.

There are two levels of usage. The high-level one uses utility functions
in liblinearutil.py and the usage is the same as the LIBLINEAR MATLAB interface.

>>> import numpy as np
>>> import scipy
>>> from liblinear.liblinearutil import *
# Read data in LIBSVM format
>>> y, x = svm_read_problem('../heart_scale', return_scipy = True) # y: ndarray, x: csr_matrix
>>> m = train(y[:200], x[:200, :], '-c 4')
>>> p_label, p_acc, p_val = predict(y[200:], x[200:, :], m)

# Construct problem in Scipy format
# Dense data: numpy ndarray
>>> y, x = np.asarray([1,-1]), np.asarray([[1,0,1], [-1,0,-1]])
# Sparse data: scipy csr_matrix((data, (row_ind, col_ind))
>>> y, x = np.asarray([1,-1]), scipy.sparse.csr_matrix(([1, 1, -1, -1], ([0, 0, 1, 1], [0, 2, 0, 2])))
>>> prob = problem(y, x)
>>> param = parameter('-s 0 -c 4 -B 1')
>>> m = train(prob, param)

# Apply data scaling in Scipy format
>>> y, x = svm_read_problem('../heart_scale', return_scipy=True)
>>> scale_param = csr_find_scale_param(x, lower=0)
>>> scaled_x = csr_scale(x, scale_param)

# Other utility functions
>>> save_model('heart_scale.model', m)
>>> m = load_model('heart_scale.model')
>>> p_label, p_acc, p_val = predict(y, x, m, '-b 1')
>>> ACC, MSE, SCC = evaluations(y, p_label)

# Getting online help
>>> help(train)

The low-level use directly calls C interfaces imported by liblinear.py. Note that
all arguments and return values are in ctypes format. You need to handle them
carefully.

>>> from liblinear.liblinear import *
>>> prob = problem(np.asarray([1,-1]), scipy.sparse.csr_matrix(([1, 1, -1, -1], ([0, 0, 1, 1], [0, 2, 0, 2]))))
>>> param = parameter('-s 1 -c 4')
# One may also direct assign the options after creating the parameter instance
>>> param = parameter()
>>> param.solver_type = 1
>>> param.C = 4
>>> m = liblinear.train(prob, param) # m is a ctype pointer to a model
# Convert a tuple of ndarray (index, data) to feature_nodearray, a ctypes structure
# Note that index starts from 0, though the following example will be changed to 1:1, 3:1 internally
>>> x0, max_idx = gen_feature_nodearray((np.asarray([0,2]), np.asarray([1,1])))
>>> label = liblinear.predict(m, x0)

Design Description
==================

There are two files liblinear.py and liblinearutil.py, which respectively correspond to
low-level and high-level use of the interface.

In liblinear.py, we adopt the Python built-in library "ctypes," so that
Python can directly access C structures and interface functions defined
in linear.h.

While advanced users can use structures/functions in liblinear.py, to
avoid handling ctypes structures, in liblinearutil.py we provide some easy-to-use
functions. The usage is similar to LIBLINEAR MATLAB interface.

Data Structures
===============

Three data structures derived from linear.h are node, problem, and
parameter. They all contain fields with the same names in
linear.h. Access these fields carefully because you directly use a C structure
instead of a Python object. The following description introduces additional
fields and methods.

Before using the data structures, execute the following command to load the
LIBLINEAR shared library:

>>> from liblinear.liblinear import *

- class feature_node:

Construct a feature_node.

>>> node = feature_node(idx, val)

idx: an integer indicates the feature index.

val: a float indicates the feature value.

Show the index and the value of a node.

>>> print(node)

- Function: gen_feature_nodearray(xi [,feature_max=None])

Generate a feature vector from a Python list/tuple/dictionary, numpy ndarray or tuple of (index, data):

>>> xi_ctype, max_idx = gen_feature_nodearray({1:1, 3:1, 5:-2})

xi_ctype: the returned feature_nodearray (a ctypes structure)

max_idx: the maximal feature index of xi

feature_max: if feature_max is assigned, features with indices larger than
feature_max are removed.

- class problem:

Construct a problem instance

>>> prob = problem(y, x [,bias=-1])

y: a Python list/tuple/ndarray of l labels (type must be int/double).

x: 1. a list/tuple of l training instances. Feature vector of
each training instance is a list/tuple or dictionary.

2. an l * n numpy ndarray or scipy spmatrix (n: number of features).

bias: if bias >= 0, instance x becomes [x; bias]; if < 0, no bias term
added (default -1)

You can also modify the bias value by

>>> prob.set_bias(1)

Note that if your x contains sparse data (i.e., dictionary), the internal
ctypes data format is still sparse.

Copy a problem instance.
DON'T use this unless you know what it does.

>>> prob_copy = prob.copy()

The reason we need to copy a problem instance is because, for example,
in multi-label tasks using the OVR setting, we need to train a binary
classification problem for each label on data with/without that label.
Since each training uses the same x but different y, simply looping
over labels and creating a new problem instance for each training would
introduce overhead either from repeatedly transforming x into feature_node
or from allocating additional memory space for x during parallel training.

With problem copying, suppose x represents data, y1 represents the label
for class 1 and y2 represent the label for class 2.
We can do:

>>> class1_prob = problem(y1, x)
>>> class2_prob = class1_prob.copy()
>>> class2_prob.y = (ctypes.c_double * class1_prob.l)(*y2)

Note that although the copied problem is a new instance, attributes such as
y (POINTER(c_double)), x (POINTER(POINTER(feature_node))), and x_space (list/np.ndarray)
are copied by reference. That is, class1_prob and class2_prob share the same
y, x and x_space after the copy.

- class parameter:

Construct a parameter instance

>>> param = parameter('training_options')

If 'training_options' is empty, LIBLINEAR default values are applied.

Set param to LIBLINEAR default values.

>>> param.set_to_default_values()

Parse a string of options.

>>> param.parse_options('training_options')

Show values of parameters.

>>> print(param)

- class model:

There are two ways to obtain an instance of model:

>>> model_ = train(y, x)
>>> model_ = load_model('model_file_name')

Note that the returned structure of interface functions
liblinear.train and liblinear.load_model is a ctypes pointer of
model, which is different from the model object returned
by train and load_model in liblinearutil.py. We provide a
function toPyModel for the conversion:

>>> model_ptr = liblinear.train(prob, param)
>>> model_ = toPyModel(model_ptr)

If you obtain a model in a way other than the above approaches,
handle it carefully to avoid memory leak or segmentation fault.

Some interface functions to access LIBLINEAR models are wrapped as
members of the class model:

>>> nr_feature = model_.get_nr_feature()
>>> nr_class = model_.get_nr_class()
>>> class_labels = model_.get_labels()
>>> is_prob_model = model_.is_probability_model()
>>> is_regression_model = model_.is_regression_model()

The decision function is W*x + b, where
W is an nr_class-by-nr_feature matrix, and
b is a vector of size nr_class.
To access W_kj (i.e., coefficient for the k-th class and the j-th feature)
and b_k (i.e., bias for the k-th class), use the following functions.

>>> W_kj = model_.get_decfun_coef(feat_idx=j, label_idx=k)
>>> b_k = model_.get_decfun_bias(label_idx=k)

We also provide a function to extract w_k (i.e., the k-th row of W) and
b_k directly as follows.

>>> [w_k, b_k] = model_.get_decfun(label_idx=k)

Note that w_k is a Python list of length nr_feature, which means that
w_k[0] = W_k1.
For regression models, W is just a vector of length nr_feature. Either
set label_idx=0 or omit the label_idx parameter to access the coefficients.

>>> W_j = model_.get_decfun_coef(feat_idx=j)
>>> b = model_.get_decfun_bias()
>>> [W, b] = model_.get_decfun()

For one-class SVM models, label_idx is ignored and b=-rho is
returned from get_decfun(). That is, the decision function is
w*x+b = w*x-rho.

>>> rho = model_.get_decfun_rho()
>>> [W, b] = model_.get_decfun()

Note that in get_decfun_coef, get_decfun_bias, and get_decfun, feat_idx
starts from 1, while label_idx starts from 0. If label_idx is not in the
valid range (0 to nr_class-1), then a NaN will be returned; and if feat_idx
is not in the valid range (1 to nr_feature), then a zero value will be
returned. For regression models, label_idx is ignored.

Utility Functions
=================

To use utility functions, type

>>> from liblinear.liblinearutil import *

The above command loads
train() : train a linear model
predict() : predict testing data
svm_read_problem() : read the data from a LIBSVM-format file or object.
load_model() : load a LIBLINEAR model.
save_model() : save model to a file.
evaluations() : evaluate prediction results.
csr_find_scale_param() : find scaling parameter for data in csr format.
csr_scale() : apply data scaling to data in csr format.

- Function: train

There are three ways to call train()

>>> model = train(y, x [, 'training_options'])
>>> model = train(prob [, 'training_options'])
>>> model = train(prob, param)

y: a list/tuple/ndarray of l training labels (type must be int/double).

x: 1. a list/tuple of l training instances. Feature vector of
each training instance is a list/tuple or dictionary.

2. an l * n numpy ndarray or scipy spmatrix (n: number of features).

training_options: a string in the same form as that for LIBLINEAR command
mode.

prob: a problem instance generated by calling
problem(y, x).

param: a parameter instance generated by calling
parameter('training_options')

model: the returned model instance. See linear.h for details of this
structure. If '-v' is specified, cross validation is
conducted and the returned model is just a scalar: cross-validation
accuracy for classification and mean-squared error for regression.

If the '-C' option is specified, best parameters are found
by cross validation. The parameter selection utility is supported
only by -s 0, -s 2 (for finding C) and -s 11 (for finding C, p).
The returned structure is a triple with the best C, the best p,
and the corresponding cross-validation accuracy or mean squared
error. The returned best p for -s 0 and -s 2 is set to -1 because
the p parameter is not used by classification models.


To train the same data many times with different
parameters, the second and the third ways should be faster..

Examples:

>>> y, x = svm_read_problem('../heart_scale')
>>> prob = problem(y, x)
>>> param = parameter('-s 3 -c 5 -q')
>>> m = train(y, x, '-c 5')
>>> m = train(prob, '-w1 5 -c 5')
>>> m = train(prob, param)
>>> CV_ACC = train(y, x, '-v 3')
>>> best_C, best_p, best_rate = train(y, x, '-C -s 0') # best_p is only for -s 11
>>> m = train(y, x, '-c {0} -s 0'.format(best_C)) # use the same solver: -s 0

- Function: predict

To predict testing data with a model, use

>>> p_labs, p_acc, p_vals = predict(y, x, model [,'predicting_options'])

y: a list/tuple/ndarray of l true labels (type must be int/double).
It is used for calculating the accuracy. Use [] if true labels are
unavailable.

x: 1. a list/tuple of l training instances. Feature vector of
each training instance is a list/tuple or dictionary.

2. an l * n numpy ndarray or scipy spmatrix (n: number of features).

predicting_options: a string of predicting options in the same format as
that of LIBLINEAR.

model: a model instance.

p_labels: a list of predicted labels

p_acc: a tuple including accuracy (for classification), mean
squared error, and squared correlation coefficient (for
regression).

p_vals: a list of decision values or probability estimates (if '-b 1'
is specified). If k is the number of classes, for decision values,
each element includes results of predicting k binary-class
SVMs. If k = 2 and solver is not MCSVM_CS, only one decision value
is returned. For probabilities, each element contains k values
indicating the probability that the testing instance is in each class.
Note that the order of classes here is the same as 'model.label'
field in the model structure.

Example:

>>> m = train(y, x, '-c 5')
>>> p_labels, p_acc, p_vals = predict(y, x, m)

- Functions: svm_read_problem/load_model/save_model

See the usage by examples:

>>> y, x = svm_read_problem('data.txt')
>>> with open('data.txt') as f:
>>> y, x = svm_read_problem(f)
>>> m = load_model('model_file')
>>> save_model('model_file', m)

- Function: evaluations

Calculate some evaluations using the true values (ty) and the predicted
values (pv):

>>> (ACC, MSE, SCC) = evaluations(ty, pv, useScipy)

ty: a list/tuple/ndarray of true values.

pv: a list/tuple/ndarray of predicted values.

useScipy: convert ty, pv to ndarray, and use scipy functions to do the evaluation

ACC: accuracy.

MSE: mean squared error.

SCC: squared correlation coefficient.

- Function: csr_find_scale_parameter/csr_scale

Scale data in csr format.

>>> param = csr_find_scale_param(x [, lower=l, upper=u])
>>> x = csr_scale(x, param)

x: a csr_matrix of data.

l: x scaling lower limit; default -1.

u: x scaling upper limit; default 1.

The scaling process is: x * diag(coef) + ones(l, 1) * offset'

param: a dictionary of scaling parameters, where param['coef'] = coef and param['offset'] = offset.

coef: a scipy array of scaling coefficients.

offset: a scipy array of scaling offsets.

Additional Information
======================

This interface was originally written by Hsiang-Fu Yu from Department of Computer
Science, National Taiwan University. If you find this tool useful, please
cite LIBLINEAR as follows

R.-E. Fan, K.-W. Chang, C.-J. Hsieh, X.-R. Wang, and C.-J. Lin.
LIBLINEAR: A Library for Large Linear Classification, Journal of
Machine Learning Research 9(2008), 1871-1874. Software available at
http://www.csie.ntu.edu.tw/~cjlin/liblinear

For any question, please contact Chih-Jen Lin <cjlin@csie.ntu.edu.tw>,
or check the FAQ page:

http://www.csie.ntu.edu.tw/~cjlin/liblinear/faq.html

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

liblinear_official-2.49.0.tar.gz (48.5 kB view details)

Uploaded Source

Built Distributions

liblinear_official-2.49.0-cp311-cp311-win_amd64.whl (59.5 kB view details)

Uploaded CPython 3.11Windows x86-64

liblinear_official-2.49.0-cp311-cp311-macosx_10_9_x86_64.whl (65.2 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

liblinear_official-2.49.0-cp310-cp310-win_amd64.whl (59.5 kB view details)

Uploaded CPython 3.10Windows x86-64

liblinear_official-2.49.0-cp310-cp310-macosx_10_9_x86_64.whl (65.2 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

liblinear_official-2.49.0-cp39-cp39-win_amd64.whl (59.5 kB view details)

Uploaded CPython 3.9Windows x86-64

liblinear_official-2.49.0-cp39-cp39-macosx_10_9_x86_64.whl (65.2 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

liblinear_official-2.49.0-cp38-cp38-win_amd64.whl (59.5 kB view details)

Uploaded CPython 3.8Windows x86-64

liblinear_official-2.49.0-cp38-cp38-macosx_10_9_x86_64.whl (65.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

liblinear_official-2.49.0-cp37-cp37m-win_amd64.whl (59.5 kB view details)

Uploaded CPython 3.7mWindows x86-64

liblinear_official-2.49.0-cp37-cp37m-macosx_10_9_x86_64.whl (65.2 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

liblinear_official-2.49.0-cp36-cp36m-win_amd64.whl (61.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

liblinear_official-2.49.0-cp36-cp36m-macosx_10_9_x86_64.whl (65.2 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file liblinear_official-2.49.0.tar.gz.

File metadata

  • Download URL: liblinear_official-2.49.0.tar.gz
  • Upload date:
  • Size: 48.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.8.10

File hashes

Hashes for liblinear_official-2.49.0.tar.gz
Algorithm Hash digest
SHA256 cee6ebbf8e2b5059586890be59733d52cae77695b1983574e116433bfbaca2d7
MD5 cdea9b7a32dc528c62a744842d7ba576
BLAKE2b-256 d0b6bc03cd81a56de2983f45d4bb6083ea887ca8a8a044a93865ec183da71a53

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e4ddcc1bbb985730375faa238ffd13ba2ce7322daae0cd9bbaf7fdc19272fc6d
MD5 37d1f37098d080608023f90d00f8f3fe
BLAKE2b-256 dea4636d51bcf73ed9f049ebf238a2bef4f8954b9ac4981fd097b01fb7182ba2

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 effda200632e7c03908830d54e12fe8ae2ca87a847cae3b0f1555808594015bc
MD5 c11cbca10ec09e389115838043cc07b1
BLAKE2b-256 9d3e27c58e1f6a35f6ebb05d677382865cf5ad4a55804087d7f224c7471f6f27

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 de85a28dc1fc02ebb0e54769e8ed5cbcfd6c06a4663d4ca66f4e44add3c448bc
MD5 884dc6637fc87440e4f38123f6885334
BLAKE2b-256 f0515f3a2ba711e95eee04e8ae0adbc5c06d9aaa64afd2a263aac2db8fe7311e

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8125fae15c85aa2bcdc1e76bda74cef6fbc73cc94f6b0856aab95ef47dea8983
MD5 f3e9898b08e26887f9ce4e3e9ca69df1
BLAKE2b-256 d6b459c1c1c2522b6234a8912b09a91d073ed8af7e036b5f17d449b016cd82ab

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9b46d980662ee5da7efde6201ed60cc3f2d78bc04e9c12de8e546a3c86c9fff9
MD5 5d2b831fece4f928235112f6ddfac7e5
BLAKE2b-256 36f9e977dcccbf2d263aa627be15c4245d8d203282c80caefd47f24286977a86

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0629b3443f29ec6416905b2481c9ec6d9ef7e6f0061014da8d647e5906d6ede3
MD5 abd726e00266825cfe99f76021363c74
BLAKE2b-256 0ea42f83ada4f8d2ce7d82a1ed4c2a4a6d958a9935842ad85d1da04822a00cf7

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8c68f008566f5e0a90c7e1ef897f84f58c501e0ae7e1b40233bf0c404675635e
MD5 0f1fe2df3b647b8a9e9ea0fdcf67d15a
BLAKE2b-256 19c686680bd4c7ece6454f9cf20d77403a93c5cb3cc2c2a7b3e2fb13851223e9

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2a9b7be81d6c4be19555052e2e6ce8b25393d574cbc44f86ee0d134e2cc3eb03
MD5 dbf6bb09f36f98f9847807a201d8300b
BLAKE2b-256 f4857e91af776e3aec77095cd307860fa22943f45fbb4f5aa58311231fb97427

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 9dea5e78c0faa77d8ae111132d7326b227fa848c220a17902b6751c240e23c69
MD5 0347881928d4fe4e1c92fdc96915ed79
BLAKE2b-256 9095ea6677e2de2c7827ea0d5be0420b83fa282b30b2f15df129dfbee23af345

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 eb951c5327ffd94821feab4aeda0fce3b5f350b363092e38fd1c5295b1d46301
MD5 80c0e9c19dc4346b3beea9fa20cbbdd8
BLAKE2b-256 7ce9c96ae5e8658b83b36fa55f7621ca259a51bfecaedde3f8fc04688d076bbc

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 1f6e8be65e2d1a04a78efb33aa3d62364f6305db55381bcc25c7753ff7c54797
MD5 1bb5f63f98f4980f5e5c5222aa66eaf1
BLAKE2b-256 1e8fa1da74cb5c0b4e4d1a3c764892454f0b86132ff1d7180d415b5d3f7b7d2e

See more details on using hashes here.

File details

Details for the file liblinear_official-2.49.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for liblinear_official-2.49.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4034d378e545d5dce2a5d74d192e75f41a435ceed6fcc99e7292ffb58163d98
MD5 355e585d58a0e974f94df2a00ba812a8
BLAKE2b-256 2959f02ba61fadf2871113e59b763fd3985aa9d01c7b74d13644b13063ac51a3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page