Ali Ahmed55 نشر منذ 2 ساعة أرسل تقرير نشر منذ 2 ساعة السلام عليكم ده الكود class ConditionalProbability: def __int__(self,col1,col2): self.column_name1 = col1 self.column_name2 = col2 def average(self): condition = data_train[self.col1] > data_train[self.col1].mean() subset = data_train[condition][self.column_name2] self.mu,self.sigma = np.mean(subset),np.std(subset) return self.mu,self.sigma def distribution_values(self): x = np.linspace(self.mu - 4*self.sigma, self.mu + 4 *self.sigma,100) pdf = scipy.stats.norm.pdf(x,self.mu,self.sigma) p_conditional = 1 - scipy.stats.norm.cdf return x,pdf,p_conditional def plot(self): x,pdf,p_conditional = self.distribution_values() plt.figure(figsize=(8,5)) plt.plot(x, pdf, label=f'Distribution of {self.col2} (given {self.col1} > mean)') plt.fill_between(x, pdf, where=(x > 0), color='orange', alpha=0.4, label=f'Area where returns > 0\nP = {p_conditional:.3f}') plt.axvline(0, color='red', linestyle='--', label='return = 0') plt.title('Conditional Probability Visualization') plt.xlabel('Forward Returns') plt.ylabel('Density') plt.legend() plt.show() وده الخطاء --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) /tmp/ipykernel_36/4033021502.py in <cell line: 0>() 1 v1 = ConditionalProbability('V1','forward_returns') ----> 2 v1.plot() /tmp/ipykernel_36/3439074975.py in plot(self) 20 21 def plot(self): ---> 22 x,pdf,p_conditional = self.distribution_values() 23 plt.figure(figsize=(8,5)) 24 plt.plot(x, pdf, label=f'Distribution of {self.col2} (given {self.col1} > mean)') /tmp/ipykernel_36/3439074975.py in distribution_values(self) 13 14 def distribution_values(self): ---> 15 x = np.linspace(self.mu - 4*self.sigma, self.mu + 4 *self.sigma,100) 16 pdf = scipy.stats.norm.pdf(x,self.mu,self.sigma) 17 p_conditional = 1 - scipy.stats.norm.cdf(0,self.mu,self.sigma) AttributeError: 'ConditionalProbability' object has no attribute 'mu' 3 اقتباس
0 Chihab Hedidi نشر منذ 2 ساعة أرسل تقرير نشر منذ 2 ساعة لديك خطأ في كتابة __init__ حيث كتبت __int__ بدلا من __init__، وهذا يعني أن الـ constructor لم يتم تنفيذه أبداً، و أيضا لم تستدع الدالة average() التي تحسب قيم mu و sigma، لذلك هذه الـ attributes غير موجودة عند استدعاء distribution_values(). و أيضا استخدمت self.col1 و self.col2 في بعض الأماكن بينما عرفت self.column_name1 و self.column_name2. لذا أرجوا تصحيح هذه الأخطاء و التجربة مرة أخرى. 1 اقتباس
0 Mustafa Suleiman نشر منذ 2 ساعة أرسل تقرير نشر منذ 2 ساعة في دالة distribution_values تستخدم المتغير self.mu لكن لم يتم إنشاؤه أو تعيين قيمة له بعد في الكائن v1، فعند تنفيذ v1.plot() يتم استدعاء دالة self.distribution_values() كأول خطوة. ثم دالة distribution_values تعمل على تنفيذ x = np.linspace(self.mu - 4*self.sigma وهي هنا تحتاج إلى قيمة للمتغيرين self.mu و self.sigma. والمكان الوحيد الذي يتم فيه إنشاء هذين المتغيرين هو داخل دالة average()، لكن لم تقم باستدعاء دالة average() قبل استدعاء دالة plot()، يجب استدعائها. كذلك يوجد خطأ إملائي في الدالة البانية __init__ حيث كتبت __int__ وبالتالي لن تعمل ولن يتم تعيين self.column_name1 و self.column_name2. وفي دالة average استخدمت self.col1 بينما في الدالة البانية استخدمت self.column_name1، فيجب توحيد الاسم. وحساب الاحتمال الشرطي غير مكتمل، فهنا p_conditional = 1 - scipy.stats.norm.cdf غير صحيح، فلم تقم باستدعاء الدالة cdf مع معاملاتها، يجب أن تكون p_conditional = 1 - scipy.stats.norm.cdf(0, self.mu, self.sigma ويوجد عدم تطابق أسماء المتغيرات في دالة plot حيث تستخدم self.col1 و self.col2 بينما يجب أن تكون self.column_name1 و self.column_name2. import numpy as np import scipy.stats import matplotlib.pyplot as plt import pandas as pd data_train = pd.DataFrame({ 'V1': np.random.randn(1000), 'forward_returns': np.random.randn(1000) * 0.02 }) class ConditionalProbability: def __init__(self, col1, col2): self.column_name1 = col1 self.column_name2 = col2 def average(self): condition = data_train[self.column_name1] > data_train[self.column_name1].mean() subset = data_train[condition][self.column_name2] self.mu, self.sigma = np.mean(subset), np.std(subset) return self.mu, self.sigma def distribution_values(self): x = np.linspace(self.mu - 4 * self.sigma, self.mu + 4 * self.sigma, 100) pdf = scipy.stats.norm.pdf(x, self.mu, self.sigma) p_conditional = 1 - scipy.stats.norm.cdf(0, self.mu, self.sigma) return x, pdf, p_conditional def plot(self): self.average() x, pdf, p_conditional = self.distribution_values() plt.figure(figsize=(8, 5)) plt.plot(x, pdf, label=f'Distribution of {self.column_name2} (given {self.column_name1} > mean)') plt.fill_between(x, pdf, where=(x > 0), color='orange', alpha=0.4, label=f'Area where returns > 0\nP = {p_conditional:.3f}') plt.axvline(0, color='red', linestyle='--', label='return = 0') plt.title('Conditional Probability Visualization') plt.xlabel('Forward Returns') plt.ylabel('Density') plt.legend() plt.show() 1 اقتباس
0 عبد الوهاب بومعراف نشر منذ 2 ساعة أرسل تقرير نشر منذ 2 ساعة المتغيرين self.mu و self.sigma غير موجودين داخل الكائن وقت استدعاء plot()، في الكود الدالة distribution_values() تعتمد على: self.mu, self.sigma لكن هذان المتغيران لا يتم إنشاؤهما إلا داخل الدالة average()، أي أنّك لم تستدع average() قبل أن تستدعي plot()، ولهذا السبب لم يتم تعريف self.mu و self.sigma. و أيضا في الـ constructor عندك خطأ مطبعي: def __int__(self, col1, col2): يجب أن تكون: def __init__(self, col1, col2): لأنّ __int__ تستخدم للتحويل إلى عدد صحيح، بينما __init__ هي دالة التهيئة. و أيضا في بعض الأماكن كتبت self.col1، وفي أخرى self.column_name1. يجب أن توحدها. 1 اقتباس
0 Ali Ahmed55 نشر منذ 2 ساعة الكاتب أرسل تقرير نشر منذ 2 ساعة شكراا جدا جدا لحضرتكم الكود اشتغل تمام الحمد الله جزاكم الله كل خير اقتباس
السؤال
Ali Ahmed55
السلام عليكم
ده الكود
وده الخطاء
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.