Skip to main content

Python binding of LIBSVM

Project description

----------------------------------
--- Python interface of LIBSVM ---
----------------------------------

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 LIBSVM, a library
for support vector machines (http://www.csie.ntu.edu.tw/~cjlin/libsvm). The
interface is very easy to use as the usage is the same as that of LIBSVM. 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 libsvm-official

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

Alternatively, you may install the interface from sources by
generating the LIBSVM 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 LIBSVM main directory and you
can run the interface in the current python directory.

For Windows, the shared library libsvm.dll is ready in the
directory `..\windows' and you can directly run the interface in
the current python directory. You can copy libsvm.dll to the
system directory (e.g., `C:\WINDOWS\system32\') to make it
system-widely available. To regenerate libsvm.dll, please
follow the instruction of building Windows binaries in LIBSVM
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 svmutil.py and commonutil.py (shared with LIBLINEAR and
imported by svmutil.py). The usage is the same as the LIBSVM MATLAB
interface.

>>> from libsvm.svmutil import *
# Read data in LIBSVM format
>>> y, x = svm_read_problem('../heart_scale')
>>> m = svm_train(y[:200], x[:200], '-c 4')
>>> p_label, p_acc, p_val = svm_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 = svm_problem(y, x)
>>> param = svm_parameter('-t 0 -c 4 -b 1')
>>> m = svm_train(prob, param)

# Precomputed kernel data (-t 4)
# Dense data
>>> y, x = [1,-1], [[1, 2, -2], [2, -2, 2]]
# Sparse data
>>> y, x = [1,-1], [{0:1, 1:2, 2:-2}, {0:2, 1:-2, 2:2}]
# isKernel=True must be set for precomputed kernel
>>> prob = svm_problem(y, x, isKernel=True)
>>> param = svm_parameter('-t 4 -c 4 -b 1')
>>> m = svm_train(prob, param)
# For the format of precomputed kernel, please read LIBSVM README.


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

# Getting online help
>>> help(svm_train)

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

>>> from libsvm.svm import *
>>> prob = svm_problem([1,-1], [{1:1, 3:1}, {1:-1,3:-1}])
>>> param = svm_parameter('-c 4')
>>> m = libsvm.svm_train(prob, param) # m is a ctype pointer to an svm_model
# Convert a Python-format instance to svm_nodearray, a ctypes structure
>>> x0, max_idx = gen_svm_nodearray({1:1, 3:1})
>>> label = libsvm.svm_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 svmutil.py and the usage is the same as the LIBSVM MATLAB interface.

>>> import numpy as np
>>> import scipy
>>> from libsvm.svmutil import *
# Read data in LIBSVM format
>>> y, x = svm_read_problem('../heart_scale', return_scipy = True) # y: ndarray, x: csr_matrix
>>> m = svm_train(y[:200], x[:200, :], '-c 4')
>>> p_label, p_acc, p_val = svm_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 = svm_problem(y, x)
>>> param = svm_parameter('-t 0 -c 4 -b 1')
>>> m = svm_train(prob, param)

# Precomputed kernel data (-t 4)
# Dense data: numpy ndarray
>>> y, x = np.asarray([1,-1]), np.asarray([[1,2,-2], [2,-2,2]])
# Sparse data: scipy csr_matrix((data, (row_ind, col_ind))
>>> y, x = np.asarray([1,-1]), scipy.sparse.csr_matrix(([1, 2, -2, 2, -2, 2], ([0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2])))
# isKernel=True must be set for precomputed kernel
>>> prob = svm_problem(y, x, isKernel=True)
>>> param = svm_parameter('-t 4 -c 4 -b 1')
>>> m = svm_train(prob, param)
# For the format of precomputed kernel, please read LIBSVM README.

# 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
>>> svm_save_model('heart_scale.model', m)
>>> m = svm_load_model('heart_scale.model')
>>> p_label, p_acc, p_val = svm_predict(y, x, m, '-b 1')
>>> ACC, MSE, SCC = evaluations(y, p_label)

# Getting online help
>>> help(svm_train)

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

>>> from libsvm.svm import *
>>> prob = svm_problem(np.asarray([1,-1]), scipy.sparse.csr_matrix(([1, 1, -1, -1], ([0, 0, 1, 1], [0, 2, 0, 2]))))
>>> param = svm_parameter('-c 4')
>>> m = libsvm.svm_train(prob, param) # m is a ctype pointer to an svm_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_svm_nodearray((np.asarray([0,2]), np.asarray([1,1])))
>>> label = libsvm.svm_predict(m, x0)

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

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

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

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

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

Four data structures derived from svm.h are svm_node, svm_problem, svm_parameter,
and svm_model. They all contain fields with the same names in svm.h. Access
these fields carefully because you directly use a C structure instead of a
Python object. For svm_model, accessing the field directly is not recommanded.
Programmers should use the interface functions or methods of svm_model class
in Python to get the values. The following description introduces additional
fields and methods.

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

>>> from libsvm.svm import *

- class svm_node:

Construct an svm_node.

>>> node = svm_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_svm_nodearray(xi [,feature_max=None [,isKernel=False]])

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

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

xi_ctype: the returned svm_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.

isKernel: if isKernel == True, the list index starts from 0 for precomputed
kernel. Otherwise, the list index starts from 1. The default
value is False.

- class svm_problem:

Construct an svm_problem instance

>>> prob = svm_problem(y, x)

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).

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

For pre-computed kernel, the isKernel flag should be set to True:

>>> prob = svm_problem(y, x, isKernel=True)

Please read LIBSVM README for more details of pre-computed kernel.

- class svm_parameter:

Construct an svm_parameter instance

>>> param = svm_parameter('training_options')

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

Set param to LIBSVM default values.

>>> param.set_to_default_values()

Parse a string of options.

>>> param.parse_options('training_options')

Show values of parameters.

>>> print(param)

- class svm_model:

There are two ways to obtain an instance of svm_model:

>>> model = svm_train(y, x)
>>> model = svm_load_model('model_file_name')

Note that the returned structure of interface functions
libsvm.svm_train and libsvm.svm_load_model is a ctypes pointer of
svm_model, which is different from the svm_model object returned
by svm_train and svm_load_model in svmutil.py. We provide a
function toPyModel for the conversion:

>>> model_ptr = libsvm.svm_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 LIBSVM models are wrapped as
members of the class svm_model:

>>> svm_type = model.get_svm_type()
>>> nr_class = model.get_nr_class()
>>> svr_probability = model.get_svr_probability()
>>> class_labels = model.get_labels()
>>> sv_indices = model.get_sv_indices()
>>> nr_sv = model.get_nr_sv()
>>> is_prob_model = model.is_probability_model()
>>> support_vector_coefficients = model.get_sv_coef()
>>> support_vectors = model.get_SV()

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

To use utility functions, type

>>> from libsvm.svmutil import *

The above command loads
svm_train() : train an SVM model
svm_predict() : predict testing data
svm_read_problem() : read the data from a LIBSVM-format file.
svm_load_model() : load a LIBSVM model.
svm_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: svm_train

There are three ways to call svm_train()

>>> model = svm_train(y, x [, 'training_options'])
>>> model = svm_train(prob [, 'training_options'])
>>> model = svm_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 LIBSVM command
mode.

prob: an svm_problem instance generated by calling
svm_problem(y, x).
For pre-computed kernel, you should use
svm_problem(y, x, isKernel=True)

param: an svm_parameter instance generated by calling
svm_parameter('training_options')

model: the returned svm_model instance. See svm.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.

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 = svm_problem(y, x)
>>> param = svm_parameter('-s 3 -c 5 -h 0')
>>> m = svm_train(y, x, '-c 5')
>>> m = svm_train(prob, '-t 2 -c 5')
>>> m = svm_train(prob, param)
>>> CV_ACC = svm_train(y, x, '-v 3')

- Function: svm_predict

To predict testing data with a model, use

>>> p_labs, p_acc, p_vals = svm_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 LIBSVM.

model: an svm_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 in training data,
for decision values, each element includes results of predicting
k(k-1)/2 binary-class SVMs. For classification, k = 1 is a
special case. Decision value [+1] is returned for each testing
instance, instead of an empty list.
For probabilities, each element contains k values indicating
the probability that the testing instance is in each class.
For one-class SVM, the list has two elements indicating the
probabilities of normal instance/outlier.
Note that the order of classes is the same as the 'model.label'
field in the model structure.

Example:

>>> m = svm_train(y, x, '-c 5')
>>> p_labels, p_acc, p_vals = svm_predict(y, x, m)

- Functions: svm_read_problem/svm_load_model/svm_save_model

See the usage by examples:

>>> y, x = svm_read_problem('data.txt')
>>> m = svm_load_model('model_file')
>>> svm_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 LIBSVM as follows

Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support
vector machines. ACM Transactions on Intelligent Systems and
Technology, 2:27:1--27:27, 2011. Software available at
http://www.csie.ntu.edu.tw/~cjlin/libsvm

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/libsvm/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

libsvm_official-3.35.0.tar.gz (39.8 kB view details)

Uploaded Source

Built Distributions

libsvm_official-3.35.0-cp311-cp311-win_amd64.whl (54.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

libsvm_official-3.35.0-cp311-cp311-macosx_10_9_x86_64.whl (213.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

libsvm_official-3.35.0-cp310-cp310-win_amd64.whl (54.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

libsvm_official-3.35.0-cp310-cp310-macosx_10_9_x86_64.whl (213.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

libsvm_official-3.35.0-cp39-cp39-win_amd64.whl (54.7 kB view details)

Uploaded CPython 3.9 Windows x86-64

libsvm_official-3.35.0-cp39-cp39-macosx_10_9_x86_64.whl (213.7 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

libsvm_official-3.35.0-cp38-cp38-win_amd64.whl (54.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

libsvm_official-3.35.0-cp38-cp38-macosx_10_9_x86_64.whl (213.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

libsvm_official-3.35.0-cp37-cp37m-win_amd64.whl (54.7 kB view details)

Uploaded CPython 3.7m Windows x86-64

libsvm_official-3.35.0-cp37-cp37m-macosx_10_9_x86_64.whl (213.7 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

libsvm_official-3.35.0-cp36-cp36m-win_amd64.whl (55.7 kB view details)

Uploaded CPython 3.6m Windows x86-64

libsvm_official-3.35.0-cp36-cp36m-macosx_10_9_x86_64.whl (213.8 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file libsvm_official-3.35.0.tar.gz.

File metadata

  • Download URL: libsvm_official-3.35.0.tar.gz
  • Upload date:
  • Size: 39.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for libsvm_official-3.35.0.tar.gz
Algorithm Hash digest
SHA256 3432bb74ea9c1e0c0553fc5079f1e8a703307489d3e9ffd4adcf0152d38d6966
MD5 5d6d7a8b544b1280095d6142966d4780
BLAKE2b-256 fa2409d84165dfcefa768e6e5e49aef8925a1d8dea4629646e6191c0b9bae424

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 794e7a2bdff2e5e0ce5cd073b2d737f9ccc60724eb903583b46312cda0fc9dfb
MD5 574bbb7f7a3915f70eba02c8cead89b6
BLAKE2b-256 45cff318e56133d9f0763e5fb9e07dfb3a101753bec0074ecd3a22ed010fd9a6

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cb2cdc4570c5d35df67d5b825bae55cdbda02ea5b37d5cc76b26738b369790be
MD5 4c950bf8f99ee087eeee071ee9f574f8
BLAKE2b-256 0e9ad4e791b693adb24357cc46e3d52a00e6b0b9fd9f15e40abcad7ddc36c703

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 67096e0143b0b9be0bd42fab7bcdd3d5dcb51d15f2de1f6064c9cfbd77418bd5
MD5 5239d1a6584ec952c14e68b91a859feb
BLAKE2b-256 5bf42bb81f8d0a5d8ed00b3c752eecce97a6383eca5804f5d9deda015b80bc28

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a6c66c1cbf391a037782f5eef64c8432baa25cc0815f2f85b3f5210c7d2973ca
MD5 ddbaf43d058ebdbc5ae672fa65d4a443
BLAKE2b-256 52edd36293a68455b61b287eb9f6418aa574b0a91a48be3174cc20b041bca88f

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9011fc1b27faa03c939484562bb1979c2d836522a99388e8cc44fed461a2f051
MD5 b93cd08cc55a7917914d7553997f650d
BLAKE2b-256 139631a28e85ba5048505a8971495cdfa9b6695f22f2b8d925ced0a51096ff0a

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dec0c9366dd719fd362249977c1340db1133d578de641c82d30e3718ec5c92d7
MD5 85691d8e3d36e6c14783e85417c2bc20
BLAKE2b-256 66d1715f351f53a67e0a60644c5d01bd0b7498ca40069b0fb9089e97f01228c4

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 a020ed4387fe75821f07a544895ec704c5d43d7bb270e7938b686b93ca3ff2df
MD5 4c15591419b745ccb07106d8d5be47e9
BLAKE2b-256 6dc0580a90cc0148f6dc045e3f010bb744b7e6b64f9ac8e0ca0481adc1f1c1f6

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8452cc2fe13f23945439fc5eeb311aaa3981b545dac59f8df3ac77edd7f773fc
MD5 d6bec16cd34944e3f14b52804bec1b5c
BLAKE2b-256 70cdbd9bf83b543070cc6d825cdcc3c9e427b4de8da858f95aa92bec941b845b

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 b57f5f484c16623b10e8e81a83bc29cd7d4b9fe60206b1ac19688c65fea1c982
MD5 ba5083562d9ee5a2a8eaec21ef68bd30
BLAKE2b-256 cb1c450155c33c2aa17afc609fd378c0c2d0110a5f74a7bdf62491350a5c38b9

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7dba54fc42f398bb1400f289f454d3fed09278fdbb9f5088c44f6b7b8f5354a0
MD5 0ee8bb36ce48dbaabea646d6f63875f9
BLAKE2b-256 46f2a2f7dd8f6a09e72fdd21d43d9757b5d03bbbbec667073748822577a753b6

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 c733816849e11f3114724fbe2e44ad58e758add53eb099fe5e2accf1c03b3b42
MD5 611d4ff702c13321711760b41bd1af98
BLAKE2b-256 53e600ae6e5db6aca47f92a4d037485965d244bc6592e2899ae70538ccf66c6d

See more details on using hashes here.

File details

Details for the file libsvm_official-3.35.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for libsvm_official-3.35.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 80b7f2d3c19b954ee672afc62c86b03c4ad74c492490544ef5c537d27c2526bc
MD5 f7da6371068a582c46e2b2d865451fd7
BLAKE2b-256 4582aeaff627516e28586575b9b63d4b88949e74fb4b35ef33c57bff3ca0b912

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