Я работаю над задачей машинного обучения, где мне даны:
• Набор обучающих данных (с метками)
• Тестовый набор данных (без меток)
Цель:
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
Многоразовый конвейер scikit-learn для набора табличных данных (обработка пропущенных значений, кодирование и выбор моде ⇐ Python
Программы на Python
1774600931
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
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия