Как я должен генерировать выбросы случайно? - PullRequest
1 голос
/ 26 марта 2019

Я генерирую случайный набор данных.Мой набор данных является последовательным, имеет верхний и нижний пределы.В некоторых случайных точках я хочу, чтобы у моего набора данных были выбросы выше и ниже пределов.Вот мой код.

generated_data = (12) * np.random.rand(100) + 630
outlier_data = (12) * np.random.rand(20) + (*HERE'S THE PROBLEM)
merged_data = np.concatenate((generated_data, outlier_data))

После этого, я думаю, я перетасую merged_data.Но я не знаю, как правильно генерировать выбросы.

1 Ответ

0 голосов
/ 26 марта 2019

Просто сгенерируйте три части данных независимо: сначала не выбросы, затем нижний и верхний выбросы, объедините их вместе и, наконец, перемешайте их:

def generate(median=630, err=12, outlier_err=100, size=80, outlier_size=10):
    errs = err * np.random.rand(size) * np.random.choice((-1, 1), size)
    data = median + errs

    lower_errs = outlier_err * np.random.rand(outlier_size)
    lower_outliers = median - err - lower_errs

    upper_errs = outlier_err * np.random.rand(outlier_size)
    upper_outliers = median + err + upper_errs

    data = np.concatenate((data, lower_outliers, upper_outliers))
    np.random.shuffle(data)

    return data

Вы получите что-то вроде этого:

>>> data = generate()
>>> data.shape
(100,)
>>> data.min()
518.1635764484727
>>> data.max()
729.9467630423616
>>> np.median(data)
629.9427184256936
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...