В SKLearn Logistic Regression class = Balanced помогает запустить модель с несбалансированными данными? какую методологию использует этот вариант - PullRequest
0 голосов
/ 03 мая 2018

Прочитав о случайной при выборке, случайной при выборке и SMOTE , я пытаюсь понять, какая методология используется по умолчанию для реализации в пакете SKlearn для логистической регрессии или случайного леса. Я проверил документацию здесь

В сбалансированном режиме *1010* значения y используются для автоматической регулировки весов, обратно пропорциональных частотам классов во входных данных, как n_samples / (n_classes * np.bincount (y))

Я не в состоянии понять это по классу большинства выборок или по классу меньшинства выборок, чтобы создать сбалансированный набор

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Как указано в документации для numpy.bincount, каждый бин дает число вхождений значения его индекса в x (https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.bincount.html).. Поэтому, поскольку в выражении, используемом sklearn, bincounts находится в знаменателе, классы с высоким частоты получают низкие веса, а классы с низкими частотами получают большие веса. Давайте посмотрим на это в действии:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({'classes': [0, 0, 1, 1, 2, 0, 1, 1, 0, 2, 3]})

n_samples = df.shape[0]
classes = df['classes'].unique()
bins = np.bincount(df['classes'])
n_classes = bins.shape[0]

weights = n_samples/(n_classes*bins)

sns.barplot(classes, weights)
plt.xlabel('class label')
plt.ylabel('weight')
plt.show()      

enter image description here

0 голосов
/ 03 мая 2018

Они очень разные.

SMOTE изменит данные и сделает набор данных сбалансированным путем передискретизации (это означает, что он будет генерировать данные, выглядящие аналогично классу меньшинства, чтобы увеличить свои выборки. Таким образом, новый набор данных создан .

В LR это не делает набор данных сбалансированным. Это не создает новые данные. Это просто наказывает за неправильную классификацию меньшинства. Так что модель будет достаточно осторожна, чтобы позаботиться об этом классе. Вот почему его называют 'class_weight'.

...