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()
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 | |
|---|---|---|---|
| kde_gpu-0.1.0.tar.gz | 4.4 kB | 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
|