This text details the development of a trainable Bezier curve multiparameter regressor, which involves creating functions for generating curves, adjusting for skew, and evaluating input values. The creation and evaluation process are discussed in detail, providing insights into how this powerful tool can be used in various applications.
bezier
first, we need a bezier curve connects (0,0) and (1,1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import numpy as npimport bezierdef bezierCurve (start=(0 ,0 ), end=(1 ,1 ), skew=0 ):assert skew >=-0.5 assert skew <=0.5 x_start, y_start = start x_end, y_end = end x_diff = x_end - x_start y_diff = y_end - y_start nodes1 = np.asfortranarray( [ [x_start, x_diff * (0.5 + skew), x_end], [y_start, y_diff * (0.5 - skew), y_end], ] ) curve1 = bezier.Curve(nodes1, degree=2 ) curve_params = {'x_start' :x_start, 'x_diff' :x_diff,'x_end' :x_end} return curve1, curve_paramsdef evaluateBezierCurve (input_value:float ,curve, curve_params:dict )x_start = curve_params['x_start' ] x_end = curve_params['x_end' ] assert x_start <= input_valueassert x_end >= input_valuex_diff = curve_params['x_diff' ] s = (input_value - x_start)/x_diff points = curve.evaluate(s) point = points.T[0 ] x,y = point result = y return result
then, we define our very recursive or flexible regressor:
1 2 3 4 5 6 7 8 9 def multiParameterExponentialNetwork (*args, input_bias=0.05 , curve_function=bezierCurve, curve_function_kwargs = {'start' :(0 ,0 ),'end' :(1 ,1 )'skew' :0 }, evaluate_function=evaluateBezierCurve ):curve, curve_params = curve_function(**curve_function_kwargs) value = evaluate_function(input_bias, curve, curve_params) for index, input_value in enumerate (args):apply_list = [input_value]*(index+1 ) for apply_item in apply_list:value += (1 -value)*function(apply_item, **function_kwargs) return value