Scikit-learn: تطبيق معامل تشابه جاور

تم إنشاؤها على ١٩ نوفمبر ٢٠١٥  ·  51تعليقات  ·  مصدر: scikit-learn/scikit-learn

كما اقترحlesshaste

ورقة - http://cbio.ensmp.fr/~jvert/svn/bibli/local/Gower1971general.pdf

يمكنني تنفيذ هذا إذا كان هناك اهتمام كاف؟

jnothmanamuelleragramfort

New Feature

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

أهلا،

من أجل المساهمة بطريقة ما ، قمت بتنفيذ وظيفة Gower ، وفقًا للورقة الأصلية ، والاقتراحات ذات الصلة اللازمة في وحدة pdist ، لأن داخليًا يقوم pdist بإجراء العديد من التحويلات العددية التي ستفشل إذا استخدمت مصفوفة ببيانات مختلطة.

النتائج التي حصلت عليها مع هذا حتى الآن هي نفسها من وظيفة R´s الأقحوان.

كود المصدر متاح في دفتر jupyter هذا: https://sourceforge.net/projects/gower-distance-4python/files/

استخدمه بحرية

ال 51 كومينتر

شكرا.

قد تكون هذه الوثائق لـ daisy من R ذات صلة أيضًا https://stat.ethz.ch/R-manual/R-devel/library/cluster/html/daisy.html لأنها حالة استخدام شائعة لـ معامل جاور.

اقترح أين؟ في أي سياق؟

agramfort لقد اقترحتها على daisy() المذكورة سابقًا عند تجميع البيانات بأنواع مختلطة (راجع الصفحة 27 من https://cran.r-project.org/web/packages/cluster/cluster.pdf) . بشكل عام ، يزعم http://www.clustan.talktalk.net/gower_similarity.html أن "معامل التشابه العام لجوير هو أحد أكثر مقاييس القرب شيوعًا لأنواع البيانات المختلطة". الذي يبدو ادعاءً معقولاً.

هل هناك معيار معياري أو مثال مقنع من شأنه أن يحفز ذلك؟

agramfort أعتقد أنه ليس لدينا طريقة أخرى لحساب معامل الاختلاف لأنواع البيانات المختلطة حاليًا ويبدو أن هذا هو المعيار القياسي. يمكنني العثور على الكثير من الأمثلة والأسئلة / الإجابات عبر الإنترنت حيث يشرح الناس ماهية معامل Gower أو يقترحون استخدامه لأنواع البيانات المختلطة ولكن لا شيء يمكنني تسميته بمعيار حتى الآن. تم الاستشهاد بالورقة الأصلية 2298 مرة وفقًا لباحث Google.

حسنا انا مقتنع :)

agramfort عظيم! سيكمل هذا التغيير https://github.com/scikit-learn/scikit-learn/pull/4899 بشكل جيد والذي يقدم دعمًا متغيرًا أصليًا فئويًا للأشجار.

بعد قولي هذا ، أدرك الآن أن scikit-Learn ليس لديها دعم محلي للترتيبات على الإطلاق في الوقت الحالي ، لذا فإن هذا الجزء من اقتراحي سيكون متقدمًا قليلاً عن وقته. أفترض أنه يمكن للمرء أن ينظر إليها بطريقة إيجابية كخطوة أولى لدعم السمات الترتيبية.

amueller ليتم وضع علامة عليها بـ [New Feature] ...

أهلا،

من أجل المساهمة بطريقة ما ، قمت بتنفيذ وظيفة Gower ، وفقًا للورقة الأصلية ، والاقتراحات ذات الصلة اللازمة في وحدة pdist ، لأن داخليًا يقوم pdist بإجراء العديد من التحويلات العددية التي ستفشل إذا استخدمت مصفوفة ببيانات مختلطة.

النتائج التي حصلت عليها مع هذا حتى الآن هي نفسها من وظيفة R´s الأقحوان.

كود المصدر متاح في دفتر jupyter هذا: https://sourceforge.net/projects/gower-distance-4python/files/

استخدمه بحرية

كنت أتساءل فقط إذا كان هناك أي تحديث حول هذا؟ بالإضافة إلى ذلك ، هل المشكلة التي لاحظهاmarcelobeckmann لا تزال ذات صلة؟

@ ashimb9 يبدو أننا بحاجة إلى شخص ما لدمج الكود من marcelobeckmann

agramfort هممم ، في هذه الحالة سأذهب عندما يكون لدي بعض وقت الفراغ. بالمناسبة ، هل تعرف أي شيء عن الحالة الحالية للمشكلة المذكورة أعلاه: "في وحدة pdist ، لأن داخليًا يقوم pdist بإجراء العديد من التحويلات الرقمية التي ستفشل إذا استخدمت مصفوفة ببيانات مختلطة"

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

أنا تطوعت لدمج هذا الرمز وإتاحته في مفترق طرق ، يمكنك تخصيص هذه التذكرة لي.

تعمل ميزة تعيين github فقط لأعضاء الفريق

في 17 يوليو 2017 الساعة 7:32 مساءً ، كتب "marcelobeckmann" [email protected] :

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

أنا تطوعت لدمج هذا الرمز وإتاحته في مفترق ، أنت
يمكن تعيين هذه التذكرة لي.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/5884#issuecomment-315707830 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAEz62L3HHzGsSerW5G3n-Z8rrNoV6mwks5sOyoTgaJpZM4Glm0p
.

لا تقلق ، سأفترقها ويمكنك الحصول على الكود لاحقًا. بالنسبة لي المهم هو المساهمة. سأخبرك عندما تنتهي.

شكرًا marcelobeckmann على تناول هذا الأمر. أثناء تواجدك فيه (وإذا كان ذلك ممكنًا بالنسبة لك) ، كنت أتساءل عما إذا كنت ستفكر في إضافة دعم لحساب gower على البيانات مع قيم NaN أيضًا ، كما هو مطبق في حزمة ديزي في R (التي أشرت إليها أيضًا أعلاه) ؟

انتهيت من دمج Gower مع sklearn.metrics.pairwise (مع ملاحظة معالجة قيم NaN أيضًا). سأقوم بإعداد بعض اختبارات الوحدة قبل إرسال الكود المتشعب الخاص بي.

تضمين التغريدة شكرًا جزيلاً لك ، خاصةً لتضمين دعم NaN! :)

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

لقد تقدمت بطلب سحب منذ بضعة أيام ، b5884.

نعم ، إنها في قائمة الانتظار لتتم مراجعتها.

في 17 أغسطس 2017 ، الساعة 23:40 ، مارسيلو بيكمان ، إخطارات github.com
كتب:

لقد تقدمت بطلب سحب منذ بضعة أيام ، b5884.

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

لقد أجريت التغييرات المطلوبة من قبل CI ، وتم اجتياز جميع الشيكات.

marcelobeckmann عمل عظيم! قد ترغب في تغيير الصف 659 إلى شيء مثل:
ranges_of_numeric[col] = (1 - min / max, 0)[max == 0] if (max!=0) else 0.0

سأحصل على القسمة على عدم وجود تحذيرات في حالة الاختبار الثانية الخاصة بك بخلاف ذلك.

مرحبًا ، لقد غيرت الكود لتجنب التحذيرات كما اقترح بيير ويسمان ، و CI أخضر. أنا بحاجة إلى شخص ما لمراجعة الكود الخاص بي.

marcelobeckmann وربما آخرون.

مرحبًا Marcelo (أو ربما آخرون) ، تلقيت بعض الأسئلة السريعة فيما يتعلق بتنفيذ معامل gower الذي وضعته هنا: https://sourceforge.net/projects/gower-distance-4python/files/.

  1. هل أحتاج إلى إطار بيانات الباندا لتغذية البيانات الأصلية في الوظيفة أم يمكنني استخدام مصفوفة عددية أيضًا؟

  2. أقوم باستيراد بياناتي إلى مصفوفة صغيرة. جميع الأعمدة هي أرقام حقيقية عددية بصرف النظر عن العمود الأول وهو المعرف الفريد. لدي مشكلتان ،

  • أولاً ، عندما أقوم بتشغيل الوظيفة ، فإنها تُرجع تحذير تحويل البيانات قائلاً إن dtype U7 قد تم تحويله إلى كائن !!. افترضت أن ذلك يرجع إلى أن إدخالات المصفوفة تظهر لسبب ما في علامات اقتباس ، وبالتالي فهي عبارة عن سلسلة. لذلك قمت بإلقاء نوع إدخالات المصفوفة على int32 على سبيل المثال ولا يزال يعطي خطأ التحويل الذي يقول أنه تم تحويل int32 إلى كائنات

  • ثانيًا ، وربما مرتبطًا بما ورد أعلاه ، في كل مرة أقوم بتشغيل الوظيفة وأرسم النتيجة ، أتلقى تصورًا مختلفًا (انتشار مختلف للنقاط).

هل يمكنك إخباري بما ورد أعلاه من فضلك؟

شكرا جزيلا

مرحبا علي ،

شكرًا لاهتمامك بهذا التنفيذ لمسافة Gower.

بينما لم تتم الموافقة على الكود الذي قدمته لطلب سحب من قبل ملتزمي scikit Learn (CI أخضر وينتظر فقط المراجعة) ، فقد دفعت هذا التنفيذ الأحدث والمستقر إلى: https://sourceforge.net/projects/gower-distance -4python / files / gower_function-v3.ipynb / download

دعنا نذهب لأسئلتك:

  1. هل أحتاج إلى Panda DataFrame لتغذية البيانات الأصلية في الوظيفة أم يمكنني استخدام مصفوفة numpy أيضًا؟

الإجابة: يمكنك استخدام DataFrame أو Numpy في هذا الإصدار الجديد 3. كما يتم دعم المصفوفات المتفرقة.

  1. . أقوم باستيراد بياناتي إلى مصفوفة صغيرة. جميع الأعمدة هي أرقام حقيقية عددية بصرف النظر عن العمود الأول وهو المعرف الفريد. لدي مشكلتان ،
  • أولاً ، عندما أقوم بتشغيل الوظيفة ، فإنها تُرجع تحذير تحويل البيانات قائلاً إن dtype U7 قد تم تحويله إلى كائن !!. افترضت أن ذلك يرجع إلى أن إدخالات المصفوفة تظهر لسبب ما في علامات اقتباس ، وبالتالي فهي عبارة عن سلسلة. لذلك قمت بإلقاء نوع إدخالات المصفوفة على int32 على سبيل المثال ولا يزال يعطي خطأ التحويل الذي يقول أنه تم تحويل int32 إلى كائنات

الإجابة: يدعم هذا الإصدار الجديد السمات الفئوية العددية ، وهناك معلمة إضافية categorical_features ، يمكنك تعيين مصفوفة بها خطأ (للسمات العددية) أو صواب (للسمات الفئوية)

  • ثانيًا ، وربما مرتبطًا بما ورد أعلاه ، في كل مرة أقوم بتشغيل الوظيفة وأرسم النتيجة ، أتلقى تصورًا مختلفًا (انتشار مختلف للنقاط).

الإجابة: الإصدار الجديد الذي دفعته حل هذه المشكلة.

لاحظ أنني أعتزم مراجعة هذه العلاقات العامة ، لكنها ليست عالية جدًا
أولوية أجهزة الصراف الآلي

مرحبا علي ،

  1. آخرها هو gower_function-v3.ipynb ، ونعم يتعامل مع nan
    التكاثر

  2. يمكنك استخدام gower_distance (X) فقط ، إذا لم يكن الحضور الفئوي الخاص بك كذلك
    الرقمية ، أو gower_distance (X ، categorical_features = [خطأ ، صحيح ،
    خطأ ، ...]) ، إذا تم تمثيل سمة قطك على أنها رقمية.

اسمحوا لي أن أعرف على انفراد إذا كان لديك أي مشكلة ، لأن هذا التنفيذ
لقد دفعت إلى الإنترنت لا ينبغي أن يكون مصدر قلق لعلم scikit ، فلديهم ملف
الكثير لتفعله ، وليس هنا أفضل مكان لمناقشة هذا الأمر.

في 30 تشرين الثاني (نوفمبر) 2017 ، الساعة 11:51 ، كتب "Ali-ry" [email protected] :

marcelobeckmann https://github.com/marcelobeckmann

مرحبًا مارسيلو (أو ربما غيرهم) ، تلقيت سؤالًا سريعًا فيما يتعلق بطاقتك
تنفيذ معامل gower الذي وضعته هنا:
https://sourceforge.net/projects/gower-distance-4python/files/

1.

هو gower_single_function-v2.ipynb النسخة النهائية ويتعامل معها
NaN كذلك؟
2.

والأهم من ذلك ، هل يسمح لك هذا التضمين بالحصول على ملف
أوجه التشابه ضمن بيانات عينة واحدة؟ لأنه في معظم الحالات ما أنت
الحاجة هي الحصول على المسافة بين كل زوج من الملاحظة في الداخل
بيانات عينة واحدة بدلاً من مقارنة بيانات عينة مختلفة.

شكرا جزيلا

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/scikit-learn/scikit-learn/issues/5884#issuecomment-348166596 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AA3G79jWVbpBNdAFOAim7wJS92-QGl0dks5s7pa8gaJpZM4Glm0p
.

مرحبا علي ،

  1. آخرها هو gower_function-v3.ipynb ، وهي نسخة من تلك التي دفعتها لتعلم scikit ، ونعم ، إنها تتعامل مع انتشار نان

  2. يمكنك استخدام gower_distance (X) فقط ، إذا لم تكن Att الفئوية الخاصة بك رقمية ، أو gower_distance (X، categorical_features = [False، True، False، ...]) ، إذا تم تمثيل سماتك الفئوية على أنها رقمية.

يرجى إعلامي على انفراد إذا كان لديك أي مشكلة ، لأن هذا التنفيذ الذي دفعته إلى الإنترنت لا ينبغي أن يكون مصدر قلق لـ scikit learn ، فلديهم الكثير ليفعلوه ، وهنا ليس أفضل مكان لمناقشة شيء خارج scikit تعلم المشروع.

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

أتلقى أيضًا الخطأ التالي:
خطأ في القيمة: تم العثور على مصفوفة تحتوي على 0 عينة (عينات) (الشكل = (0 ، 0)) بينما مطلوب الحد الأدنى من 1 بواسطة check_pairwise_arrays.

لقد نجحت في نفس البيانات سابقًا ، لكنها الآن تعطي مثل هذا الخطأ. لماذا يمكن أن يكون؟

مرحبًا bendiste ،

إذا كنت تمثل True و False كـ 1 و 0 ، فستحصل على نفس النتائج.

هل تستخدم أحدث كمبيوتر محمول gower_function-v6.4.ipynb في
https://sourceforge.net/projects/gower-distance-4python/files/
؟

انتهيت من كتابة مقال ، وآمل أن أقوم هذا الشهر بإجراء التغييرات المطلوبة لجعل تطبيقي مقبولًا في برنامج الماجستير في scikit-Learn.

مرحبًا marcelobeckmann ، شكرًا لك على ردك. ونعم ، أنا أستخدم أحدث إصدار أشرت إليه. عندما أعدت تنزيله ، نجح. أود أن أسأل بضعة أشياء منذ أن أصبحت مبتدئًا في تعلم الآلة:
1- هل يمكنني استخدام KPCA لتقليل الأبعاد كمدخل لخوارزمية العنقود الهرمي؟
2- أو هل يتعين علي استخدام مجموعة البيانات الكاملة ذات الأبعاد العالية كمدخل للتجميع الهرمي؟

مرحبًا marcelobeckmann ،
شكرا لك على هذا التنفيذ!

لقد جربت إصدار gower_function-v6.4.
أستطيع أن أرى أن المسافات في اختبارات الوحدة الخاصة بك هي نفسها ، بغض النظر عما إذا كنت تحدد الأعمدة الفئوية أم لا. لقد حاولت أيضًا استخدام بياناتي الخاصة ، حيث لا تؤثر أيضًا على النتيجة.

هل هذا صحيح؟

شكرا لك!

مرحبا annelaura ،

آسف على التأخير في الرد. نعم هذا صحيح ، كان هذا الاختبار فقط للتحقق مما إذا كانت المعلمات categorical_features = [0، 1] لن تؤثر على النتائج ، إذا كان من الممكن أيضًا تحديد الأعمدة غير الرقمية على أنها كائنات. بيانات الإدخال هي نفسها ، لذا يجب أن تكون النتائج هي نفسها.

بعد أن أنهيت بعض الأوراق ، عدت إلى العمل لأقترح أخيرًا التنفيذ الخاص بي في فرع scikit الرئيسي! :)

marcelobeckmann هل من أخبار بخصوص هذا؟ :)

مرحبًا Alex ، لقد انتهيت من جميع التعديلات التي طلبها المراجعون حتى الآن في طلب السحب ، و CI باللون الأخضر. لقد قمت أيضًا باختبار اتصال المراجعين للتحقق مما إذا كانوا سعداء ، ثم يمكننا إغلاق طلب السحب هذا ودفعه للإفراج عنه.

أي تحديثات؟ تضمين التغريدة

العمل في التقدم بعد المراجعة.

هل تمت الموافقة على العلاقات العامة؟ تضمين التغريدة

ليس بعد ، العمل جار بعد بعض مراجعة الكود الحديثة.

سيء جدا أحتاجه.

هل الوظيفة متاحة في مكان ما؟ لذا يمكنني استخدامه بمفردي (لأغراض البحث)

شكرا

يمكنك الحصول على أحدث التزام لهذه الوظيفة في هذا العلاقات العامة:
https://github.com/scikit-learn/scikit-learn/pull/9555

تمكنت من جعلها تعمل محليًا. شكرا!

مجرد +1 سريع على هذه التذكرة! شكرا لكل العمل على هذا.

صدم. هذا سيكون إضافة كبيرة. لا أصدق أن الأمر استغرق 4 سنوات لإجراء عملية حسابية بسيطة نسبيًا لتحويلها إلى sklearn !!

أو يمكنك أن تقول: شكرًا على مثابرتك المتفانية على مدى أربع سنوات
تطوع بالجهد!

أو يمكنك أن تقول: شكرًا على مثابرتك المتفانية على مدى أربع سنوات من الجهد التطوعي!

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

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

نتطلع إليها في sklearn.

قام شخص يدعي أنه لديه " أفكار مستعارة " من هذا الموضوع بإصدار حزمة على github لحساب مسافة Gower (التشابه ، تقنيًا). عند الحديث عن المسافة والتشابه ، فإن المثال مطابق للمثال منmarcelobeckmann. لقد ألقيت نظرة خاطفة على الشفرة فقط حتى الآن ، ولكن إليك لمحة:

من دفتر marcelobeckmann :

    # This is to normalize the numeric values between 0 and 1.
    X_num = np.divide(X_num ,max_of_numeric,out=np.zeros_like(X_num), where=max_of_numeric!=0)

من "مايكل يان":

    # This is to normalize the numeric values between 0 and 1.
    Z_num = np.divide(Z_num ,num_max,out=np.zeros_like(Z_num), where=num_max!=0)

مرحبا شباب ، شكرا لمراقبة هذا.

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

نأمل أن يكون هذا الرمز جزءًا من scikit-Learn ، إذا تم قبول PR # 9555 .

تحياتي الحارة،

مارسيلو بيكمان

حظا سعيدا في هذه العملية !!

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