Вот функция для вычисления взвешенных r-квадратов с Python и Numpy (большая часть кода поступает из sklearn):
from __future__ import division
import numpy as np
def compute_r2_weighted(y_true, y_pred, weight):
sse = (weight * (y_true - y_pred) ** 2).sum(axis=0, dtype=np.float64)
tse = (weight * (y_true - np.average(
y_true, axis=0, weights=weight)) ** 2).sum(axis=0, dtype=np.float64)
r2_score = 1 - (sse / tse)
return r2_score, sse, tse
Пример:
from __future__ import print_function, division
import sklearn.metrics
def compute_r2_weighted(y_true, y_pred, weight):
sse = (weight * (y_true - y_pred) ** 2).sum(axis=0, dtype=np.float64)
tse = (weight * (y_true - np.average(
y_true, axis=0, weights=weight)) ** 2).sum(axis=0, dtype=np.float64)
r2_score = 1 - (sse / tse)
return r2_score, sse, tse
def compute_r2(y_true, y_predicted):
sse = sum((y_true - y_predicted)**2)
tse = (len(y_true) - 1) * np.var(y_true, ddof=1)
r2_score = 1 - (sse / tse)
return r2_score, sse, tse
def main():
'''
Demonstrate the use of compute_r2_weighted() and checks the results against sklearn
'''
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
weight = [1, 5, 1, 2]
r2_score = sklearn.metrics.r2_score(y_true, y_pred)
print('r2_score: {0}'.format(r2_score))
r2_score,_,_ = compute_r2(np.array(y_true), np.array(y_pred))
print('r2_score: {0}'.format(r2_score))
r2_score = sklearn.metrics.r2_score(y_true, y_pred,weight)
print('r2_score weighted: {0}'.format(r2_score))
r2_score,_,_ = compute_r2_weighted(np.array(y_true), np.array(y_pred), np.array(weight))
print('r2_score weighted: {0}'.format(r2_score))
if __name__ == "__main__":
main()
#cProfile.run('main()') # if you want to do some profiling
выходы:
r2_score: 0.9486081370449679
r2_score: 0.9486081370449679
r2_score weighted: 0.9573170731707317
r2_score weighted: 0.9573170731707317
Это соответствует формуле ( mirror ):
с f_i - это предсказанное значение из подгонки, y_ {av} - среднее значение наблюдаемых данных y_i - наблюдаемое значение данных. w_i - это взвешивание, применяемое к каждой точке данных, обычно w_i = 1. SSE - сумма квадратов из-за ошибки, а SST - общая сумма квадратов.
Если интересно, код в R: https://gist.github.com/dhimmel / 588d64a73fa4fef02c8f ( mirror )
Это утверждение может быть проблематичным:
props.put("path_${__threadNum}", String.valueOf(fileName));
согласно Документация по JSR223 Sampler
JMeter обрабатывает функции и ссылки на переменные перед передачей поля скрипта интерпретатору, поэтому ссылки будут разрешены только один раз . Ссылки на переменные и функции в файлах сценария будут дословно передаваться интерпретатору, что может вызвать синтаксическую ошибку. Чтобы использовать переменные времени выполнения, пожалуйста, используйте соответствующие методы реквизита, например
blockquote>props.get("START.HMS"); props.put("PROP1","1234");
Поэтому я бы рекомендовал заменить
${__threadNum}
наctx.getThreadNum()
, гдеctx
- сокращение для JMeterContext class
В соответствии с главой Порядок выполнения документации JMeter:
0. Configuration elements
1. Pre-Processors
2. Timers
3. Sampler
4. Post-Processors (unless SampleResult is null)
5. Assertions (unless SampleResult is null)
6. Listeners (unless SampleResult is null)
ваша Конфигурация набора данных CSV выполняется на первом месте, до любой другие тестовые элементы сценариев. Поэтому времена, когда он «работает» IMO, вызваны «ложноположительной» ситуацией, поскольку свойства JMeter являются глобальными и «активными» во время работы JMeter (и базовой JVM). Когда вы в следующий раз запустите JMeter, свойства будут иметь нулевое значение, и ваша конфигурация набора данных CSV потерпит неудачу. Поэтому я ожидаю, что вы должны рассмотреть возможность использования функции __ CSVRead () , которая оценивается во время выполнения именно там, где она вызывается. Ознакомьтесь с Apache JMeter Functions - вступительной статьей , чтобы узнать больше о концепции JMeter Functions .
У меня есть ответ на этот вопрос:
- Я добавляю все данные AttemptId, Center в один файл csv и читаю от начала до конца. Использование контроллера If для проверки данных перед действием.