I. Взвешивание классов.
В случае, если имеет место разное количество экземпляров классов, можно использовать взвешивание классов с помощью аргумента class_weight библиотеки sklearn.
Аргумент class_weight есть у решающего дерева, случайного леса, логистической регрессии.
class_weight='balanced'
model = LogisticRegression(random_state=5678, solver='liblinear', class_weight='balanced')
II. Увеличение выборки (upsampling) с помощью синтаксиса умножения списков:
name_x_n = name * n
pd.concat([name1 + name2 * n]) # чтобы размножить строки таблицы name2, нужно вместо n nодставить нужный множитель
Чтобы перемешать
df1_upsampled, df2_upsampled = shuffle(df1_upsampled, df2_upsampled, random_state=56789)
III. Уменьшение выборки (downsampling).
Функция sample(). Возвращает выбранные случайным образом экземпляры (строки), в результате общее количество строк уменьшается.
Желаемое количество полученных таким образом строк указывают как долю от исходной таблицы с помощью аргумента frac:
df_sample = df.sample(frac=0.1, random_state=56789)
Если нужно сделать уменьшение для определенного класса выборки, то создают отдельные таблицы с помощью логической индексации и потом для одной применяют sample() и объединяют таблицы :
new_df_downsampled = pd.concat([feature_0.sample(frac=0.1, random_state=56789)] + [feature_1])