|
|
@ -7,26 +7,26 @@ from __future__ import division
|
|
|
|
import unittest
|
|
|
|
import unittest
|
|
|
|
import numpy as np
|
|
|
|
import numpy as np
|
|
|
|
from numpy.testing import assert_allclose
|
|
|
|
from numpy.testing import assert_allclose
|
|
|
|
from numpy import array, inf
|
|
|
|
import wafo.objects as wo
|
|
|
|
import wafo.kdetools as wk
|
|
|
|
import wafo.kdetools as wk
|
|
|
|
|
|
|
|
import scipy.stats as st
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestKdeTools(unittest.TestCase):
|
|
|
|
class TestKde(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
def setUp(self):
|
|
|
|
|
|
|
|
|
|
|
|
# N = 20
|
|
|
|
# N = 20
|
|
|
|
# data = np.random.rayleigh(1, size=(N,))
|
|
|
|
# data = np.random.rayleigh(1, size=(N,))
|
|
|
|
self.data = array([0.75355792, 0.72779194, 0.94149169, 0.07841119,
|
|
|
|
self.data = np.array([0.75355792, 0.72779194, 0.94149169, 0.07841119,
|
|
|
|
2.32291887, 1.10419995, 0.77055114, 0.60288273,
|
|
|
|
2.32291887, 1.10419995, 0.77055114, 0.60288273,
|
|
|
|
1.36883635, 1.74754326, 1.09547561, 1.01671133,
|
|
|
|
1.36883635, 1.74754326, 1.09547561, 1.01671133,
|
|
|
|
0.73211143, 0.61891719, 0.75903487, 1.8919469,
|
|
|
|
0.73211143, 0.61891719, 0.75903487, 1.8919469,
|
|
|
|
0.72433808, 1.92973094, 0.44749838, 1.36508452])
|
|
|
|
0.72433808, 1.92973094, 0.44749838, 1.36508452])
|
|
|
|
self.x = np.linspace(0, max(self.data) + 1, 10)
|
|
|
|
self.x = np.linspace(0, max(self.data) + 1, 10)
|
|
|
|
|
|
|
|
|
|
|
|
def test0_KDE1D(self):
|
|
|
|
def test0_KDE1D(self):
|
|
|
|
data, x = self.data, self.x
|
|
|
|
data, x = self.data, self.x
|
|
|
|
# kde = wk.KDE(data, hs=0.5, alpha=0.5)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kde0 = wk.KDE(data, hs=0.5, alpha=0.0, inc=16)
|
|
|
|
kde0 = wk.KDE(data, hs=0.5, alpha=0.0, inc=16)
|
|
|
|
|
|
|
|
|
|
|
@ -36,7 +36,6 @@ class TestKdeTools(unittest.TestCase):
|
|
|
|
0.08270612, 0.02991145, 0.00720821])
|
|
|
|
0.08270612, 0.02991145, 0.00720821])
|
|
|
|
|
|
|
|
|
|
|
|
fx = kde0.eval_grid(x, r=1)
|
|
|
|
fx = kde0.eval_grid(x, r=1)
|
|
|
|
|
|
|
|
|
|
|
|
assert_allclose(-fx, [0.11911419724002906, 0.13440000694772541,
|
|
|
|
assert_allclose(-fx, [0.11911419724002906, 0.13440000694772541,
|
|
|
|
0.044400116190638696, -0.0677695267531197,
|
|
|
|
0.044400116190638696, -0.0677695267531197,
|
|
|
|
-0.09555596523854318, -0.07498819087690148,
|
|
|
|
-0.09555596523854318, -0.07498819087690148,
|
|
|
@ -125,6 +124,13 @@ class TestKdeTools(unittest.TestCase):
|
|
|
|
0.16555235, 0.0541248])
|
|
|
|
0.16555235, 0.0541248])
|
|
|
|
|
|
|
|
|
|
|
|
assert_allclose(np.trapz(f, x), 0.97323338046725172)
|
|
|
|
assert_allclose(np.trapz(f, x), 0.97323338046725172)
|
|
|
|
|
|
|
|
f0 = kde(output='plot')
|
|
|
|
|
|
|
|
self.assertIsInstance(f0, wo.PlotData)
|
|
|
|
|
|
|
|
assert_allclose(np.trapz(f0.data, f0.args), 0.9319800260106625)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f0 = kde.eval_grid_fast(output='plot')
|
|
|
|
|
|
|
|
self.assertIsInstance(f0, wo.PlotData)
|
|
|
|
|
|
|
|
assert_allclose(np.trapz(f0.data, f0.args), 0.9319799696210691)
|
|
|
|
|
|
|
|
|
|
|
|
def test1a_KDE1D(self):
|
|
|
|
def test1a_KDE1D(self):
|
|
|
|
data, x = self.data, self.x
|
|
|
|
data, x = self.data, self.x
|
|
|
@ -136,7 +142,15 @@ class TestKdeTools(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
|
|
assert_allclose(np.trapz(f, x), 0.92938023659047952)
|
|
|
|
assert_allclose(np.trapz(f, x), 0.92938023659047952)
|
|
|
|
|
|
|
|
|
|
|
|
def test2a_KDE1D(self):
|
|
|
|
f0 = kde(output='plot')
|
|
|
|
|
|
|
|
self.assertIsInstance(f0, wo.PlotData)
|
|
|
|
|
|
|
|
assert_allclose(np.trapz(f0.data, f0.args), 0.9871189376720593)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f0 = kde.eval_grid_fast(output='plot')
|
|
|
|
|
|
|
|
self.assertIsInstance(f0, wo.PlotData)
|
|
|
|
|
|
|
|
assert_allclose(np.trapz(f0.data, f0.args), 0.9962507385131669)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test2a_KDE_1D_hs_5_alpha_5(self):
|
|
|
|
# data, x = self.data, self.x
|
|
|
|
# data, x = self.data, self.x
|
|
|
|
data = np.asarray([1, 2])
|
|
|
|
data = np.asarray([1, 2])
|
|
|
|
x = np.linspace(0, max(np.ravel(data)) + 1, 10)
|
|
|
|
x = np.linspace(0, max(np.ravel(data)) + 1, 10)
|
|
|
@ -151,7 +165,7 @@ class TestKdeTools(unittest.TestCase):
|
|
|
|
def test_KDE2D(self):
|
|
|
|
def test_KDE2D(self):
|
|
|
|
# N = 20
|
|
|
|
# N = 20
|
|
|
|
# data = np.random.rayleigh(1, size=(2, N))
|
|
|
|
# data = np.random.rayleigh(1, size=(2, N))
|
|
|
|
data = array([
|
|
|
|
data = np.array([
|
|
|
|
[0.38103275, 0.35083136, 0.90024207, 1.88230239, 0.96815399,
|
|
|
|
[0.38103275, 0.35083136, 0.90024207, 1.88230239, 0.96815399,
|
|
|
|
0.57392873, 1.63367908, 1.20944125, 2.03887811, 0.81789145,
|
|
|
|
0.57392873, 1.63367908, 1.20944125, 2.03887811, 0.81789145,
|
|
|
|
0.69302049, 1.40856592, 0.92156032, 2.14791432, 2.04373821,
|
|
|
|
0.69302049, 1.40856592, 0.92156032, 2.14791432, 2.04373821,
|
|
|
@ -176,269 +190,125 @@ class TestKdeTools(unittest.TestCase):
|
|
|
|
]
|
|
|
|
]
|
|
|
|
assert_allclose(kde0.eval_grid_fast(x, x), t)
|
|
|
|
assert_allclose(kde0.eval_grid_fast(x, x), t)
|
|
|
|
|
|
|
|
|
|
|
|
def test_gridcount_1D(self):
|
|
|
|
|
|
|
|
data, x = self.data, self.x
|
|
|
|
|
|
|
|
dx = x[1] - x[0]
|
|
|
|
|
|
|
|
c = wk.gridcount(data, x)
|
|
|
|
|
|
|
|
assert_allclose(c, [0.78762626, 1.77520717, 7.99190087, 4.04054449,
|
|
|
|
|
|
|
|
1.67156643, 2.38228499, 1.05933195, 0.29153785, 0.,
|
|
|
|
|
|
|
|
0.])
|
|
|
|
|
|
|
|
t = np.trapz(c / dx / len(data), x)
|
|
|
|
|
|
|
|
assert_allclose(t, 0.9803093435140049)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_gridcount_2D(self):
|
|
|
|
|
|
|
|
N = 20
|
|
|
|
|
|
|
|
# data = np.random.rayleigh(1, size=(2, N))
|
|
|
|
|
|
|
|
data = array([
|
|
|
|
|
|
|
|
[0.38103275, 0.35083136, 0.90024207, 1.88230239, 0.96815399,
|
|
|
|
|
|
|
|
0.57392873, 1.63367908, 1.20944125, 2.03887811, 0.81789145,
|
|
|
|
|
|
|
|
0.69302049, 1.40856592, 0.92156032, 2.14791432, 2.04373821,
|
|
|
|
|
|
|
|
0.69800708, 0.58428735, 1.59128776, 2.05771405, 0.87021964],
|
|
|
|
|
|
|
|
[1.44080694, 0.39973751, 1.331243, 2.48895822, 1.18894158,
|
|
|
|
|
|
|
|
1.40526085, 1.01967897, 0.81196474, 1.37978932, 2.03334689,
|
|
|
|
|
|
|
|
0.870329, 1.25106862, 0.5346619, 0.47541236, 1.51930093,
|
|
|
|
|
|
|
|
0.58861519, 1.19780448, 0.81548296, 1.56859488, 1.60653533]])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x = np.linspace(0, max(np.ravel(data)) + 1, 5)
|
|
|
|
|
|
|
|
dx = x[1] - x[0]
|
|
|
|
|
|
|
|
X = np.vstack((x, x))
|
|
|
|
|
|
|
|
c = wk.gridcount(data, X)
|
|
|
|
|
|
|
|
assert_allclose(c,
|
|
|
|
|
|
|
|
[[0.38922806, 0.8987982, 0.34676493, 0.21042807, 0.],
|
|
|
|
|
|
|
|
[1.15012203, 5.16513541, 3.19250588, 0.55420752, 0.],
|
|
|
|
|
|
|
|
[0.74293418, 3.42517219, 1.97923195, 0.76076621, 0.],
|
|
|
|
|
|
|
|
[0.02063536, 0.31054405, 0.71865964, 0.13486633, 0.],
|
|
|
|
|
|
|
|
[0., 0., 0., 0., 0.]], 1e-5)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t = np.trapz(np.trapz(c / (dx**2 * N), x), x)
|
|
|
|
|
|
|
|
assert_allclose(t, 0.9011618785736376)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_gridcount_3D(self):
|
|
|
|
|
|
|
|
N = 20
|
|
|
|
|
|
|
|
# data = np.random.rayleigh(1, size=(3, N))
|
|
|
|
|
|
|
|
data = np.array([
|
|
|
|
|
|
|
|
[0.932896, 0.89522635, 0.80636346, 1.32283371, 0.27125435,
|
|
|
|
|
|
|
|
1.91666304, 2.30736635, 1.13662384, 1.73071287, 1.06061127,
|
|
|
|
|
|
|
|
0.99598512, 2.16396591, 1.23458213, 1.12406686, 1.16930431,
|
|
|
|
|
|
|
|
0.73700592, 1.21135139, 0.46671506, 1.3530304, 0.91419104],
|
|
|
|
|
|
|
|
[0.62759088, 0.23988169, 2.04909823, 0.93766571, 1.19343762,
|
|
|
|
|
|
|
|
1.94954931, 0.84687514, 0.49284897, 1.05066204, 1.89088505,
|
|
|
|
|
|
|
|
0.840738, 1.02901457, 1.0758625, 1.76357967, 0.45792897,
|
|
|
|
|
|
|
|
1.54488066, 0.17644313, 1.6798871, 0.72583514, 2.22087245],
|
|
|
|
|
|
|
|
[1.69496432, 0.81791905, 0.82534709, 0.71642389, 0.89294732,
|
|
|
|
|
|
|
|
1.66888649, 0.69036947, 0.99961448, 0.30657267, 0.98798713,
|
|
|
|
|
|
|
|
0.83298728, 1.83334948, 1.90144186, 1.25781913, 0.07122458,
|
|
|
|
|
|
|
|
2.42340852, 2.41342037, 0.87233305, 1.17537114, 1.69505988]])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x = np.linspace(0, max(np.ravel(data)) + 1, 3)
|
|
|
|
class TestRegression(unittest.TestCase):
|
|
|
|
dx = x[1] - x[0]
|
|
|
|
def test_KRegression(self):
|
|
|
|
X = np.vstack((x, x, x))
|
|
|
|
|
|
|
|
c = wk.gridcount(data, X)
|
|
|
|
N = 51
|
|
|
|
assert_allclose(c,
|
|
|
|
x = np.linspace(0, 1, N)
|
|
|
|
[[[8.74229894e-01, 1.27910940e+00, 1.42033973e-01],
|
|
|
|
# ei = np.random.normal(loc=0, scale=0.075, size=(N,))
|
|
|
|
[1.94778915e+00, 2.59536282e+00, 3.28213680e-01],
|
|
|
|
ei = [0.0514233500271586, 0.00165101982431131, 0.042827107319028994,
|
|
|
|
[1.08429416e-01, 1.69571495e-01, 7.48896775e-03]],
|
|
|
|
-0.084351702283385, 0.05978024392552100, -0.07121894535738457,
|
|
|
|
[[1.44969128e+00, 2.58396370e+00, 2.45459949e-01],
|
|
|
|
0.0855578119920183, -0.0061865198365448, 0.060986773136137415,
|
|
|
|
[2.28951650e+00, 4.49653348e+00, 2.73167915e-01],
|
|
|
|
0.0467717713275598, -0.0852368434029634, 0.09790798995780517,
|
|
|
|
[1.10905565e-01, 3.18733817e-01, 1.12880816e-02]],
|
|
|
|
-0.174003547831554, 0.1100349974247687, 0.12934695904976257,
|
|
|
|
[[7.49265424e-02, 2.18142488e-01, 0.0],
|
|
|
|
-0.036688944487546, -0.0279545148054110, 0.09660222791922815,
|
|
|
|
[8.53886762e-02, 3.73415131e-01, 0.0],
|
|
|
|
-0.108463847524115, -0.0635162550551463, 0.017192887741329627,
|
|
|
|
[4.16196568e-04, 1.62218824e-02, 0.0]]])
|
|
|
|
-0.031520480101878, 0.03939880367791403, -0.06343921941793985,
|
|
|
|
|
|
|
|
0.0574763321274059, -0.1186005160931940, 0.023007133904660495,
|
|
|
|
t = np.trapz(np.trapz(np.trapz(c / dx**3 / N, x), x), x)
|
|
|
|
0.0572646924609536, -0.0334012844057809, -0.03444460758658313,
|
|
|
|
assert_allclose(t, 0.5164999727560187)
|
|
|
|
0.0325434547422866, 0.06063111859444784, 0.0010264474321885913,
|
|
|
|
|
|
|
|
-0.162288671571205, 0.01334616853351956, -0.020490428895193084,
|
|
|
|
def test_gridcount_4D(self):
|
|
|
|
0.0446047497979159, 0.02924587567502737, 0.021177586536616458,
|
|
|
|
|
|
|
|
0.0634083218094540, -0.1506377646036794, -0.03214553797245153,
|
|
|
|
N = 20
|
|
|
|
0.1850745187671265, -0.0151240946088902, -0.10599562843454335,
|
|
|
|
# data = np.random.rayleigh(1, size=(2, N))
|
|
|
|
0.0317357805015679, -0.0736187558312158, 0.04791463883941161,
|
|
|
|
data = array([
|
|
|
|
0.0660021138871709, -0.1049359954387588, 0.0034961490852392463]
|
|
|
|
[0.38103275, 0.35083136, 0.90024207, 1.88230239, 0.96815399,
|
|
|
|
# print(ei.tolist())
|
|
|
|
0.57392873, 1.63367908, 1.20944125, 2.03887811, 0.81789145],
|
|
|
|
|
|
|
|
[0.69302049, 1.40856592, 0.92156032, 2.14791432, 2.04373821,
|
|
|
|
y = 2*np.exp(-x**2/(2*0.3**2))+3*np.exp(-(x-1)**2/(2*0.7**2)) + ei
|
|
|
|
0.69800708, 0.58428735, 1.59128776, 2.05771405, 0.87021964],
|
|
|
|
kreg = wk.KRegression(x, y)
|
|
|
|
[1.44080694, 0.39973751, 1.331243, 2.48895822, 1.18894158,
|
|
|
|
f = kreg(output='plotobj', title='Kernel regression', plotflag=1)
|
|
|
|
1.40526085, 1.01967897, 0.81196474, 1.37978932, 2.03334689],
|
|
|
|
|
|
|
|
[0.870329, 1.25106862, 0.5346619, 0.47541236, 1.51930093,
|
|
|
|
assert_allclose(f.data[::5],
|
|
|
|
0.58861519, 1.19780448, 0.81548296, 1.56859488, 1.60653533]])
|
|
|
|
[3.14313544673463, 3.14582567119112, 3.149199078830904,
|
|
|
|
|
|
|
|
3.153335095194225, 3.15813722171621, 3.16302709623568,
|
|
|
|
x = np.linspace(0, max(np.ravel(data)) + 1, 3)
|
|
|
|
3.16631430398602, 3.164138775969285, 3.14947062082316,
|
|
|
|
dx = x[1] - x[0]
|
|
|
|
3.11341295908516, 3.05213808272656, 2.976097561057097,
|
|
|
|
X = np.vstack((x, x, x, x))
|
|
|
|
2.908020176929025, 2.867826513276857, 2.8615179445705,
|
|
|
|
c = wk.gridcount(data, X)
|
|
|
|
2.88155232529645, 2.91307482047679, 2.942469210090470,
|
|
|
|
assert_allclose(c,
|
|
|
|
2.96350144269953, 2.976399025328952, 2.9836554385038,
|
|
|
|
[[[[1.77163904e-01, 1.87720108e-01, 0.0],
|
|
|
|
2.987516554300354, 2.9894470264681, 2.990311688080114,
|
|
|
|
[5.72573585e-01, 6.09557834e-01, 0.0],
|
|
|
|
2.9906144224522406, 2.9906534916935743])
|
|
|
|
[3.48549923e-03, 4.05931870e-02, 0.0]],
|
|
|
|
|
|
|
|
[[1.83770124e-01, 2.56357594e-01, 0.0],
|
|
|
|
def test_BKRegression(self):
|
|
|
|
[4.35845892e-01, 6.14958970e-01, 0.0],
|
|
|
|
from wafo.kdetools.kdetools import _get_data
|
|
|
|
[3.07662204e-03, 3.58312786e-02, 0.0]],
|
|
|
|
n = 51
|
|
|
|
[[0.0, 0.0, 0.0],
|
|
|
|
loc1 = 0.1
|
|
|
|
[0.0, 0.0, 0.0],
|
|
|
|
scale1 = 0.6
|
|
|
|
[0.0, 0.0, 0.0]]],
|
|
|
|
scale2 = 0.75
|
|
|
|
[[[3.41883175e-01, 5.97977973e-01, 0.0],
|
|
|
|
# x, y, fun1 = _get_data(n, symmetric=True, loc1=loc1,
|
|
|
|
[5.72071865e-01, 8.58566538e-01, 0.0],
|
|
|
|
# scale1=scale1, scale2=scale2)
|
|
|
|
[3.46939323e-03, 4.04056116e-02, 0.0]],
|
|
|
|
# print(x.tolist())
|
|
|
|
[[3.58861043e-01, 6.28962785e-01, 0.0],
|
|
|
|
# print(y.tolist())
|
|
|
|
[8.80697705e-01, 1.47373158e+00, 0.0],
|
|
|
|
# dist = st.norm
|
|
|
|
[2.22868504e-01, 1.18008528e-01, 0.0]],
|
|
|
|
# norm1 = scale2 * (dist.pdf(-loc1, loc=-loc1, scale=scale1) +
|
|
|
|
[[2.91835067e-03, 2.60268355e-02, 0.0],
|
|
|
|
# dist.pdf(-loc1, loc=loc1, scale=scale1))
|
|
|
|
[3.63686503e-02, 1.07959459e-01, 0.0],
|
|
|
|
# def fun1(x):
|
|
|
|
[1.88555613e-02, 7.06358976e-03, 0.0]]],
|
|
|
|
# return ((dist.pdf(x, loc=-loc1, scale=scale1) +
|
|
|
|
[[[3.13810608e-03, 2.11731327e-02, 0.0],
|
|
|
|
# dist.pdf(x, loc=loc1, scale=scale1)) / norm1).clip(max=1.0)
|
|
|
|
[6.71606255e-03, 4.53139824e-02, 0.0],
|
|
|
|
x = [-2.9784022156693037, -2.923269270862857, -2.640625797489305,
|
|
|
|
[0.0, 0.0, 0.0]],
|
|
|
|
-2.592465150170373, -2.5777471766751514, -2.5597898266706323,
|
|
|
|
[[7.05946179e-03, 5.44614852e-02, 0.0],
|
|
|
|
-2.5411937415815604, -2.501753472506631, -2.4939048380402378,
|
|
|
|
[1.09099593e-01, 1.95935584e-01, 0.0],
|
|
|
|
-2.4747969073957368, -2.3324036659351286, -2.3228634370815,
|
|
|
|
[6.61257395e-02, 2.47717418e-02, 0.0]],
|
|
|
|
-2.230871371173083, -2.21411949373986, -2.2035967461005335,
|
|
|
|
[[6.38695629e-04, 5.69610302e-03, 0.0],
|
|
|
|
-2.1927287694263082, -2.1095391808427064, -2.0942500415622503,
|
|
|
|
[1.00358265e-02, 2.44053065e-02, 0.0],
|
|
|
|
-2.0774862883018708, -2.0700940505412, -2.054918428555726,
|
|
|
|
[5.67244468e-03, 2.12498697e-03, 0.0]]]])
|
|
|
|
-1.979624045501378, -1.815804869116454, -1.780636214263252,
|
|
|
|
|
|
|
|
-1.7494324035239686, -1.723149182957688, -1.7180532497996817,
|
|
|
|
t = np.trapz(np.trapz(np.trapz(np.trapz(c / dx**4 / N, x), x), x), x)
|
|
|
|
-1.7016701153705522, -1.6120633534061788, -1.5862592143187193,
|
|
|
|
assert_allclose(t, 0.21183518274521254)
|
|
|
|
-1.517561220921166, -1.5017798665502253, -1.4895432407186429,
|
|
|
|
|
|
|
|
-1.4470094450898578, -1.4302454657287063, -1.3243060491576388,
|
|
|
|
|
|
|
|
-1.293989140781724, -1.2570066577415648, -1.2332757902347795,
|
|
|
|
class TestKernels(unittest.TestCase):
|
|
|
|
-1.2306697417054666, -1.0495284321772482, -0.9923351727665026,
|
|
|
|
def setUp(self):
|
|
|
|
-0.9047559818364217, -0.4092063139968012, -0.3845725606766721,
|
|
|
|
self.names = ['epanechnikov', 'biweight', 'triweight', 'logistic',
|
|
|
|
-0.30700232234899083, -0.2565844426798063, -0.25415109620097187,
|
|
|
|
'p1epanechnikov', 'p1biweight', 'p1triweight',
|
|
|
|
-0.20223029999069952, -0.10388696244007978, -0.07822191388462896,
|
|
|
|
'triangular', 'gaussian', 'rectangular', 'laplace']
|
|
|
|
0.07822191388462896, 0.10388696244007978, 0.20223029999069952,
|
|
|
|
|
|
|
|
0.25415109620097187, 0.2565844426798063, 0.30700232234899083,
|
|
|
|
def test_stats(self):
|
|
|
|
0.3845725606766721, 0.4092063139968012, 0.9047559818364217,
|
|
|
|
truth = {
|
|
|
|
0.9923351727665026, 1.0495284321772482, 1.2306697417054666,
|
|
|
|
'biweight': (0.14285714285714285, 0.7142857142857143, 22.5),
|
|
|
|
1.2332757902347795, 1.2570066577415648, 1.293989140781724,
|
|
|
|
'logistic': (3.289868133696453, 1./6, 0.023809523809523808),
|
|
|
|
1.3243060491576388, 1.4302454657287063, 1.4470094450898578,
|
|
|
|
'p1biweight': (0.14285714285714285, 0.7142857142857143, 22.5),
|
|
|
|
1.4895432407186429, 1.5017798665502253, 1.517561220921166,
|
|
|
|
'triangular': (0.16666666666666666, 0.6666666666666666, inf),
|
|
|
|
1.5862592143187193, 1.6120633534061788, 1.7016701153705522,
|
|
|
|
'gaussian': (1, 0.28209479177387814, 0.21157109383040862),
|
|
|
|
1.7180532497996817, 1.723149182957688, 1.7494324035239686,
|
|
|
|
'epanechnikov': (0.2, 0.6, inf),
|
|
|
|
1.780636214263252, 1.815804869116454, 1.979624045501378,
|
|
|
|
'triweight': (0.1111111111111111, 0.8158508158508159, inf),
|
|
|
|
2.054918428555726, 2.0700940505412, 2.0774862883018708,
|
|
|
|
'p1triweight': (0.1111111111111111, 0.8158508158508159, inf),
|
|
|
|
2.0942500415622503, 2.1095391808427064, 2.1927287694263082,
|
|
|
|
'p1epanechnikov': (0.2, 0.6, inf),
|
|
|
|
2.2035967461005335, 2.21411949373986, 2.230871371173083,
|
|
|
|
'rectangular': (0.3333333333333333, 0.5, inf),
|
|
|
|
2.3228634370815, 2.3324036659351286, 2.4747969073957368,
|
|
|
|
'laplace': (2, 0.25, inf)}
|
|
|
|
2.4939048380402378, 2.501753472506631, 2.5411937415815604,
|
|
|
|
for name in self.names:
|
|
|
|
2.5597898266706323, 2.5777471766751514, 2.592465150170373,
|
|
|
|
kernel = wk.Kernel(name)
|
|
|
|
2.640625797489305, 2.923269270862857, 2.9784022156693037]
|
|
|
|
assert_allclose(kernel.stats(), truth[name])
|
|
|
|
y = [False, False, False, False, False, False, False, False, False,
|
|
|
|
# truth[name] = kernel.stats()
|
|
|
|
False, False, False, False, False, False, False, False, False,
|
|
|
|
# print(truth)
|
|
|
|
False, False, False, False, False, False, False, False, False,
|
|
|
|
|
|
|
|
False, False, False, False, False, False, False, False, False,
|
|
|
|
def test_norm_factors_1d(self):
|
|
|
|
False, False, False, False, False, False, True, True, True, True,
|
|
|
|
truth = {
|
|
|
|
True, True, True, True, True, True, True, True, True, True, True,
|
|
|
|
'biweight': 1.0666666666666667, 'logistic': 1.0,
|
|
|
|
True, True, True, False, False, False, False, False, False, False,
|
|
|
|
'p1biweight': 1.0666666666666667, 'triangular': 1.0,
|
|
|
|
False, False, False, False, False, False, False, False, False,
|
|
|
|
'gaussian': 2.5066282746310002, 'epanechnikov': 1.3333333333333333,
|
|
|
|
False, False, False, False, False, False, False, False, False,
|
|
|
|
'triweight': 0.91428571428571426, 'laplace': 2,
|
|
|
|
False, False, False, False, False, False, False, False, False,
|
|
|
|
'p1triweight': 0.91428571428571426,
|
|
|
|
False, False, False, False, False, False, False, False]
|
|
|
|
'p1epanechnikov': 1.3333333333333333, 'rectangular': 2.0}
|
|
|
|
|
|
|
|
for name in self.names:
|
|
|
|
bkreg = wk.BKRegression(x, y, a=0.05, b=0.05)
|
|
|
|
kernel = wk.Kernel(name)
|
|
|
|
fbest = bkreg.prb_search_best(hsfun='hste', alpha=0.05, color='g')
|
|
|
|
assert_allclose(kernel.norm_factor(d=1, n=20), truth[name])
|
|
|
|
# print(fbest.data[::10])
|
|
|
|
# truth[name] = kernel.norm_factor(d=1, n=20)
|
|
|
|
assert_allclose(fbest.data[::10],
|
|
|
|
|
|
|
|
[1.80899736e-15, 0, 6.48351162e-16, 6.61404311e-15,
|
|
|
|
def test_effective_support(self):
|
|
|
|
1.10010120e-12, 1.36709203e-10, 1.11994766e-08,
|
|
|
|
truth = {'biweight': (-1.0, 1.0), 'logistic': (-7.0, 7.0),
|
|
|
|
5.73040143e-07, 1.68974054e-05, 2.68633448e-04,
|
|
|
|
'p1biweight': (-1.0, 1.0), 'triangular': (-1.0, 1.0),
|
|
|
|
2.49075176e-03, 1.48687767e-02, 5.98536245e-02,
|
|
|
|
'gaussian': (-4.0, 4.0), 'epanechnikov': (-1.0, 1.0),
|
|
|
|
1.74083352e-01, 4.33339557e-01, 8.26039018e-01,
|
|
|
|
'triweight': (-1.0, 1.0), 'p1triweight': (-1.0, 1.0),
|
|
|
|
9.78387628e-01, 9.98137653e-01, 9.99876002e-01,
|
|
|
|
'p1epanechnikov': (-1.0, 1.0), 'rectangular': (-1.0, 1.0),
|
|
|
|
9.99876002e-01, 9.98137653e-01, 9.78387628e-01,
|
|
|
|
'laplace': (-7.0, 7.0)}
|
|
|
|
8.26039018e-01, 4.33339557e-01, 1.74083352e-01,
|
|
|
|
for name in self.names:
|
|
|
|
5.98536245e-02, 1.48687767e-02, 2.49075176e-03,
|
|
|
|
kernel = wk.Kernel(name)
|
|
|
|
2.68633448e-04, 1.68974054e-05, 5.73040143e-07,
|
|
|
|
assert_allclose(kernel.effective_support(), truth[name])
|
|
|
|
1.11994760e-08, 1.36708818e-10, 1.09965904e-12,
|
|
|
|
# truth[name] = kernel.effective_support()
|
|
|
|
5.43806309e-15, 0.0, 0, 0])
|
|
|
|
# print(truth)
|
|
|
|
|
|
|
|
# self.assertTrue(False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_that_kernel_is_a_pdf(self):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for name in self.names:
|
|
|
|
|
|
|
|
kernel = wk.Kernel(name)
|
|
|
|
|
|
|
|
xmin, xmax = kernel.effective_support()
|
|
|
|
|
|
|
|
x = np.linspace(xmin, xmax, 4*1024+1)
|
|
|
|
|
|
|
|
m0 = kernel.norm_factor(d=1, n=1)
|
|
|
|
|
|
|
|
pdf = kernel(x)/m0
|
|
|
|
|
|
|
|
# print(name)
|
|
|
|
|
|
|
|
# print(pdf[0], pdf[-1])
|
|
|
|
|
|
|
|
# print(np.trapz(pdf, x) - 1)
|
|
|
|
|
|
|
|
assert_allclose(np.trapz(pdf, x), 1, 1e-2)
|
|
|
|
|
|
|
|
# self.assertTrue(False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSmoothing(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
|
|
|
|
self.data = np.array([
|
|
|
|
|
|
|
|
[0.932896, 0.89522635, 0.80636346, 1.32283371, 0.27125435,
|
|
|
|
|
|
|
|
1.91666304, 2.30736635, 1.13662384, 1.73071287, 1.06061127,
|
|
|
|
|
|
|
|
0.99598512, 2.16396591, 1.23458213, 1.12406686, 1.16930431,
|
|
|
|
|
|
|
|
0.73700592, 1.21135139, 0.46671506, 1.3530304, 0.91419104],
|
|
|
|
|
|
|
|
[0.62759088, 0.23988169, 2.04909823, 0.93766571, 1.19343762,
|
|
|
|
|
|
|
|
1.94954931, 0.84687514, 0.49284897, 1.05066204, 1.89088505,
|
|
|
|
|
|
|
|
0.840738, 1.02901457, 1.0758625, 1.76357967, 0.45792897,
|
|
|
|
|
|
|
|
1.54488066, 0.17644313, 1.6798871, 0.72583514, 2.22087245],
|
|
|
|
|
|
|
|
[1.69496432, 0.81791905, 0.82534709, 0.71642389, 0.89294732,
|
|
|
|
|
|
|
|
1.66888649, 0.69036947, 0.99961448, 0.30657267, 0.98798713,
|
|
|
|
|
|
|
|
0.83298728, 1.83334948, 1.90144186, 1.25781913, 0.07122458,
|
|
|
|
|
|
|
|
2.42340852, 2.41342037, 0.87233305, 1.17537114, 1.69505988]])
|
|
|
|
|
|
|
|
self.gauss = wk.Kernel('gaussian')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hns(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hns(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [0.18154437, 0.36207987, 0.37396219])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hos(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hos(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [0.195209, 0.3893332, 0.40210988])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hms(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hmns(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [[3.25196193e-01, -2.68892467e-02, 3.18932448e-04],
|
|
|
|
|
|
|
|
[-2.68892467e-02, 3.91283306e-01, 2.38654678e-02],
|
|
|
|
|
|
|
|
[3.18932448e-04, 2.38654678e-02, 4.05123874e-01]])
|
|
|
|
|
|
|
|
hs = self.gauss.hmns(self.data[0])
|
|
|
|
|
|
|
|
assert_allclose(hs, self.gauss.hns(self.data[0]))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hs = wk.Kernel('epan').hmns(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs,
|
|
|
|
|
|
|
|
[[8.363847e-01, -6.915749e-02, 8.202747e-04],
|
|
|
|
|
|
|
|
[-6.915749e-02, 1.006357e+00, 6.138052e-02],
|
|
|
|
|
|
|
|
[8.202747e-04, 6.138052e-02, 1.041954e+00]],
|
|
|
|
|
|
|
|
rtol=1e-5)
|
|
|
|
|
|
|
|
hs = wk.Kernel('biwe').hmns(self.data[:2])
|
|
|
|
|
|
|
|
assert_allclose(hs, [[0.868428, -0.071705],
|
|
|
|
|
|
|
|
[-0.071705, 1.04685]], rtol=1e-5)
|
|
|
|
|
|
|
|
hs = wk.Kernel('triwe').hmns(self.data[:2])
|
|
|
|
|
|
|
|
assert_allclose(hs, [[0.975375, -0.080535],
|
|
|
|
|
|
|
|
[-0.080535, 1.17577]], rtol=1e-5)
|
|
|
|
|
|
|
|
self.assertRaises(NotImplementedError,
|
|
|
|
|
|
|
|
wk.Kernel('biwe').hmns, self.data)
|
|
|
|
|
|
|
|
self.assertRaises(NotImplementedError,
|
|
|
|
|
|
|
|
wk.Kernel('triwe').hmns, self.data)
|
|
|
|
|
|
|
|
self.assertRaises(NotImplementedError,
|
|
|
|
|
|
|
|
wk.Kernel('triangular').hmns, self.data)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hscv(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hscv(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [0.1656318800590673, 0.3273938258112911,
|
|
|
|
|
|
|
|
0.31072126996412214])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hstt(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hstt(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [0.18099075, 0.50409881, 0.11018912])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hste(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hste(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [0.17035204677390572, 0.29851960273788863,
|
|
|
|
|
|
|
|
0.186685349741972])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hldpi(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hldpi(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [0.1732289, 0.33159097, 0.3107633])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_hisj(self):
|
|
|
|
|
|
|
|
hs = self.gauss.hisj(self.data)
|
|
|
|
|
|
|
|
assert_allclose(hs, [0.29542502, 0.74277133, 0.51899114])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
if __name__ == "__main__":
|
|
|
|
# import sys;sys.argv = ['', 'Test.testName']
|
|
|
|
# import sys;sys.argv = ['', 'Test.testName']
|
|
|
|