Пользовательская перекрестная проверка и проверка с крайне несбалансированными классами - PullRequest
0 голосов
/ 09 января 2019

У меня многоклассовая проблема с сильно несбалансированными данными.

Это один большой класс большинства с несколькими тысячами участников, некоторые классы с 100-1000 членами и 10-30 классов только с одним членом.

Выборка невозможна, потому что это может привести к неправильному весу классов.

Для оценки моей модели я хочу использовать перекрестную проверку. Я пробовал cross_val_predict(x,y, cv=10), что приводит к коду ошибки:

Предупреждение: наименее населенный класс в y имеет только 1 члена, что слишком мало. Минимальное количество членов в любом классе не может быть меньше, чем n_splits = 10.

Я пытался создать свою собственную перекрестную проверку, которая довольно проста.

Я разделил свои данные с помощью StratifiedKFold , а затем сделал следующее:

clf = DecisionTreeClassifier()

for ta, te in splits
    xTrain, xTest = x.iloc[ta], x.iloc[te]
    yTrain, yTest = y.iloc[ta], y.iloc[te]
    clf.fit(xTrain, yTrain)
    prediction = clf.predict(xTest)
    cnf_matrix[ta] = confusion_matrix(yTest, prediction)
    classRepo[ta] = classification_report(y, prediction) 

Поскольку я работаю в блокноте Jupyter, я должен вручную распечатать каждую позицию cnf_matrix и classRepo и пройти ее самостоятельно.

Есть ли более элегантное решение, например, слияние classRepo и cnf_matrix вручную, чтобы я мог получить тот же результат, что и предложения cross_val_predict(x,y, cv=x)?

Есть ли лучший показатель для решения моей проблемы?

1 Ответ

0 голосов
/ 09 января 2019

«Выборка невозможна, потому что это может привести к неправильному весу классов.»

Это сильное утверждение, так как вы предполагаете, что ваши тренировочные данные являются идеальным представлением всех оставшихся, будущих наблюдаемых данных. Если бы я был в вашей команде, я бы попросил вас подтвердить эту гипотезу экспериментальными данными.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...