أتلقى هذا الخطأ عندما أحاول استخدام LabelBinarizer
و LabelEncoder
في خط أنابيب:
sklearn/pipeline.pyc in fit_transform(self, X, y, **fit_params)
141 Xt, fit_params = self._pre_transform(X, y, **fit_params)
142 if hasattr(self.steps[-1][-1], 'fit_transform'):
--> 143 return self.steps[-1][-1].fit_transform(Xt, y, **fit_params)
144 else:
145 return self.steps[-1][-1].fit(Xt, y, **fit_params).transform(Xt)
TypeError: fit_transform() takes exactly 2 arguments (3 given)
يبدو أن هذا يرجع إلى أن توقيعات الفئات
أعتقد أن هذا حل سهل جدًا (فقط قم بتغيير التوقيع إلى def(self, X, y=None)
) ويسعدني إرسال طلب سحب من أجله ، لكنني أردت التحقق مما إذا كانت هناك أي أسباب أخرى تجعل التوقيعات هي بالطريقة التي لم أفكر بها.
أعتقد أنك محق في إصلاح ذلك.
في 26 أبريل 2014 الساعة 19:37 ، كتب hxu [email protected] :
أحصل على هذا الخطأ عندما أحاول استخدام LabelBinarizer و LabelEncoder في ملف
خط انابيب:sklearn / pipeline.pyc في fit_transform (self، X، y، * _fit_params)
141 Xt، fit_params = self._pre_transform (X، y، * _fit_params)
142 if hasattr (self.steps [-1] [- 1]، 'fit_transform'): -> 143 إرجاع self.steps [-1] [- 1] .fit_transform (Xt، y، * _fit_params)
144 آخر:
145 إرجاع self.steps [-1] [- 1] .fit (Xt، y، * _fit_params) .transform (Xt)
TypeError: تأخذ fit_transform () وسيطتين بالضبط (3 معطاة)ويبدو أن هذا هو لصالح والطبقات "تحويل signat ureshttps: //github.com/scikit-learn/scikit-learn/blob/master/sklearn/preprocessing/label.py#L85are تختلف عن معظم المقدرات الأخرى ويقبل فقط حجة واحدة.
أعتقد أن هذا حل سهل جدًا (فقط قم بتغيير التوقيع لتعريف (ذاتي ،
X ، y = لا شيء)) سأكون سعيدًا لإرسال طلب سحب ، لكنني أردت ذلك
تحقق مما إذا كانت هناك أي أسباب أخرى تشير إلى أن التوقيعات هي على هذا النحو
هي التي لم أفكر بها.-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/scikit-learn/scikit-learn/issues/3112
.
في # 3113 ، قررنا أن هذا لن يتم إصلاحه لأن ترميز الملصق لا ينتمي حقًا إلى Pipeline
.
jnothman ، فقط
قد يكون من الأفضل لك كتابة كود Pipeline-like
الخاص بك (ربما موروث من الموجود) للتعامل مع حالتك الخاصة.
بدلاً من استخدام LabelBinarizer في خط الأنابيب ، قمت للتو بتنفيذ المحول الخاص بي:
class CustomBinarizer(BaseEstimator, TransformerMixin):
def fit(self, X, y=None,**fit_params):
return self
def transform(self, X):
return LabelBinarizer().fit(X).transform(X)
يبدو أن تفعل خدعة!
تعديل:
هذا حل أفضل:
https://github.com/scikit-learn/scikit-learn/pull/7375/files#diff -1e175ddb0d84aad0a578d34553f6f9c6
أرى أنه كان هناك الكثير من ردود الفعل السلبية على هذه الصفحة. أعتقد أنه كان هناك سوء فهم منذ فترة طويلة لغرض LabelBinarizer و LabelEncoder. هذه للأهداف وليس الميزات. على الرغم من الاعتراف بأنها مصممة (وسُميت بشكل سيئ) قبل وقتي.
على الرغم من أنني أعتقد أنه كان من الممكن أن يستخدم المستخدمون CountVectorizer (أو DictVectorizer مع dataframe.to_dict(orient='records')
إذا كنت قادمًا من إطار بيانات) لهذا الغرض لفترة طويلة ، فقد قمنا مؤخرًا بدمج CategoricalEncoder
(# 9151 ) إلى Master ، على الرغم من أنه قد يتم تحويل هذا إلى OneHotEncoer ، و OrdinalEncoder جديد قبل الإصدار (# 10521).
آمل أن يلبي هذا احتياجات السكان الساخطين بشكل واضح.
يجب أن أقول أنه بصفتي شخصًا تطوع بكميات هائلة من وقت الفراغ لتطوير هذا المشروع لما يقرب من خمس سنوات حتى الآن (وتم توظيفه مؤخرًا للعمل عليه أيضًا) ، أرى حجم ردود الفعل السلبية ، بدلاً من المساهمات البناءة إلى المكتبة أمر محزن للغاية. على الرغم من أن إجابتي أعلاه يجب أن تكتب شيئًا جديدًا يشبه خط الأنابيب ، بدلاً من محول جديد للمدخلات الفئوية كان سوء فهم من جانبي (وكان ينبغي / كان من الممكن تصحيحه من قبل الآخرين) ، والذي آمل أن يكون مفهومًا أثناء العمل من خلاله عبء العمل الهائل الذي يحافظ على هذا المشروع.
التعليق الأكثر فائدة
أرى أنه كان هناك الكثير من ردود الفعل السلبية على هذه الصفحة. أعتقد أنه كان هناك سوء فهم منذ فترة طويلة لغرض LabelBinarizer و LabelEncoder. هذه للأهداف وليس الميزات. على الرغم من الاعتراف بأنها مصممة (وسُميت بشكل سيئ) قبل وقتي.
على الرغم من أنني أعتقد أنه كان من الممكن أن يستخدم المستخدمون CountVectorizer (أو DictVectorizer مع
dataframe.to_dict(orient='records')
إذا كنت قادمًا من إطار بيانات) لهذا الغرض لفترة طويلة ، فقد قمنا مؤخرًا بدمجCategoricalEncoder
(# 9151 ) إلى Master ، على الرغم من أنه قد يتم تحويل هذا إلى OneHotEncoer ، و OrdinalEncoder جديد قبل الإصدار (# 10521).آمل أن يلبي هذا احتياجات السكان الساخطين بشكل واضح.
يجب أن أقول أنه بصفتي شخصًا تطوع بكميات هائلة من وقت الفراغ لتطوير هذا المشروع لما يقرب من خمس سنوات حتى الآن (وتم توظيفه مؤخرًا للعمل عليه أيضًا) ، أرى حجم ردود الفعل السلبية ، بدلاً من المساهمات البناءة إلى المكتبة أمر محزن للغاية. على الرغم من أن إجابتي أعلاه يجب أن تكتب شيئًا جديدًا يشبه خط الأنابيب ، بدلاً من محول جديد للمدخلات الفئوية كان سوء فهم من جانبي (وكان ينبغي / كان من الممكن تصحيحه من قبل الآخرين) ، والذي آمل أن يكون مفهومًا أثناء العمل من خلاله عبء العمل الهائل الذي يحافظ على هذا المشروع.