Генерация недостающих значений в наборе данных на основе распределения ZIPF

В настоящее время я хочу наблюдать, как пропущенные значения влияют на мой набор данных. Я заменяю точку данных (10, 20, 90 %) на отсутствующие значения и наблюдаю за влиянием. Эта функция ниже предназначена для замены определенного процента данных на отсутствующий.

def dropout(df, percent):
    # create df copy
    mat = df.copy()
    # number of values to replace
    prop = int(mat.size * percent)
    # indices to mask
    mask = random.sample(range(mat.size), prop)
    # replace with NaN
    np.put(mat, mask, [np.NaN]*len(mask))
    return mat

Мой вопрос: я хочу заменить отсутствующие значения на основе zipf distirbution/power low/long tail. Например, у меня есть набор данных, который содержит 10 столбцов (5 столбцов категориальных данных и 5 столбцов числовых данных). Я хочу заменить некоторые точки данных на 5 столбцов, категориальных на основе закона zipf, столбцы с левой стороны имеют больше отсутствующих, чем с правой стороны.

Я использовал Python для выполнения этой задачи.

Я видел руководство Scipy по распространению zipf по этой ссылке: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.zipf.html, но все же это мне не очень помогает.

1 ответ

Распределения Zipf - это семейство распределений от 0 до бесконечности, в то время как вы хотите удалить значения только из 5 дискретных столбцов, поэтому для этого вам придется принимать произвольные решения. Вот один из способов:

  1. Выберите параметр для вашего дистрибутива Zipf, например a = 2, как в примере, приведенном на странице документации SciPy.
  2. Глядя на график, приведенный на той же странице, вы можете решить усечь до 10, то есть, если появляется какое-либо значение выборки, превышающее 10, вы просто отбрасываете его.
  3. Затем вы можете просто сопоставить оставшийся домен от 0 до 10 линейно с вашими пятью категориальными столбцами: любое значение от 0 до 2 соответствует первому столбцу и так далее.

Таким образом, вы итеративно выбираете отдельные значения из вашего дистрибутива Zipf, используя функцию SciPy. Для каждого значения выборки вы удаляете одну точку данных в столбце, которому соответствует значение (см. 3.), пока вы не достигнете желаемого общего процента пропущенных значений.

Другие вопросы по тегам