Многоразовый конвейер scikit-learn для набора табличных данных (обработка пропущенных значений, кодирование и выбор модеPython

Программы на Python
Ответить
Anonymous
 Многоразовый конвейер scikit-learn для набора табличных данных (обработка пропущенных значений, кодирование и выбор моде

Сообщение Anonymous »

Я работаю над задачей машинного обучения, где мне даны:

• Набор обучающих данных (с метками)

• Тестовый набор данных (без меток)
Цель:

1. Выполнение базовой предварительной обработки (обработка пропущенных значений, кодирование категориальных признаков)

2. Обучите простую модель (например, логистическую регрессию, дерево решений, случайный лес)

3. Выберите лучшую модель на основе точности проверки

4. Создание прогнозов для тестового набора данных
Я создал функцию многократного использования, которая выполняет все эти шаги. Я хотел бы знать:

• Является ли этот подход правильным и надежным для общих наборов табличных данных?

• Есть ли какие-либо улучшения или рекомендации, которым мне следует следовать?
Вот код:
def train_model(train_df, test_df):

import pandas as pd
import numpy as np

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# Copy data
df = train_df.copy()

# Define target column (update if needed)
target = "target"
y = df[target]
X = df.drop(target, axis=1)

# Drop ID-like columns
drop_cols = [col for col in X.columns if "id" in col.lower()]
X = X.drop(drop_cols, axis=1, errors="ignore")
test = test_df.drop(drop_cols, axis=1, errors="ignore")

# Identify column types
num_cols = X.select_dtypes(include=np.number).columns
cat_cols = X.select_dtypes(include="object").columns

# Handle missing values
num_imputer = SimpleImputer(strategy="mean")
X[num_cols] = num_imputer.fit_transform(X[num_cols])
test[num_cols] = num_imputer.transform(test[num_cols])

cat_imputer = SimpleImputer(strategy="most_frequent")
X[cat_cols] = cat_imputer.fit_transform(X[cat_cols])
test[cat_cols] = cat_imputer.transform(test[cat_cols])

# Encode categorical variables
for col in cat_cols:
le = LabelEncoder()
X[col] = le.fit_transform(X[col])
test[col] = le.transform(test[col])

# Train-validation split
X_train, X_val, y_train, y_val = train_test_split(
X, y, test_size=0.2, random_state=42
)

# Train multiple models
models = [
LogisticRegression(max_iter=1000),
DecisionTreeClassifier(),
RandomForestClassifier(n_estimators=100)
]

best_model = None
best_acc = 0

for m in models:
m.fit(X_train, y_train)
pred = m.predict(X_val)
acc = accuracy_score(y_val, pred)
print(m.__class__.__name__, acc)

if acc > best_acc:
best_acc = acc
best_model = m

# Train best model on full data
best_model.fit(X, y)

# Predict on test set
predictions = best_model.predict(test)

return predictions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»