Я пытаюсь спрогнозировать классификацию с помощью логистической регрессии на основе данных обучения для ряда точек данных тестирования.
Я получаю выходные данные без ошибок, но Мне сказали, что результаты неверны (неправильный вывод будет считаться ошибкой, но при запуске кода ошибок нет).
Обучающие данные представляют собой набор из 4 различных категорий. в 375 точках есть 3 вариации на точку, поэтому строим трехмерный график. Я запустил программу подсчета на наборе и обнаружил, что более 50% точек относятся к категории 2. Мои первоначальные результаты заключались в том, что все точки тестирования относились к классу 2. Я попробовал сортировать тренировочные данные по нескольким различным наборам: случайный выбор 125 записей (это размер тестовых данных), поиск минимального количества всех категорий и создание обучающего набора с использованием одинакового количества точек из каждой категории.
Нет сортировка = все классы 2
случайная сортировка = все классы 2
сортировка по одинаковому номеру класса = дает мне ответ, в котором есть баллы, классифицированные по всем 4 категориям , но когда я подключаю их к онлайн-форме итогового теста, мой показатель точности составляет 26 %, что соответствует случайной случайности. Итак, я неправильно обрабатываю данные и не знаю где. Я надеюсь, что кто-то с большим опытом работы с классификацией регрессии может указать мне в правильном направлении.
Изменить: нужно ли мне переформатировать (преобразовать) массивы train_X, train_y и test_X перед вызовом Логистическая регрессия? Если да, то как? Возможно, я просто передаю ему неверные данные.
# forming tables to push through logistic regression
train_X = []
train_y = []
for i in range(len(train_table)):
train_X.append(
[train_table.x.iloc, train_table.y.iloc, train_table.z.iloc]
)
train_y.append(train_table.label.iloc)
test_X = []
for k in range(len(test_table)):
test_X.append([test_table.x.iloc[k], test_table.y.iloc[k], test_table.z.iloc[k]])
# Trying with and without normalize
clf = LogisticRegression().fit(normalize(train_X), train_y)
# clf = LogisticRegression().fit(train_X, train_y)
predict = clf.predict(test_X[:])
prob = clf.predict_proba(test_X[:])
results = pd.DataFrame(
sort_results(test_table, predict, prob),
columns=["", "timestamp", "UTC time", "label", "accuracy"],
)
РЕДАКТИРОВАТЬ: решено
Итак, я написал процесс, который сравнивал LogisticRegrade и RandomForestClassifier, и пропускал через него мои данные. Точность была намного выше при использовании RandomForestClassifier.
Оказывается, логистическая регрессия, возвращающая все двойки, не была ошибкой, это были просто результаты с низкой точностью. Я переписал программу, используя RandomForestClassifier, и добавил RandomizedSearchCV, который создает несколько деревьев, выбирает дерево с максимальной точностью и использует его для прогнозирования классификаций.
Новые возвращаемые значения по-прежнему в основном были 2, но точность сильно возросла.
param_dist = {'n_estimators': randint(100, 375),
'max_depth': randint(5, 20)}
rf = RandomForestClassifier()
rand_search = RandomizedSearchCV(rf, param_distributions = param_dist, n_iter=10, cv=5)
rand_search.fit(X, y)
best_rf = rand_search.best_estimator_
print('Best hyperparameters:', rand_search.best_params_)
predictions = pd.Series(best_rf.predict(to_pred_covariates))
Подробнее здесь: https://stackoverflow.com/questions/790 ... ct-results