मल्टीक्लास एलडीए प्रशिक्षण में कोलिनियर चर


16

मैं 8 वर्गों के डेटा के साथ एक मल्टी-क्लास LDA क्लासिफायरियर का प्रशिक्षण दे रहा हूं ।

प्रशिक्षण प्रदर्शन करते समय, मुझे एक चेतावनी मिलती है: " चर के संपर्क में हैं "

मुझे 90% से अधिक प्रशिक्षण सटीकता प्राप्त हो रही है ।

मैं उपयोग कर रहा हूँ scikits सीखने में पुस्तकालय अजगर ट्रेन करते हैं और मल्टी श्रेणी के डेटा का परीक्षण करें।

मुझे सभ्य परीक्षण सटीकता भी मिलती है (लगभग 85% -95% )।

मुझे समझ नहीं आता कि त्रुटि / चेतावनी का क्या मतलब है। कृपया मेरी मदद करें।

जवाबों:


29

मल्टीकोलिनरिटी का मतलब है कि आपके भविष्यवक्ता सहसंबद्ध हैं। यह बुरा क्यों है?

क्योंकि एलडीए, जैसे प्रतिगमन तकनीकों में एक मैट्रिक्स व्युत्क्रम की गणना करना शामिल है, जो कि गलत है यदि निर्धारक 0 के करीब है ( यानी दो या अधिक चर लगभग एक दूसरे के रैखिक संयोजन हैं)।

इससे भी महत्वपूर्ण बात, यह अनुमानित गुणांक को व्याख्या करना असंभव बनाता है। यदि में वृद्धि , कहते हैं, X 2 में कमी के साथ जुड़ा हुआ है और वे दोनों परिवर्तनशील Y को बढ़ाते हैं, तो X 1 में प्रत्येक परिवर्तन को X 2 में परिवर्तन द्वारा मुआवजा दिया जाएगा और आप Y पर X 1 के प्रभाव को कम आंकेंगे । एलडीए में, आप वर्गीकरण पर एक्स 1 के प्रभाव को कम आंकेंगे ।X1X2YX1X2X1YX1

यदि आप सभी की देखभाल प्रति सेगमेंट में करते हैं , और यह कि आपके मॉडल को डेटा के आधे हिस्से पर प्रशिक्षण देने और दूसरे आधे पर परीक्षण करने के बाद आपको 85-95% सटीकता प्राप्त होगी, तो मैं कहूंगा कि यह ठीक है।


तो क्या मैं इसकी व्याख्या कर सकता हूं, यदि परीक्षण की सटीकता कम है, तो फीचर वेक्टर में एक फीचर X1 अच्छी पिक नहीं है?
Garak

1
मुझे लगता है कि यदि परीक्षण की सटीकता कम है तो कोई अच्छी पिक नहीं है।
gui11aume

दिलचस्प है कि मैं एलडीए के साथ यह समस्या रख रहा हूं लेकिन जब मैं क्यूडीए का उपयोग करता हूं तो नहीं। मुझे आश्चर्य है कि वहाँ क्या अलग है?
Garak

1
उत्तर के लिए +1, लेकिन "मैट्रिक्स उलटा गणना" सटीक नहीं हो सकता है। हम इसे स्पष्ट रूप से कभी कंप्यूटर नहीं करते हैं, एलयू, क्यूआर या पुनरावृत्त विधियों जैसे प्रत्यक्ष तरीकों का उपयोग किया जाता है।
हायतौ डू

@ hxd1011 सही है! रिकॉर्ड के लिए, क्या आप एलयू / क्यूआर आदि में तब कुछ शब्द दे सकते हैं, जब मैट्रिक्स "लगभग एकवचन" हो, या शायद एक दस्तावेज़ को इंगित करता है जो इसे समझाता है?
गुई ११

12

जैसा कि मुझे लगता है कि gui11aume ने आपको एक शानदार उत्तर दिया है, मैं थोड़ा अलग कोण से एक उदाहरण देना चाहता हूं जो रोशन हो सकता है। इस बात पर विचार करें कि आपके भेदभावपूर्ण कार्य में एक कोवरिएट इस प्रकार दिखता है:

X1=5X2+3X3X4

मान लीजिए कि सबसे अच्छे LDA में निम्नलिखित रैखिक सीमा है:

X1+2X2+X32X4=5

फिर हम को एक्स 1 एन एलडीए सीमा समीकरण के लिए स्थानापन्न कर सकते हैं , इसलिए: 5X2+3X3X4X1

5X2+3X3X4+2X2+X32X4=5

या

7X2+4X33X4=5

ये दो सीमाएं समान हैं लेकिन पहले वाले में गुणांक 1,2,1,2 , X1क्रमशः X 2 , X 3 और X 4 हैं, जबकि दूसरे में गुणांक 0 , 7 , 3 , - 1 हैंX2X3X40,7,3,1

तो गुणांक काफी अलग हैं लेकिन दो समीकरण समान सीमा और समान भविष्यवाणी नियम देते हैं। यदि एक रूप अच्छा है तो दूसरा भी। लेकिन अब आप देख सकते हैं कि gui11ame का कहना है कि गुणांक निर्विवाद हैं।

X20X3X4


1

जबकि यहाँ जो उत्तर अंकित किया गया था, वह सही है, मुझे लगता है कि आप यह जानने के लिए एक अलग स्पष्टीकरण की तलाश कर रहे थे कि आपके कोड में क्या हुआ था। मेरे पास एक मॉडल के माध्यम से चलने वाला एक ही मुद्दा था।

यहां व्हाट्सएप चल रहा है: आप अपने मॉडल को अपने डेटा सेट के हिस्से के रूप में अनुमानित चर के साथ प्रशिक्षित कर रहे हैं। यहाँ एक उदाहरण है कि मेरे साथ क्या हुआ था वह भी बिना देखे।

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns[:-1]]

इस कोड में, मैं 'COL3' के मूल्य की भविष्यवाणी करना चाहता हूं ... लेकिन, यदि आप train_X को देखते हैं, तो मैं इसे पिछले एक को छोड़कर हर कॉलम को पुनः प्राप्त करने के लिए कह रहा हूं, इसलिए इसके इनपुट COL1 COL2 और COL3, COL4 नहीं, और COL3 की भविष्यवाणी करने की कोशिश कर रहा है जो train_X का हिस्सा है।

मैंने इसे केवल स्तंभों को स्थानांतरित करके ठीक किया, अपने डेटा सेट (अब COL4 की जगह ले रहा है) में अंतिम स्तंभ होने के लिए Excel में COL3 को मैन्युअल रूप से स्थानांतरित किया, और फिर:

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL4']
train_X = train[train.columns[:-1]]

यदि आप इसे एक्सेल में स्थानांतरित नहीं करना चाहते हैं, और इसे कोड द्वारा बस करना चाहते हैं:

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns['COL1','COL2','COL4']]

ध्यान दें कि अब मैंने कैसे ट्रेन_X घोषित किया, जिसमें COL3 को छोड़कर सभी कॉलम शामिल हैं, जो train_Y का हिस्सा है।

मुझे आशा है कि वह मदद करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.