Scikit-learn: DecisionTreeClassifier نوع تسمية غير معروف: "مستمر متعدد المخرجات"

تم إنشاؤها على ٣١ أكتوبر ٢٠١٦  ·  18تعليقات  ·  مصدر: scikit-learn/scikit-learn

وصف


تعطل DecisionTreeClassifier مع unknown label type: 'continuous-multioutput' . لقد حاولت تحميل ملف csv باستخدام csv.reader و pandas.read_csv وبعض الأشياء الأخرى مثل التحليل سطراً بسطر.

خطوات / كود الاستنساخ

from sklearn import tree
feature_df = pd.read_csv(os.path.join(_PATH, 'features.txt'))
target_df = pd.read_csv(os.path.join(_PATH, 'target.txt'))
feature_df = feature_df._get_numeric_data()
target_df = target_df._get_numeric_data()
feature_df = feature_df.fillna(0)
target_df = target_df.fillna(0)
clf = tree.DecisionTreeClassifier()
clf_o = clf.fit(feature_df, target_df)

features.txt
target.txt

نتائج متوقعة


يُبلغ الخطأ الذي تم إلقاؤه المستخدم ما هو الخطأ حقًا ، وأن مجموعة البيانات الخاصة به لا تتبع الافتراضات (وما هي هذه)

النتائج الفعلية

Traceback (most recent call last):
  File "D:\Piotr\Documents\uni\bap\BAPFingerprintLocalisation\main.py", line 19,
 in <module>
    decision_tree.treeClassification()
  File "D:\Piotr\Documents\uni\bap\BAPFingerprintLocalisation\code\decision_tree
.py", line 56, in treeClassification
    clf_o = clf.fit(feature_df, target_df)
  File "C:\Python35\lib\site-packages\sklearn\tree\tree.py", line 182, in fit
    check_classification_targets(y)
  File "C:\Python35\lib\site-packages\sklearn\utils\multiclass.py", line 172, in
 check_classification_targets
    raise ValueError("Unknown label type: %r" % y_type)
ValueError: Unknown label type: 'continuous-multioutput'

إصدارات

Windows-10-10.0.14393-SP0
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)]
NumPy 1.11.0
SciPy 0.17.1
Scikit-Learn 0.18

تحديث:

لقد غيرت عدد المتغيرات المستهدفة إلى واحد ، فقط لتبسيط الأمور

clf_o = clf.fit(feature_df, target_df.ix[:,1])

المخرجات: Unknown label type: 'continuous'

التعليق الأكثر فائدة

يجب أن تستخدم DecisionTreeRegressor

ال 18 كومينتر

يجب أن تستخدم DecisionTreeRegressor

مرة أخرى ، تفتقر الوثائق إلى المعلومات حول عدد الفئات التي يمكن أن يتعامل معها التصنيف. أستطيع أن أرى أن مجموعة البيانات الخاصة بي تحتوي على عدد كبير جدًا من الفئات ، لكن رسالة الخطأ الخاصة بك ذكرت شيئًا مثل "التصنيفات" التي كانت مربكة بما يكفي لتنسى كيف تبدو مجموعة البيانات في الواقع وتتدخل في طرق تمرير مجموعات البيانات.
لقد قمت بتحديث المشكلة وأطلب منك إعادة فتحها.

يجب تمثيل أهداف التصنيف كأعداد صحيحة أو كسلاسل. يمكنك أن تطلب من Pandas قراءة البيانات الهدف كسلسلة وستكون بخير.

أو استخدم DecisionTreeRegressor

هذه ليست مشكلتي

راجع قسم "النتائج المتوقعة" الخاص بمشكلتي

أنت محق في أن رسالة الخطأ يمكن أن تكون أكثر فائدة ، لكن وثائق fit تقول "تسميات الفئة في التصنيف". لا تتردد في إرسال مشكلة أوضح حول الحاجة إلى توثيق نوع البيانات المتوقع للتصنيف y s ، وآخر يتعلق برفع رسائل الخطأ المناسبة عند تمرير البيانات العائمة كـ y إلى المصنف.

اسمحوا لي أن أستشهد بالقسم الكامل لوثائق توثيق المعامل y للوظيفة الملائمة في فئة DecisionTreeClassifier

القيم المستهدفة (تسميات الفئة في التصنيف ، الأرقام الحقيقية في الانحدار). في حالة الانحدار ، استخدم dtype = np.float64 والنظام = 'C' لتحقيق أقصى قدر من الكفاءة.

هذا لا يعني أن الفصول لها سقف. ما الذي يجعل المتغير المستهدف يسمى مستمر؟ كم عدد الفئات التي يجب أن تكون هناك ليتم اعتبارها متغيرًا مستهدفًا من نوع الانحدار؟ إذا كان الأمر يتعلق بالتراجع ، فهل يمكنني فعل الانحدار باستخدام DecisionTreeClassifier؟ ولم لا؟ إلخ...

بالنسبة لتعليقك السابق:

يجب تمثيل أهداف التصنيف كأعداد صحيحة أو كسلاسل. يمكنك أن تطلب من Pandas قراءة البيانات الهدف كسلسلة وستكون بخير.

هل هذا يعني أنه لا يمكن تمثيل الفئات على أنها عوامات؟ أو إملاءات؟ القوائم؟ مجموعات؟ لونغ؟ زوجي؟ بايت؟ أعلم أنه من المنطقي تمثيل الفئات كأعداد صحيحة أو سلاسل ، حيث لا ينبغي أن تكون كثيرة. لكن هل يجب عليهم ذلك؟ ما هي القيود؟

وفيما يتعلق بإنشاء تذكرة جديدة ، أليس هذا عديم الفائدة لأننا تحدثنا هنا؟ إنشاء تذكرة جديدة فقط لشرح نفس الشيء للرجل الآخر؟

إنه ليس عدد الفصول. إنه استخدام الأعداد الصحيحة وغير السلاسل.

أحب أن تركز أوصاف القضية. قلقك كما أثير هنا
يبدو أنه أكثر من مشكلة استخدام.

ورجاء لا تزعجني بشأن ما أقترحه. هذه ليست القضية الوحيدة
أنا أتعامل مع.

في 2 تشرين الثاني (نوفمبر) 2016 الساعة 00:24 ، كتب Piotr Kamoda [email protected] :

اسمحوا لي أن أستشهد بالقسم الكامل لتوثيق المعلمة y of
تناسب الوظيفة في فئة DecisionTreeClassifier

القيم المستهدفة (تسميات الفئة في التصنيف ، الأرقام الحقيقية في
تراجع). في حالة الانحدار ، استخدم dtype = np.float64 والنظام = 'C' من أجل
أقصى قدر من الكفاءة.

هذا لا يعني أن الفصول لها سقف. ما الذي يجعل المتغير الهدف
المسمى المستمر؟ كم عدد الفصول التي يجب أن تكون هناك للنظر فيها
نوع الانحدار الهدف متغير؟ إذا كان يتحدث عن الانحدار ، فعندئذ يمكنني أن أفعل
الانحدار باستخدام DecisionTreeClassifier؟ ولم لا؟ إلخ...

وفيما يتعلق بإنشاء تذكرة جديدة ، أليس ذلك عديم الفائدة لأننا امتلكنا ملف
نتحدث هنا؟ إنشاء تذكرة جديدة فقط لشرح نفس الشيء للرجل الآخر؟

-
أنت تتلقى هذا لأنك قمت بتعديل حالة الفتح / الإغلاق.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/7801#issuecomment -257565248 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAEz63zNA0Qc4lzgHttXx-4VFkJFwFaDks5q5z16gaJpZM4KlSFw
.

لست مضطرًا إلى حلها اليوم ، فأنا أحاول فقط أن أجعل مشكلة أوصاف الأخطاء السيئة والوثائق السيئة حول مصنف الشجرة والرجوع لتصبح نشطة ومهمة للإصدارات المستقبلية.

بالنسبة لرسالة الخطأ ، هل سيكون "نوع الإخراج غير المدعوم:" إخراج متعدد مستمر "أفضل؟ هذه هي مشكلة _real_. انظر أيضا # 7809 من أجل docstring.

هذا أفضل. لكن ما زلت لا أفهم لماذا لا تسميها كما هي. لأن الأدبيات تستدعي في الغالب متغيرات "الهدف" ، ويمكن الخلط بين المخرجات ومخرجات الوظيفة. تم طرح استثناء من الوظيفة "check_classification_targets" ، لذلك حتى أنك تقول أن هذا متغير "الهدف" ، وما زلت تريد تسميته "تسمية" أو "إخراج". أنا لست عضوًا في scikit-Learn عضوًا ، لذا ستفعل ما يحلو لك ، لكنني أوصي باستخدام الكلمات "Target variable" في doscstring ورسالة الخطأ. وأطلب منك أن تصف في أي مكان القواعد التي يجب أن تتبعها البيانات (أو الهدف). جملة قصيرة - "يجب أن يكون المتغير المستهدف (المعامل y) int أو str".

ربما من الجدير بالذكر في / بجانب القسم الجديد (45cb11d / # 7519)
على تركيب متعدد الفئات ومتعدد الملصقات في البرنامج التعليمي. أو ربما هذا كل شيء
ينتمي إلى قسم من دليل المستخدم حول اصطلاحات تمثيل البيانات ،
وصف تنسيقات الإدخال / الإخراج لجميع الطرق القياسية ...؟

في 2 تشرين الثاني (نوفمبر) 2016 الساعة 20:56 ، كتب Piotr Kamoda [email protected] :

هذا أفضل. لكن ما زلت لا أفهم لماذا لا تسميها على هذا النحو
يكون. لأن الأدب في الغالب يدعو هذا المتغيرات "الهدف" ، والمخرجات
يمكن أن يكون مخطئا مع وظيفة الإخراج. تم طرح استثناء من الوظيفة
"check_classification_targets" ، لذلك حتى أنت تقول أن هذا متغير "الهدف" ،
وما زلت تريد تسميته "تسمية" أو "إخراج". أنا لست عضوا في
عضو scikit-Learn ، لذا ستفعل ما يحلو لك ، لكنني أوصي بذلك
استخدام الكلمات "متغير الهدف" في doscstring ورسالة الخطأ. وانا اسالك
لوصف قواعد أي مكان يجب أن تتبعها إدخال البيانات (أو الهدف). أ
جملة قصيرة - "يجب أن يكون المتغير المستهدف (المعامل y) int أو str".

-
أنت تتلقى هذا لأنك قمت بتعديل حالة الفتح / الإغلاق.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/7801#issuecomment -257820087 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAEz68AqYGWrP1C-BinLXGGHNt0VtV_qks5q6F5rgaJpZM4KlSFw
.

لقد قمت بمسح المستند ضوئيًا ويبدو أنه مكان جيد لذكر هذه الاصطلاحات. أيضًا إذا كنت لا ترغب في تشويش رسائل الخطأ كثيرًا ، فإن فكرة وضع هذه المعلومات في دليل المستخدم ليست سيئة أيضًا.
حسنًا ، الحل النهائي (إن وجد) سيكون كما تتمناه ، أنا أقول فقط أن الفكرة تبدو جيدة ، لكن لديك اتفاقياتك. لن أجعلك تفعل شيئا.

يجب أن يكون "متغير الهدف (المعامل y) int أو str". ليس صحيحًا ، لأننا ندعم أهدافًا متعددة التسميات ومخرجات متعددة

أيضًا ، يتم دعم الكائنات العشوائية غير العائمة كعناوين للفئات ، ولا يلزم أن تكون أعدادًا صحيحة أو سلاسل.

إذا وضعنا training_data_X كملف تعريف ، فإن training_scores_Y لملاءمة الطريقة تتسبب في حدوث خطأ. لتجنب ذلك سنقوم بتحويل وتشفير التسميات

من sklearn استيراد التجهيز المسبق
من sklearn استيراد أدوات
lab_enc = تجهيز مسبق. LabelEncoder ()
y_train = lab_enc.fit_transform (y_train)
طباعة (y_train)
طباعة (utils.multiclass.type_of_target (y_train))
print (utils.multiclass.type_of_target (y_train.astype ('int')))
طباعة (utils.multiclass.type_of_target (y_train))

أواجه نفس المشكلة ، هل هناك حل لها؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات