Каковы этапы классификации несбалансированного набора данных? - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужна помощь от любого, кто знаком с проблемой, с которой я сталкиваюсь.

Я хочу провести классификацию с использованием SVM, Random Forest и Deep Neural Network (DNN) с двумя разными наборами данных. Один из моих наборов данных сбалансирован, а другой - сильно несбалансирован. Ниже приведено изображение моего набора данных, несбалансированного для классификации.

Image of imbalanced class dataset

Я хочу сравнить результаты классификации для всего машинного обучения, используемого для обеих данных. Какой набор данных дает лучшие результаты для классификации. Что касается сбалансированного набора данных, у меня нет проблем, потому что способ справиться с ним нормально, но для несбалансированного я немного запутался.

Моя проблема в том, что я запутался в том, что делать для классификации с использованием несбалансированных данных. Из того, что я знаю, является то, что для обработки несбалансированных данных, мы должны сделать выборку.

Должен ли я сначала классифицировать и получить результаты, или я должен сначала сделать передискретизацию и классифицировать и получить результаты? Каковы надлежащие шаги при выполнении классификации с несбалансированным набором данных? Я надеюсь, что любой может помочь мне с этим, потому что я все еще новичок в этой области.

import numpy as np
import pandas as pd 
import seaborn as sns   
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report


data=pd.read_csv("ImbalancedData.csv")


y = data.Class
x = data.drop('Class,axis=1)


x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)

1 Ответ

1 голос
/ 14 апреля 2019

Как сказано в комментариях, я также думаю, что этот вопрос не совсем подходит для SO.Но, тем не менее, чтобы помочь вам, у вас есть несколько вариантов: 1) вы можете позаботиться о дисбалансе данных - занизить выборку класса большинства, повысить выборку класса меньшинства и т. Д. Вы можете проверить SMOTE.

2) для вашего разделения на поезд и тест важно, чтобы распределение между поездом и тестом было одинаковым, чтобы получить хорошие результаты, отражающие реальные данные.Scikit-learn имеет StrattifySplit, который позволяет вам делать это вместо обычного train_test_split.

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

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