Somtime проблемы при чтении конфигурации данных CSV из Jmeter

Вот функция для вычисления взвешенных 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 )

1
задан Alex Le 18 January 2019 в 15:07
поделиться

2 ответа

  1. Это утверждение может быть проблематичным:

    props.put("path_${__threadNum}", String.valueOf(fileName));
    

    согласно Документация по JSR223 Sampler

    JMeter обрабатывает функции и ссылки на переменные перед передачей поля скрипта интерпретатору, поэтому ссылки будут разрешены только один раз . Ссылки на переменные и функции в файлах сценария будут дословно передаваться интерпретатору, что может вызвать синтаксическую ошибку. Чтобы использовать переменные времени выполнения, пожалуйста, используйте соответствующие методы реквизита, например

    props.get("START.HMS");
    
    props.put("PROP1","1234"); 
    

    Поэтому я бы рекомендовал заменить ${__threadNum} на ctx.getThreadNum(), где ctx - сокращение для JMeterContext class

  2. В соответствии с главой Порядок выполнения документации 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 .

0
ответ дан Dmitri T 18 January 2019 в 15:07
поделиться

У меня есть ответ на этот вопрос:
- Я добавляю все данные AttemptId, Center в один файл csv и читаю от начала до конца. Использование контроллера If для проверки данных перед действием.

0
ответ дан Alex Le 18 January 2019 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: