بالنظر إلى مجموعة من النقاط، كيف يمكنني تقريب المحور الرئيسي لشكلها؟

StackOverflow https://stackoverflow.com/questions/560068

سؤال

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

الطريقة الصحيحة للقيام بذلك، أعتقد، هو حساب المحور الرئيسي من لها ربط القطع الناقص. وبعد للقيام بذلك تحتاج لحساب eigenvector. التابع مصفوفة التغاير. وبعد على الأرجح سيكون الأمر المرجح أن يكون معقد للغاية لحاجتي، لأنني أبحث عن بعض التقدير الجيد الكافي. اختيار دقيقة، ماكس، و 20 نقطة عشوائية يمكن أن تكون بعض المبتدئين. هل هناك طريقة سهلة لتقريب هذا؟

يحرر: وجدت طريقة الطاقة إلى eigenvector تقريبا eigenvector. ويكيبيديا المادةوبعد حتى الآن أنا أحب إجابة ديفيد.

هل كانت مفيدة؟

المحلول

كنت تقوم بحساب Eigenvectors من مصفوفة 2x2، والتي يمكن القيام به مع بعض الصيغ البسيطة، لذلك ليس ذلك معقدا. في pseudocode:

// sums are over all points
b = -(sum(x * x) - sum(y * y)) / (2 * sum(x * y))
evec1_x = b + sqrt(b ** 2 + 1)
evec1_y = 1
evec2_x = b - sqrt(b ** 2 + 1)
evec2_y = 1

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

يحرر: أعتقد أن x و y يجب أن يترجم إلى صفر يعني، أي طرح يعني من جميع x، ص الأول (EED3SI9N).

نصائح أخرى

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

قيمة R ^ 2 تعطيك أيضا معلومات حول الشكل العام. أقرب إلى 0، كلما كان شكل دائري / موحد (دائرة / مربع). أقرب إلى 1، وتمتد أكثر من الشكل هو (البيضاوي / المستطيل).

الحل النهائي لهذه المشكلة هو قيد التشغيل PCA.
أتمنى أن أجد تنفيذ ضئيل لطيف بالنسبة لك للإشارة إلى ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top