اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

ده الكود

loss, accuracy = deep_hit_model.evaluate(x_test_scaled, y_target_test)
print(f"Test Loss: {loss}")

rmse = np.sqrt(loss)
print(f"Test Rmse: {loss}")

percentage_error = (rmse / np.mean(y_target_test)) * 100
print(f"Percentage_error: {percentage_error:.2f}%")

ودي نتجيه ال

Percentage Error: 51.93%

 

Recommended Posts

  • 0
نشر

ما حصلت عليه هو أنّ RMSE يساوي حوالي 52% من متوسط القيم الفعلية، وتلك النسبة  مرتفعة في معظم التطبيقات العملية خاصةً في التوقعات المالية أو الطبية، بالتالي تحتاج إلى تحسين المعلمات، زيادة البيانات، وأمور أخرى.

وللعلم النسبة المئوية للخطأ تُحسب باستخدام MAPE (Mean Absolute Percentage Error)، لكونه مقياسًا معياريًّا لفهم متوسط الخطأ النسبي لكل عينة.

ما قمت به أنت هو (RMSE / Mean * 100) وذلك يعطي نتائج مضللة في حال تباين البيانات كبير.

loss, accuracy = deep_hit_model.evaluate(x_test_scaled, y_target_test)
print(f"Test Loss (MSE): {loss}")

mse = loss
rmse = np.sqrt(mse)
print(f"Test RMSE: {rmse}")

mean_actual = np.mean(y_target_test)
percentage_error = (rmse / mean_actual) * 100
print(f"Percentage Error (RMSE/Mean): {percentage_error:.2f}%")

# الأفضل: حساب MAPE للدقة
y_pred = deep_hit_model.predict(x_test_scaled)
mape = np.mean(np.abs((y_target_test - y_pred) / y_target_test)) * 100
print(f"MAPE: {mape:.2f}%")

 

  • 0
نشر
بتاريخ 10 دقائق مضت قال Mustafa Suleiman:

ما حصلت عليه هو أنّ RMSE يساوي حوالي 52% من متوسط القيم الفعلية، وتلك النسبة  مرتفعة في معظم التطبيقات العملية خاصةً في التوقعات المالية أو الطبية، بالتالي تحتاج إلى تحسين المعلمات، زيادة البيانات، وأمور أخرى.

وللعلم النسبة المئوية للخطأ تُحسب باستخدام MAPE (Mean Absolute Percentage Error)، لكونه مقياسًا معياريًّا لفهم متوسط الخطأ النسبي لكل عينة.

ما قمت به أنت هو (RMSE / Mean * 100) وذلك يعطي نتائج مضللة في حال تباين البيانات كبير.

loss, accuracy = deep_hit_model.evaluate(x_test_scaled, y_target_test)
print(f"Test Loss (MSE): {loss}")

mse = loss
rmse = np.sqrt(mse)
print(f"Test RMSE: {rmse}")

mean_actual = np.mean(y_target_test)
percentage_error = (rmse / mean_actual) * 100
print(f"Percentage Error (RMSE/Mean): {percentage_error:.2f}%")

# الأفضل: حساب MAPE للدقة
y_pred = deep_hit_model.predict(x_test_scaled)
mape = np.mean(np.abs((y_target_test - y_pred) / y_target_test)) * 100
print(f"MAPE: {mape:.2f}%")

 

انا اصلان عاوز ان استخدم الداله دي MSE (Mean Squared Error)  ولكن بيحصل الخطاء ده مش عارف ليه

mean_squared_error_value = mean_squared_error(y_target_test , target , multioutput='uniform_average') 
print(f"Mean Squared Error: {mean_squared_error_value}")

ولكن بيظهر الخطاء ده

File "e:\PYHON\project-lifetrack\lifetrack2.py", line 246, in <module>
    mean_squared_error_value = mean_squared_error(y_target_test , target , multioutput='uniform_average') 
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\utils\_param_validation.py", line 216, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 565, in mean_squared_error
    _check_reg_targets_with_floating_dtype(
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 198, in _check_reg_targets_with_floating_dtype
    y_type, y_true, y_pred, multioutput = _check_reg_targets(
                                          ^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 104, in _check_reg_targets
    check_consistent_length(y_true, y_pred)
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\utils\validation.py", line 475, in check_consistent_length
    raise ValueError(
ValueError: Found input variables with inconsistent numbers of samples: [4320, 3]

 

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

يجب عليك التأكد من أن الـ loss الذي يتم استخدامه لحساب الـ RMSE هو بالفعل Mean Squared Error (MSE) وليس نوعا آخر من الدوال الخسارة (Loss Functions). حيث إذا كان الـ loss ليس MSE فإن حساب الـ RMSE بهذه الطريقة لن يكون صحيحا.

لذلك إذا كانت الدالة هيMSE فإن النسبة المئوية للخطأ التي تم الحصول عليها هي 51.93%. هذا يعني أن الخطأ في النموذج يمثل حوالي 51.93% من متوسط القيم الفعلية وهذه القيمة ليست جيدة 

 

بتاريخ 1 دقيقة مضت قال Ali Ahmed55:

انا اصلان عاوز ان استخدم الداله دي MSE (Mean Squared Error)  ولكن بيحصل الخطاء ده مش عارف ليه

mean_squared_error_value = mean_squared_error(y_target_test , target , multioutput='uniform_average') 
print(f"Mean Squared Error: {mean_squared_error_value}")
 

ولكن بيظهر الخطاء ده

File "e:\PYHON\project-lifetrack\lifetrack2.py", line 246, in <module>
    mean_squared_error_value = mean_squared_error(y_target_test , target , multioutput='uniform_average') 
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\utils\_param_validation.py", line 216, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 565, in mean_squared_error
    _check_reg_targets_with_floating_dtype(
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 198, in _check_reg_targets_with_floating_dtype
    y_type, y_true, y_pred, multioutput = _check_reg_targets(
                                          ^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 104, in _check_reg_targets
    check_consistent_length(y_true, y_pred)
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\utils\validation.py", line 475, in check_consistent_length
    raise ValueError(
ValueError: Found input variables with inconsistent numbers of samples: [4320, 3]
 

 

هذه المشكلة بسبب أبعاد البيانات حيث :

  • y_target_test يحتوي على 4320 عنصر
  • target يحتوي على 3 عناصر فقط

لذلك يرجى أولا التأكد من الأبعاد الصحيحة :

print(y_target_test.shape) 
print(target.shape)    

وإذا كانت الأبعاد مختلفة يجب عليك التأكد من جعل الأبعاد متشابهة

  • 0
نشر
بتاريخ 2 ساعة قال Ali Ahmed55:

انا اصلان عاوز ان استخدم الداله دي MSE (Mean Squared Error)  ولكن بيحصل الخطاء ده مش عارف ليه

mean_squared_error_value = mean_squared_error(y_target_test , target , multioutput='uniform_average') 
print(f"Mean Squared Error: {mean_squared_error_value}")

ولكن بيظهر الخطاء ده

File "e:\PYHON\project-lifetrack\lifetrack2.py", line 246, in <module>
    mean_squared_error_value = mean_squared_error(y_target_test , target , multioutput='uniform_average') 
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\utils\_param_validation.py", line 216, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 565, in mean_squared_error
    _check_reg_targets_with_floating_dtype(
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 198, in _check_reg_targets_with_floating_dtype
    y_type, y_true, y_pred, multioutput = _check_reg_targets(
                                          ^^^^^^^^^^^^^^^^^^^
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\metrics\_regression.py", line 104, in _check_reg_targets
    check_consistent_length(y_true, y_pred)
  File "E:\PYHON\project-lifetrack\Lib\site-packages\sklearn\utils\validation.py", line 475, in check_consistent_length
    raise ValueError(
ValueError: Found input variables with inconsistent numbers of samples: [4320, 3]

 

متغيرات y_target_test و target لديهما أبعاد غير متوافقة، لاحظ y_target_test يحتوي على 4320 عينة وtarget يحتوي على 3 عينات.

ربما الـ target الذي تستخدمه في الدالة ليس توقعات النموذج، بل هو متغير آخر بأبعاد خاطئة، عليك استخدام model.predict() لإنشاء التوقعات:

y_pred = deep_hit_model.predict(x_test_scaled)
mean_squared_error_value = mean_squared_error(y_target_test, y_pred)

أو النموذج يعود بمخرجات متعددة Multi-output Regression، فسيكو يكون y_pred ذو شكل (num_samples, num_outputs)، بينما y_target_test له شكل (num_samples,).

بالتالي لو y_target_test له شكل (4320,)، فيجب أن يكون y_pred له شكل (4320, 1) أو (4320,).

y_pred = y_pred.reshape(-1, 1)
# أو
y_target_test = y_target_test.reshape(-1, 1)

أو ربما استخدمت اسم متغير خاطئ مثل target بدلًا من y_pred.

  • 0
نشر
بتاريخ 40 دقائق مضت قال Mustafa Suleiman:

ربما الـ target الذي تستخدمه في الدالة ليس توقعات النموذج، بل هو متغير آخر بأبعاد خاطئة، عليك استخدام model.predict() لإنشاء التوقعات:

 

الا هو بس زي هو الملف عبار عن 3 صفوف فعلان 

الف شكراا جدا جدا لحضرتكم

جزاكم الله كل خير

  • 0
نشر
بتاريخ 17 ساعة قال Mustafa Suleiman:

متغيرات y_target_test و target لديهما أبعاد غير متوافقة، لاحظ y_target_test يحتوي على 4320 عينة وtarget يحتوي على 3 عينات.

ربما الـ target الذي تستخدمه في الدالة ليس توقعات النموذج، بل هو متغير آخر بأبعاد خاطئة، عليك استخدام model.predict() لإنشاء التوقعات:

y_pred = deep_hit_model.predict(x_test_scaled)
mean_squared_error_value = mean_squared_error(y_target_test, y_pred)

أو النموذج يعود بمخرجات متعددة Multi-output Regression، فسيكو يكون y_pred ذو شكل (num_samples, num_outputs)، بينما y_target_test له شكل (num_samples,).

بالتالي لو y_target_test له شكل (4320,)، فيجب أن يكون y_pred له شكل (4320, 1) أو (4320,).

y_pred = y_pred.reshape(-1, 1)
# أو
y_target_test = y_target_test.reshape(-1, 1)

أو ربما استخدمت اسم متغير خاطئ مثل target بدلًا من y_pred.

طيب مش ممكن ان اخد فقط 3 صفوف من العمود غy_target_test عشان يكون متسوي مع الtarget ؟

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...