سرمایه گذاری متفاوت در سال نو 🍎🌱 ۳۵٪ تخفیف نوروزی ➕ حضور رایگان در مسترمایند نخبگان صنعت نرم‌افزار 💻✅
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ غلامحسین شیخ سفلی
دلیل مغایرت بین (MAE)
جامعه هوش مصنوعی ایجاد شده در ۱۹ شهریور ۱۴۰۳

با سلام و احترام:

در قسمت الگوریتم Catboost و مسئله محاسبه خسارت بیمه وقتی   y_test , y_pred) Ln ) را می‌گیریم و سپس از آنها MAE  می گیریم عدد خطا حدود 1200 دلار میشه که با 1.5 دلاری که توسط استاد محاسبه شده خیلی متفاوته علت این امر چیست؟آیا محاسبه خطا به این شکل درست است یا اینکه مستقماً Ln خطای محاسبه شده توسط الگوریتم را بگیریم ممنون میشم راهنمایی کنید

سلام متوجه منظورتون نشدم. میتونید کدتون رو اینجا بذارید تا ببینم و با ویدیو مقایسه کنم؟

مسعود کاویانی ۰۶ مهر ۱۴۰۳، ۲۲:۲۱

سلام و احترام:

همونطوری که خودتون در ویدئو گفتید برای اینکه توزیع تارگت نرمال بشه از تارگت لگاریتم نپرین گرفتیم و بعد به الگوریتم دادیم. من به جای اینکه ازMAE محاسبه شده توسط الگوریتم EXP بگیرم به صورت زیر عمل کردم:

y_pred=model.predict(X_test)

y_pred = np.exp(y_pred)

y_test = np.exp(y_test)

from sklearn.metrics import mean_absolute_error

print(mean_absolute_error(y_test, y_pred))

1222.5295688174115=mean_absolute_error

در صورتی که وقتی از MAE محاسبه شده توسط آلگوریتم EXP میگیریم این عدد 1.5 دلار میشه.

غلامحسین شیخ سفلی ۰۷ مهر ۱۴۰۳، ۰۸:۰۱

با سلام
منم دقیقا به همین مشکل بر خوردم
from catboost import CatBoostRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, r2_score
import pandas as pd
import numpy as np

# Load the data
data = pd.read_csv('train.csv')

# Separate features and target
X = data.drop(columns=['loss'])  # Drop the target column
y = data['loss']  # Target column

# Apply log transformation to the target (loss column)
y_log = np.log1p(y)  # log1p is log(1 + x), so it works even for values of y=0

# Identify categorical columns (assuming all starting with "cat")
categorical_features = [col for col in X.columns if col.startswith('cat')]

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y_log, test_size=0.2, random_state=42)

# Initialize CatBoostRegressor
model = CatBoostRegressor(iterations=120, learning_rate=0.05, depth=6, eval_metric='MAE', verbose=10)

# Train the model with validation set
model.fit(X_train, y_train, cat_features=categorical_features, eval_set=(X_test, y_test))

# Make predictions
y_pred_log = model.predict(X_test)

# Inverse transform the predictions to get the original scale
y_pred = np.expm1(y_pred_log)  # inverse of log1p (i.e., exp(x) - 1)

# Evaluate the model
mae = mean_absolute_error(np.expm1(y_test), y_pred)  # inverse of log1p for true values
r2 = r2_score(np.expm1(y_test), y_pred)

print(f"Mean Absolute Error: {mae}")
print(f"R2 Score: {r2}")

# Get best test score (MAE) and best iteration
best_test = model.best_score_['learn']['MAE']  # Access the 'learn' score for the training set
best_iteration = model.get_best_iteration()

print(f"Best Test Score (MAE): {best_test}")
print(f"Best Iteration: {best_iteration}")

علی کهتری ۰۵ دی ۱۴۰۳، ۲۱:۵۶

سلام بله صحبت شما درسته، فکر کنم توی ویدیو اشتباه گفته بودم

ممنون که گفتید، درستش میکنم

مسعود کاویانی ۱۲ دی ۱۴۰۳، ۲۱:۰۷