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

ظهور الخطأ التالي: ValueError: Found input variables with inconsistent numbers of samples: [1, 1000]  أثناء محاولة تدريب نموذج LinearRegression

Meezo ML

السؤال

لدي كود بالشكل التالي:

data = pd.read_csv('D:\\house.csv');
X = data['size']
y = data['price']
lr = LinearRegression()
lr.fit(X,y)

لكنه يعطيني الخطأ التالي:

ValueError: Found input variables with inconsistent numbers of samples: [1, 1000]

ما السبب؟ وما الحل؟
 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

قد يظهر هذا الخطأ في أي نموذج آخر في Sklearn بشكل مشابه تماماً.
المشكلة تظهر في التابع fit ، حيث أن التابع يتوقع أبعاد X بالشكل:

[n_samples,n_features]

لكنك تعطيه مصفوفة من الشكل:

[n_samples,]

لحل المشكلة قم بإعادة تعيين الأبعاد:

X=X.reshape(-1,1)
lr.fit(X ,y)

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

مثلما تم التوضيح في المثال السابق، فإن مشكلة النموذج تكمن في عدم توافقية شكل المدخلات مع المخرجات X,y. لذلك لابد من التأكد من شكل المدخل X.shape, y.shape قبل تطبيق النموذج في البيانات. مثلاً للقيام بعملية تدريب نموذج بالإعتماد على عمودين من بيانات بوسطن (أحد البيانات المتوفرة في مكتبة sklearn)، نقوم بالتالي:

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston

boston = load_boston()
X = pd.DataFrame(boston.data[:,-4])
y = pd.DataFrame(boston.target)

lr = LinearRegression()
lr.fit(X,y)

في البدء قمنا بإستدعاء الدوال اللازمة، ثم حملنا مجموعة بيانات بوسطن، منها قمنا بإختيار عمودين، عمود feature من بيانات المدخلات X وهو الرابع من أخر الأعمدة (-4) و عمود المخرجات وهو يمثل الأسعار target، إن قمت بطباعة شكل البيانات:

print(X.shape, y.shape)
(506, 1) (506, 1)

فإنك تحصل على عدد مطابق للصفوف و الأعمدة في كل من X,y حيث القيمة الأولى تشير لعدد العينات samples و القيمة الثانية تشير لعدد الخصائص المستخدمة للوصول للسعر feature وهي واحدة. لاحظ أنك إن لم تقم بعملية التحويل ل dataframe لبيانات X فإن النموذج لن يعرف عدد الخصائص المراد تدريبه عليها و ينتج خطأ.

كما يمكنك أيضاً تحويل فقط بيانات المدخلات X و ترك y كما هي في شكل عدد من الصفوف بدون تحديد الأعمدة كالتالي:

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston

boston = load_boston()
X = pd.DataFrame(boston.data[:,-4])
y = boston.target

lr = LinearRegression()
lr.fit(X,y)

و بذلك تدخل البيانات حسب الشكل المطلوب للنموذج، يمكنك مراجعة موقع sklearn لمزيد من التفاصيل.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...