Многоразовый конвейер 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.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import SimpleImputer

df = train_df.copy()
test = test_df.copy()

y = df['Survived']
X = df.drop('Survived',axis=1)

#drop_cols = [col for col in X.columns if "id" in col.lower()]

#X = X.drop(drop_cols, axis=1, errors='ignore')

num_cols = X.select_dtypes(include = np.number).columns
cat_cols = X.select_dtypes(include = 'object').columns

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])

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

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=42)

models = [
LogisticRegression(max_iter=1000, random_state=42),
RandomForestClassifier(n_estimators=100, random_state=42),
DecisionTreeClassifier(random_state=42)
]

best_model = None
best_score = 0
for m in models:
m.fit(X_train,y_train)
pred = m.predict(X_test)
accscore = accuracy_score(y_test,pred)
print(f"{m.__class__.__name__} Accuracy: {accscore:.4f}")
if accscore > best_score:
best_score = accscore
best_model = m

print(f"Best Model: {best_model.__class__.__name__}")

best_model.fit(X,y)
test_pred = best_model.predict(test)
return test_pred


import pandas as pd
train_df = pd.read_csv('train.csv')
test_df = pd.read_csv('test.csv')

train_df.shape
train_df.head()
train_df.columns
train_df.describe()
train_df.isnull().sum()
test_df.describe()
test_df.shape
test_df.isnull().sum()
train_df=train_df.drop(columns=["Cabin","PassengerId","Name","Ticket"])
test_df=test_df.drop(columns=["Cabin","PassengerId","Name","Ticket"])
train_df.isnull().sum()
test_pred = train_model(train_df, test_df)
test_df = pd.read_csv('test.csv')
submission = pd.DataFrame({
"PassengerId": test_df["PassengerId"],
"Survived": test_pred
})

submission.to_csv("submission.csv", index=False)
Ответить

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

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

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

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

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