У меня многоклассовая проблема с сильно несбалансированными данными.
Это один большой класс большинства с несколькими тысячами участников, некоторые классы с 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)
?
Есть ли лучший показатель для решения моей проблемы?