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, the shared library liblinear.dll is ready in the
directory `..\windows' and you can directly run the interface in
the current python directory. You can copy liblinear.dll to the
system directory (e.g., `C:\WINDOWS\system32\') to make it
system-widely available. To regenerate liblinear.dll, please
follow the instruction of building Windows binaries in LIBLINEAR
README.

- 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('-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.

- 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.
load_model() : load a LIBLINEAR model.
save_model() : save model to a file.
evaluations() : evaluate prediction results.

- 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')
>>> 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.46.1.tar.gz (46.9 kB view details)

Uploaded Source

Built Distributions

liblinear_official-2.46.1-cp311-cp311-win_amd64.whl (57.2 kB view details)

Uploaded CPython 3.11 Windows x86-64

liblinear_official-2.46.1-cp311-cp311-macosx_10_9_x86_64.whl (65.8 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

liblinear_official-2.46.1-cp310-cp310-win_amd64.whl (58.0 kB view details)

Uploaded CPython 3.10 Windows x86-64

liblinear_official-2.46.1-cp310-cp310-macosx_10_9_x86_64.whl (65.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

liblinear_official-2.46.1-cp39-cp39-win_amd64.whl (58.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

liblinear_official-2.46.1-cp39-cp39-macosx_10_9_x86_64.whl (65.8 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

liblinear_official-2.46.1-cp38-cp38-win_amd64.whl (58.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

liblinear_official-2.46.1-cp38-cp38-macosx_10_9_x86_64.whl (65.8 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

liblinear_official-2.46.1-cp37-cp37m-win_amd64.whl (58.0 kB view details)

Uploaded CPython 3.7m Windows x86-64

liblinear_official-2.46.1-cp37-cp37m-macosx_10_9_x86_64.whl (65.8 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

liblinear_official-2.46.1-cp36-cp36m-win_amd64.whl (59.5 kB view details)

Uploaded CPython 3.6m Windows x86-64

liblinear_official-2.46.1-cp36-cp36m-macosx_10_9_x86_64.whl (65.8 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file liblinear-official-2.46.1.tar.gz.

File metadata

  • Download URL: liblinear-official-2.46.1.tar.gz
  • Upload date:
  • Size: 46.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.12

File hashes

Hashes for liblinear-official-2.46.1.tar.gz
Algorithm Hash digest
SHA256 c87a70c7355e75727884b7003ccfedaf384af63fcb7406f9a6f3970d880dfe3d
MD5 59f0b9fff1c1641ce7c4ff00b6edf9aa
BLAKE2b-256 b6355bc429b4227d2399c88764a1fd0aea7b7446bf37e4b428667470dea6e138

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5f269d07515c1d7cd15050accedba71ee926d56cdb822c8fa38694219ca995ff
MD5 fea1e939a9e23d30d0515042b1965dd8
BLAKE2b-256 9cf4bffa004f29793de17b702a5c97e7c8576937914abb1b07af8ae196cb6afc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dd6a9e053ede2b1eb47fc0e6e9b4282008a4947b1fce4289feff6e1fbc36c182
MD5 6fc1098ce7bc15350b0bb4a884e0a41e
BLAKE2b-256 11c0e326e2363242706b7d383ceb17d058bf2ff99db4760cd5d97983230e87d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 52d08ea67a6e4c1230b7674282fbfa1b65169f6688fdd44ac2af496ca8a8ac48
MD5 443f46e75b8f92bee95863d4a58024d6
BLAKE2b-256 6a80e0bd3aeb40a99d843567aca3f3aa4a54b5c2957dd70c36ff5282e994a740

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 02db2f636542e7e41c472dd8935e5fc634277266085f63c5123a2939163631c0
MD5 028d0dd1b9334b4bd3bc19a9932fb2b9
BLAKE2b-256 0c38394aee5940b0dda2bf8320f4a41794ac50dcea9aab46e198a011d86a298b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ba945bd0e0e09026c6e639c335bad3d0b79a2b31a5b39ad221ca2f2eae47207a
MD5 aa1010ecd4dd59060bf92f60858ebdba
BLAKE2b-256 99ca70f36840502e02ccf3cbb69244e8a49aa0a42a58939647e0cafc8a467564

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 12c7908ae1fed8aa9e5924f572ae4c066ee8cd6613da6f650fe82b15b9e61dac
MD5 276b3b9787c7249a88a7ec9f65e5a964
BLAKE2b-256 6880ff3a60c42d0519ec054126bd40bc75e0d0a6498b4f4c8d0928bdc5bb7987

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8d9b90c2f78a6cf78bc64fa9b4712bb6e6178d0f27cfcaadbb844e06d346dc2c
MD5 4b94f4ebd6bf26a095af2dd1a2691ac0
BLAKE2b-256 9f7b9b554d1e02757bd900327c231ec9eaddd423ac71af1a5341915289c41c46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 267eb84fc68a094999a73b1ac076fe46184196299a678445aff794138061309b
MD5 7c73d90e714afef7510cb1aafae9e66f
BLAKE2b-256 f66f82d53ee5dc40ac9e27ead879f4118fb18dba6536711141676e158312cffa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8e5d924103de1fd776487b9fea2b261ee1c859c1aa1219ff182170600695a40c
MD5 0d76dc2ae5f7cd525751aeb567b0ab1a
BLAKE2b-256 00157f41375528b3cf9740b3c5174c57c998fcf10a454c903cf00c86e58d8ab2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a2c52b8962116338ba4f520cf99a74cb023a695ea172a292f6c40b7caeacb7fa
MD5 708f478994587cd91650b1019271e541
BLAKE2b-256 ee2a77ff6e2d28766c7874910d5662b46bf2964eb6554a6c3ffce7863f639c32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 b675f94ce39cd58de23142114c45ede7eec9c32788856c6d5d67c5392a5a30e5
MD5 89c2a9b730555f3e52e7b5f6f1a24873
BLAKE2b-256 1adba3c014e61a4f5dd377a382670d9dc58c2d747812ecb70921409facce5015

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for liblinear_official-2.46.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8480d5bcb92c082b113680168dc13e0ca37c940a7a43d6bcb9220b7f7904e05f
MD5 492b45a26a7295daead142933e9c3790
BLAKE2b-256 e7bfc9e1a1c0225a179dfaf1caba62432fb5665cb97b88ccbbe1875af92940fb

See more details on using hashes here.

Supported by

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