Я пытаюсь спрогнозировать классификацию с помощью логистической регрессии на основе данных обучения для ряда точек данных тестирования.
Я получаю выходные данные без ошибок, но Мне сказали, что результаты неверны (неправильный вывод будет считаться ошибкой, но при запуске кода ошибок нет).
Обучающие данные представляют собой набор из 4 различных категорий. в 375 точках имеется 3 вариации на точку, поэтому строим график на трехмерном графике. Я запустил программу подсчета на наборе и обнаружил, что более 50% точек относятся к категории 2. Мои первоначальные результаты заключались в том, что все точки тестирования относились к классу 2. Я попробовал сортировать тренировочные данные по нескольким различным наборам: случайный выбор 125 записей (это размер тестовых данных), поиск минимального количества всех категорий и создание обучающего набора с использованием одинакового количества точек из каждой категории.
Нет сортировка = все классы 2
случайная сортировка = все классы 2
сортировка по одинаковому номеру класса = дает мне ответ, в котором есть баллы, отнесенные ко всем 4 категориям , но когда я подключаю их к онлайн-форме финального теста, мой показатель точности составляет 26 %, что соответствует случайной случайности. Итак, я неправильно обрабатываю данные и не знаю где. Я надеюсь, что кто-то с большим опытом работы с классификацией регрессии может указать мне в правильном направлении.
Изменить: нужно ли мне переформатировать (преобразовать) массивы train_X, train_y и test_X перед вызовом Логистическая регрессия? Если да, то как? Возможно, я просто передаю ему искаженные данные.
Если вы хотите получить код со списками входных данных, вы можете пойти сюда: текст
Если вы просто хотите посмотреть код, вот вам:
# Needed imports
import datetime
import os
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import normalize
data_dir = "./data"
# start process timer
start_time = datetime.datetime.now()
# Load data from files - training data
df_train_time_series = pd.read_csv(os.path.join(data_dir, "train_time_series.csv"))
df_train_labels = pd.read_csv(os.path.join(data_dir, "train_labels.csv"))
# Load data from files - test data
df_test_time_series = pd.read_csv(os.path.join(data_dir, "test_time_series.csv"))
df_test_labels = pd.read_csv(os.path.join(data_dir, "test_labels_input.csv"))
# functional processes
def train_data(train_ts, train_l):
"""Grabbing the training data imported from files, and forming it into table that I can work with."""
train_table = []
for i in range(len(train_l)):
x = 0
y = 0
z = 0
ind = None
for j in range(len(train_ts)):
ind = (
train_l.orig_index.iloc
if train_ts.timestamp.iloc[j] == train_l.timestamp.iloc
else None
)
if ind:
x = train_ts.x.iloc[j]
y = train_ts.y.iloc[j]
z = train_ts.z.iloc[j]
break
if ind:
train_table.append([x, y, z, train_l.label.iloc])
return train_table
def test_data(test_ts, test_l):
"""Grabbing the test data imported from files, and forming it into table that I can work with."""
test_table = []
for i in range(len(test_l)):
x = 0
y = 0
z = 0
time_stamp = test_l.timestamp.iloc
utc_time = test_l["UTC time"].iloc
ind = None
for j in range(len(test_ts)):
ind = (
test_l.orig_index.iloc
if test_ts.timestamp.iloc[j] == test_l.timestamp.iloc
else None
)
if ind:
x = test_ts.x.iloc[j]
y = test_ts.y.iloc[j]
z = test_ts.z.iloc[j]
break
if ind:
test_table.append([ind, time_stamp, utc_time, x, y, z, 0, 0])
return test_table
def sort_results(test, predict, prob):
"""Grabbing the logistic predictions and probabilities, and forming them into a results table."""
results = []
for i in range(len(test)):
results.append(
[
test.orig_index.iloc,
test.timestamp.iloc,
test["UTC time"].iloc,
predict[i],
max(prob[i]),
]
)
return results
def sift_training_by_classification(train):
"""The training table has over 50% of classification 2, so this function counts the number of entries for each classification, grabs the minimum count, and then selects that many entries from each category. Without making the counts even I can only get results of all classification 2."""
t1 = 0
t2 = 0
t3 = 0
t4 = 0
for i in range(len(train)):
t1 += 1 if train.label.iloc[i] == 1 else 0
t2 += 1 if train.label.iloc[i] == 2 else 0
t3 += 1 if train.label.iloc[i] == 3 else 0
t4 += 1 if train.label.iloc[i] == 4 else 0
min_count = min(t1, t2, t3, t4)
print("min count: ", min_count)
s1 = 0
s2 = 0
s3 = 0
s4 = 0
train_sift = []
for j in range(len(train)):
label = train.label.iloc[j]
if label == 1 and s1
Подробнее здесь: https://stackoverflow.com/questions/790 ... ct-results
Логистическая регрессия Python не возвращает правильные результаты ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение