def static_mreg_svr(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] reg = linear_model.LinearRegression() gamma_range = [0.0001, 0.000001] C_range = [2 ** i for i in range(1, 4, 1)] regargs = { "epsilon" : 0.1, "cv_method" : KFold, "cv_args" : {"n_folds" : 10}, "kernel" : 'rbf', "tuned_parameters" : [{ 'kernel': [kernel], 'C': C_range, 'gamma': gamma_range}]} iargs = {'method':'mreg', 'timestep': timestep, 'neighbor_series': nseries, 'reg' : reg, 'regargs' : regargs} return iargs
def static_forwardcopy(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] return {'method': 'forwardcopy', 'timestep': timestep}, nseries
def static_linear(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] return {"method": "linear", "timestep": timestep}, nseries
def static_forwardcopy(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] return {'method':'forwardcopy','timestep': timestep}, nseries
def static_mreg_lin(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] iargs = {"method": "mreg", "timestep": timestep, "neighbor_series": nseries, "reg": "linear_model"} return iargs, nseries
def static_mreg_lin(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] iargs = {'method':'mreg', 'timestep': timestep, 'neighbor_series': nseries, 'reg' : 'linear_model'} return iargs
def static_mreg_knn(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] iargs = {'method':'mreg', 'timestep': timestep, 'neighbor_series': nseries, 'reg' : 'knn', 'regargs' : {'kfold': 5, 'n' : [5,10,20,50,100], 'variant' : 'uniform'}} return iargs
def experiment(method, windpark, windpark_test, damaged, rate): args, nseries = argfuncs[method](windpark) reconstructed = interpolate(damaged, **args) target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) turbines = windpark.get_turbines() for t in range(len(turbines)): turbines[t].add_measurements(\ repair_nrel(turbines[t].get_measurements()[:10000])) # this is the target turbine, use the reconstructed here. turbines[-1].add_measurements(reconstructed) feature_window, horizon = 3, 3 mapping = PowerMapping() # with damaged X = mapping.get_features_park(windpark, feature_window, horizon) Y = mapping.get_labels_turbine(target, feature_window, horizon) train_to = int(math.floor(len(X))) train_step, test_step = 1, 1 reg = linear_model.LinearRegression() reg = reg.fit(X[0:train_to:train_step], Y[0:train_to:train_step]) # USE THE 2005 YEAR FOR TESTING, WITHOUT DAMAGE # predict on second year without damage turbines = windpark_test.get_turbines() for t in turbines: t.add_measurements(repair_nrel(t.get_measurements()[:10000])) target_test = windpark_test.get_target() XT = mapping.get_features_park(windpark_test, feature_window, horizon) test_to = int(math.floor(len(XT))) YT = mapping.get_labels_turbine(target_test, feature_window, horizon)[:test_to] y_hat = reg.predict(XT[:test_to]) mse_y_hat = 0 for i in range(0, len(y_hat)): y = YT[i] mse_y_hat += (y_hat[i] - y)**2 mse_y_hat /= float(len(y_hat)) return mse_y_hat
def static_topologic(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) tloc = (target.longitude, target.latitude) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] nlocs = [(t.longitude, t.latitude) for t in neighbors] iargs = {'method' : 'topologic', 'timestep': timestep, 'location': tloc, 'neighbor_series': nseries, 'neighbor_locations': nlocs} return iargs
def experiment(method, windpark, windpark_test, damaged, rate): args, nseries = argfuncs[method](windpark) reconstructed = interpolate(damaged, **args) target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) turbines = windpark.get_turbines() for t in range(len(turbines)): turbines[t].add_measurements(\ repair_nrel(turbines[t].get_measurements()[:10000])) # this is the target turbine, use the reconstructed here. turbines[-1].add_measurements(reconstructed) feature_window, horizon = 3,3 mapping = PowerMapping() # with damaged X = mapping.get_features_park(windpark, feature_window, horizon) Y = mapping.get_labels_turbine(target, feature_window, horizon) train_to = int(math.floor(len(X))) train_step, test_step = 1, 1 reg = linear_model.LinearRegression() reg = reg.fit(X[0:train_to:train_step], Y[0:train_to:train_step]) # USE THE 2005 YEAR FOR TESTING, WITHOUT DAMAGE # predict on second year without damage turbines = windpark_test.get_turbines() for t in turbines: t.add_measurements(repair_nrel(t.get_measurements()[:10000])) target_test = windpark_test.get_target() XT = mapping.get_features_park(windpark_test, feature_window, horizon) test_to = int(math.floor(len(XT))) YT = mapping.get_labels_turbine(target_test, feature_window, horizon)[:test_to] y_hat = reg.predict(XT[:test_to]) mse_y_hat = 0 for i in range(0, len(y_hat)): y = YT[i] mse_y_hat += (y_hat[i] - y) ** 2 mse_y_hat /= float(len(y_hat)) return mse_y_hat
def static_mreg_knn(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] iargs = { "method": "mreg", "timestep": timestep, "neighbor_series": nseries, "reg": "knn", "regargs": {"kfold": 5, "n": [5, 10, 20, 50, 100], "variant": "uniform"}, } return iargs, nseries
def static_topologic(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) tloc = (target.longitude, target.latitude) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] nlocs = [(t.longitude, t.latitude) for t in neighbors] iargs = { "method": "topologic", "timestep": timestep, "location": tloc, "neighbor_series": nseries, "neighbor_locations": nlocs, } return iargs
def static_mreg_svr(windpark): target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) neighbors = windpark.get_turbines()[:-1] nseries = [repair_nrel(t.get_measurements()[:10000]) for t in neighbors] reg = linear_model.LinearRegression() gamma_range = [0.0001, 0.000001] C_range = [2 ** i for i in range(1, 4, 1)] regargs = { "epsilon": 0.1, "cv_method": KFold, "cv_args": {"n_folds": 10}, "kernel": "rbf", "tuned_parameters": [{"kernel": [kernel], "C": C_range, "gamma": gamma_range}], } iargs = {"method": "mreg", "timestep": timestep, "neighbor_series": nseries, "reg": reg, "regargs": regargs} return iargs
mse_y_hat /= float(len(y_hat)) return mse_y_hat # generating destroyed measurements which are constant over all # methods data = [] for park in parks.keys(): windpark = NREL().get_windpark_nearest(parks[park], 5, 2004) windpark_test = NREL().get_windpark_nearest(parks[park], 5, 2005) target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) for i in range(2): damaged_series = {} de = lambda rate: (rate, (destroy( measurements, method=destroy_method, percentage=rate)[0])) dseries = map(de, rates) for rate, series in dseries: damaged_series[rate] = series # with reconstruction def run(pars): method, rate = pars
def experiment(method, windpark, damaged, rate): args = argfuncs[method](windpark) reconstructed = interpolate(damaged, **args) error, var, std = scores(measurements, reconstructed) return error, var, std # generating destroyed measurements which are constant over all # methods data = [] park = 'reno' windpark = NREL().get_windpark_nearest(parks[park], 5, 2004) target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) for i in range(2): damaged_series = {} de = lambda rate : (rate, (destroy(measurements, method=destroy_method, percentage=rate)[0])) dseries = map(de, rates) for rate, series in dseries: damaged_series[rate] = series def run(pars): method, rate = pars error, var, std = experiment(method, windpark, damaged_series[rate], rate) return method, rate, error, var, std results = map(run, list(chain(product(methods, rates))))