Наиболее эффективные и чистые способы заполнения средним или медианным значениемPython

Программы на Python
Ответить
Anonymous
 Наиболее эффективные и чистые способы заполнения средним или медианным значением

Сообщение Anonymous »

Код: Выделить всё

import pandas as pd
train = pd.read_csv('Train.csv')
test = pd.read_csv('Test.csv')
train = train.drop('ID', axis='columns')
test = test.drop('ID', axis='columns')
TARGET_FEATURE = train.columns.difference(test.columns) #'Yield'
import xgboost
import lightgbm
import numpy as np
import catboost
from sklearn.pipeline import *
from sklearn.compose import TransformedTargetRegressor
from sklearn.model_selection import KFold, cross_validate
from datetime import *
def clean(df, training=1):
harv = pd.to_datetime(df['Harv_date'], errors='coerce')
seed = pd.to_datetime(df['SeedingSowingTransplanting'], errors='coerce')

df['TotalCropDuration'] = (harv - seed).dt.days.fillna(-1).astype(float)
df['Irrigation_Density'] = df['TransplantingIrrigationHours'] / (df['Acre'] + 1e-5)
df['Cultivation_Intensity'] = df['CropCultLand'] / (df['CultLand'] + 1e-5)
df['Irrigation_Density'] = df['TransplantingIrrigationHours'] / (df['Acre'] + 1e-5)
df['Cost_Per_Acre'] = df['TransIrriCost'] / (df['Acre'] + 1e-5)

df['Total_Urea'] = df[['BasalUrea', '1tdUrea', '2tdUrea']].sum(axis=1)
df['Total_Basal'] = df[['BasalDAP', 'BasalUrea']].sum(axis=1)
df['Total_Fertilizer'] = df['Total_Urea'] + df['BasalDAP'] + df['Ganaura'] + df['CropOrgFYM']
df['Nutrient_Density'] = df['Total_Fertilizer'] / (df['Acre'] + 1e-5)
for i in df.columns:
#print(i, df[i].dtype)
if df[i].dtype=='object':
df[i] = df[i].fillna('Missing').astype('category')
if not training:
for col in df.select_dtypes('category'):
df[col] = df[col].astype(train[col].dtype)
return df
train = clean(train, training=1)
test = clean(test, training=0)
X_train = train.drop(TARGET_FEATURE, axis='columns')
y_train = train[TARGET_FEATURE]
X_test = test
cat_features = []
for i in test.columns:
if test[i].dtype=='category':
cat_features.append(i)

#model = xgboost.XGBRegressor(n_estimators=337, enable_categorical=True)
model = (lightgbm.LGBMRegressor())
#model = catboost.CatBoostRegressor(loss_function='RMSE', cat_features=tuple(cat_features), iterations=3000, verbose=100, l2_leaf_reg=24)

kf = KFold(n_splits=5, shuffle=True, random_state=88301)
results = cross_validate(model, X_train, y_train, scoring='neg_root_mean_squared_error', cv=kf)
print(results)
print(-results['test_score'].mean())

model.fit(X_train, y_train)

predictions = model.predict(X_test)
final_sub = pd.read_csv("SampleSubmission.csv")
final_sub['Yield_RMSE'] = predictions
final_sub['Yield_MAE'] = predictions
final_sub.to_csv('XGAtt1.csv')

input_dim = X_train.shape[1]
encoding_dim = 8

input_layer = Input(shape=(input_dim,))
encoded = Dense(32, activation='relu')(input_layer)
encoded = Dense(16, activation='relu')(encoded)
bottleneck = Dense(encoding_dim, activation='relu', name='bottleneck')(encoded)
decoded = Dense(16, activation='relu')(bottleneck)
decoded = Dense(32, activation='relu')(decoded)
output_layer = Dense(input_dim, activation='linear')(decoded)

autoencoder = Model(inputs=input_layer, outputs=output_layer)
autoencoder.compile(optimizer='adam', loss='mse')

autoencoder.fit(X_train, X_train, epochs=50, batch_size=256, validation_data=(X_val, X_val))

encoder = Model(inputs=autoencoder.input, outputs=autoencoder.get_layer('bottleneck').output)
X_train_latent = encoder.predict(X_train)
это мой код, и я хотел спросить, является ли он оптимальным. Для стратифицированного разделения требуется не менее 2 выборок на класс, поскольку он должен включать хотя бы одну выборку как в обучающий, так и в тестовый наборы.
  • Общие параметры отвечают за определение общей функциональности модели XGBoost. Эти параметры включают в себя решения, например, какой усилитель (дерево, линейную модель и т. д.) использовать, какую степень детализации разрешить во время обучения или следует ли использовать графический процессор. Например: booster='gbtree', verbosity=1
  • Параметры бустера определяют, как должен выполняться каждый раунд повышения. К ним относятся параметры, специфичные для древовидных моделей, такие как max_глубина, min_child_weight и подвыборка. Они определяют сложность каждого дерева, стратегию регуляризации и способ выборки данных. Например: max_length=6, subsample=0.8, colsample_bytree=0.7
  • Параметры задачи обучения используются для определения функции потерь и цели модели. Эти параметры определяют, какой тип задачи обучения вы решаете (например, бинарная классификация, многоклассовая классификация, регрессия) и как оценивается производительность во время обучения. Например: Objective='binary: Logistic', eval_metric='auc'


Подробнее здесь: https://stackoverflow.com/questions/798 ... -or-median
Ответить

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

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

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

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

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