kde_gpu
Kernel density estimator using Nadaraya-Watson with GPU (CUDA)
Author
Chen Chen
Running Environment Setup
You have to have cupy installed to be able to use GPU!! See https://github.com/cupy/cupy
Similar to scipy.kde_gaussian and statsmodels.nonparametric.kernel_density.KDEMultivariateConditional, we implemented nadaraya waston kernel density and kernel conditional probability estimator using cuda through cupy. However, it is much faster than cpu version and it maximise the use of GPU memory.
-
Make a folder with name "data" in current directory. Then copy ORL and CroppedYaleB dataset inside. Please make sure you have the following file tree structure:
|--- kde_gpu\
***|--- version.py \
***|--- nadaraya_watson.py \
***|--- conditional_probability.py \
*|--- setup.py \
*|--- example.py \
*|--- README.md \ -
Install
kde_gpuwith following command: (Please usepip3if the defaultpythonin your computer ispython2)$ pip install -e .
This command will run setup.py where we specify the dependencies required to run nmf. The dependencies we require are:
"scipy>=1.0.0",
"pandas>=0.20.2",
Please note that if the version number of installed package in your machine is lower than the stated version number, pip will uninstall your out-of-date package and install the one with version number greater than or equal to the stated one in setup.py.
Example
"""
@author: chen.chen.adl@gmail.com
"""
#import kernel_smoothing
from scipy import stats
import pandas as pd
import cupy as cp
import numpy as np
import time
rv = stats.expon(0,1)
x = rv.rvs(size=10000)
density_real = rv.pdf(x)
t1=time.time()
kde_scipy=stats.gaussian_kde(x.T,bw_method='silverman')
kde_scipy=kde_scipy(x.T)
print(time.time()-t1)
t1=time.time()
kde_cupy=kde(cp.asarray(x.T),bw_method='silverman')
print(time.time()-t1)
df = pd.DataFrame({'x1':x,'kde_scipy':kde_scipy,
'kde_cupy':cp.asnumpy(kde_cupy).squeeze(),'real density':density_real})
df['scipy_mean_absolute_error']=np.abs(df['kde_scipy']-df['real density'])
df['cupy_mean_absolute_error']=np.abs(df['kde_cupy']-df['real density'])
print(df.mean())
rv = stats.truncnorm(-3,2,30,10)
nsample=10000
x = cp.asarray(rv.rvs(nsample))
ycondx = cp.asarray(cp.random.rand(nsample))
y = 10*(ycondx-0.5)+x
cdf_conditional_real = ycondx
df = pd.DataFrame({'y':cp.asnumpy(y),'x':cp.asnumpy(x),'real density':cp.asnumpy(cdf_conditional_real)})
df['nadaraya watson']= kernel_smoothing_ecdf(y,x)
df['nw_error']=np.abs(df['nadaraya watson']-df['real density'])
df.mean()
Metadata
Release files for kde-gpu 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| kde_gpu-0.1.0.tar.gz | 4.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kde_gpu-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.4 kB
Release files / kde_gpu-0.1.0.tar.gz
| Download URL | kde_gpu-0.1.0.tar.gz |
|---|---|
| Size | 4.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a0215e21b1b2a2adcf3e91d145e4571bea36367a692220c7f5e7a825cca44031
|
|
BLAKE2b-256 checksum How to use checksums |
d9fe410d24e280428efcbbabaf32f12673d2d868329cb0a70a3544d9bab46b70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5
|
Release files / kde_gpu-0.1.0-py3-none-any.whl
| Download URL | kde_gpu-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d103109fe47e3d0723ff32f7e3669556e4cdb9cdef9891000d8a0fdfead38d8b
|
|
BLAKE2b-256 checksum How to use checksums |
a2335e976fc5e4eece71b16d36280924d99c77d2f58e20dc445ca4eb9b22276e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5
|
Security for kde-gpu 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.