implementation update
This commit is contained in:
parent
d4b25bbd0f
commit
a0c2abd8a6
19031
KernelRegression.ipynb
19031
KernelRegression.ipynb
File diff suppressed because one or more lines are too long
@ -1,4 +1,5 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
from numpy.core.fromnumeric import squeeze
|
||||||
|
|
||||||
def gauss_const(h):
|
def gauss_const(h):
|
||||||
"""
|
"""
|
||||||
@ -14,6 +15,14 @@ def gauss_exp(ker_x, xi, h):
|
|||||||
den = h*h
|
den = h*h
|
||||||
return num/den
|
return num/den
|
||||||
|
|
||||||
|
def gauss_exp(ker_x, xi, h):
|
||||||
|
"""
|
||||||
|
Returns the gaussian function exponent term
|
||||||
|
"""
|
||||||
|
num = - 0.5*np.square((xi- ker_x))
|
||||||
|
den = h*h
|
||||||
|
return num/den
|
||||||
|
|
||||||
def kernel_function(h, ker_x, xi):
|
def kernel_function(h, ker_x, xi):
|
||||||
"""
|
"""
|
||||||
Returns the gaussian function value. Combines the gauss_const and
|
Returns the gaussian function value. Combines the gauss_const and
|
||||||
@ -31,7 +40,59 @@ def weights(bw_manual, input_x, all_input_values ):
|
|||||||
w_row.append(ki/ki_sum)
|
w_row.append(ki/ki_sum)
|
||||||
return w_row
|
return w_row
|
||||||
|
|
||||||
def single_y_pred(bw_manual, input_x, iks, igrek):
|
|
||||||
|
def single_y_pred_gauss(bw_manual, input_x, iks, igrek):
|
||||||
w = weights(bw_manual, input_x, iks)
|
w = weights(bw_manual, input_x, iks)
|
||||||
y_single = np.sum(np.dot(igrek,w))
|
y_single = np.sum(np.dot(igrek,w))
|
||||||
return y_single
|
return y_single
|
||||||
|
|
||||||
|
def epanechnikov_one(h, ker_x, xi):
|
||||||
|
"""
|
||||||
|
Returns the epanechnikov function value.
|
||||||
|
"""
|
||||||
|
value = 0.75*(1-np.square((xi-ker_x)/h))
|
||||||
|
if (value < 0):
|
||||||
|
value = 0
|
||||||
|
return value
|
||||||
|
|
||||||
|
def epanechnikov_list(h, ker_x, xi):
|
||||||
|
"""
|
||||||
|
Returns the epanechnikov function value.
|
||||||
|
"""
|
||||||
|
value = 0.75*(1-np.square((xi-ker_x)/h))
|
||||||
|
value = [0 if i < 0 else i for i in value]
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def weights_epanechnikov(bw_manual, input_x, all_input_values ):
|
||||||
|
w_row = []
|
||||||
|
for x_i in all_input_values:
|
||||||
|
ki = epanechnikov_one(bw_manual, x_i, input_x)
|
||||||
|
ki_sum = np.sum(epanechnikov_list(bw_manual, all_input_values, input_x))
|
||||||
|
w_row.append(ki/ki_sum)
|
||||||
|
return w_row
|
||||||
|
|
||||||
|
def single_y_pred_epanechnikov(bw_manual, input_x, x_values, y_values):
|
||||||
|
w = weights_epanechnikov(bw_manual, input_x, x_values)
|
||||||
|
y_single = np.sum(np.dot(y_values,w))
|
||||||
|
return y_single
|
||||||
|
|
||||||
|
def ker_reg(x_values, y_values, bw = 1, ker_fun = 'gauss'):
|
||||||
|
|
||||||
|
ker_x = np.arange(0,40,0.1)
|
||||||
|
|
||||||
|
if (ker_fun == 'gauss'):
|
||||||
|
Y_pred = []
|
||||||
|
for input_x in x_values:
|
||||||
|
w = []
|
||||||
|
Y_single = single_y_pred_epanechnikov(bw, input_x, x_values, y_values)
|
||||||
|
Y_pred.append(Y_single)
|
||||||
|
elif (ker_fun == 'epanechnikov'):
|
||||||
|
Y_pred = []
|
||||||
|
for input_x in x_values:
|
||||||
|
w = []
|
||||||
|
Y_single = single_y_pred_gauss(bw, input_x, x_values, y_values)
|
||||||
|
Y_pred.append(Y_single)
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
return Y_pred
|
Binary file not shown.
20
data6.tsv
Normal file
20
data6.tsv
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
21.252 -555.640
|
||||||
|
179.842 3840.141
|
||||||
|
118.162 2274.989
|
||||||
|
114.269 1146.575
|
||||||
|
121.444 1840.589
|
||||||
|
87.624 1663.894
|
||||||
|
170.039 3504.537
|
||||||
|
192.651 3708.239
|
||||||
|
12.390 -358.240
|
||||||
|
144.264 2444.162
|
||||||
|
169.900 3348.941
|
||||||
|
63.254 271.623
|
||||||
|
72.439 900.423
|
||||||
|
71.108 77.543
|
||||||
|
179.476 3313.424
|
||||||
|
169.084 2525.653
|
||||||
|
99.073 734.413
|
||||||
|
195.528 4067.410
|
||||||
|
131.023 2182.147
|
||||||
|
12.424 490.714
|
|
Loading…
Reference in New Issue
Block a user