7

में विशेषताओं के रूप में स्पष्ट डेटा का उपयोग करके मैं समझने की कोशिश कर रहा हूं कि sklearn.linear_model के LogisticRegression में विशिष्ट डेटा का उपयोग कैसे करें।स्किलीन लॉजिस्टिक्स रीजनियन

मैं समझता हूं कि मुझे इसे एन्कोड करने की आवश्यकता है।

  1. मैं क्या समझ में नहीं आता है, तो यह एक स्पष्ट सुविधा के रूप में संसाधित कैसे उपस्कर प्रतिगमन को इनकोडिंग सुविधा पारित करने के लिए, और पूर्णांक मूल्य समझ में आ गया है जब एक मानक मात्रात्मक सुविधा के रूप में एन्कोडिंग की व्याख्या नहीं है।

  2. (कम महत्वपूर्ण) क्या कोई preprocessing.LabelEncoder(), DictVectorizer.vocabulary का उपयोग करने के बीच अंतर को समझा सकता है या केवल सरल डेटा के साथ स्पष्ट डेटा को एन्कोड कर सकता है? Alex A.'s comment here विषय पर छूता है लेकिन बहुत गहराई से नहीं।

खासकर पहले के साथ!

उत्तर

1
  1. Standart दृष्टिकोण संख्यात्मक में categorial सुविधाओं कन्वर्ट करने के लिए - OneHotEncoding
  2. यह पूरी तरह से विभिन्न वर्गों है:

    [DictVectorizer][2].vocabulary_

    एक मानचित्रण सुविधा सूचकांक सुविधा के लिए नामों शब्दकोश।

    यानी के बाद fit()DictVectorizer हर संभव सुविधा नाम हैं, और अब यह जानता है जो खास कॉलम में यह एक सुविधा का विशेष महत्व स्थापित करेंगे। तो DictVectorizer.vocabulary_ में विशेषताएं विशेषताएं हैं, लेकिन मान नहीं हैं।

    LabelEncoder विपरीत नक्शे में प्रत्येक संभावित लेबल (लेबल स्ट्रिंग, या पूर्णांक हो सकता है) कुछ पूर्णांक मान के लिए, और इन पूर्णांक मानों के 1 डी वेक्टर लौटाता है।

+0

धन्यवाद के लिए reply.The रूपांतरण ही समस्या (मुझे लगता है कि) की कम है, मेरी मुख्य चिंता है कि रसद reg, एक मानक संख्यात्मक मूल्य के रूप में संख्यात्मक मानों पर विचार करेंगे तो अगर बिल्ली 1 के रूप में इनकोडिंग है और कुत्ते के रूप में 2, यह माना जाएगा कि 'कुत्ते' के साथ अवलोकन में उस संपत्ति का 'अधिक' है, जबकि हम जानते हैं कि असाइन किए गए मान व्यर्थ हैं। – Optimesh

+0

@ ओप्टिम्स, आपका मतलब "एन्कोडेड" से क्या है? यदि आप लक्ष्य चर के बारे में बात कर रहे हैं - लक्ष्यों [1,2,3] में कुछ भी गलत नहीं है, तो लॉजिस्टिक रेजीशन केवल 3 (इस विशेष मामले में) क्लासिफायरों का निर्माण करेगा और उन्हें OneVsRest योजना में जोड़ देगा। यदि आप सुविधाओं के बारे में बात कर रहे हैं - OneHotEncoder बाइनरी प्रारूप में प्रत्येक विशिष्ट विशेषता को एन्कोड करेगा, यानी यह स्पष्ट सुविधा के लिए प्रत्येक संभावित मान के बजाय नई बाइनरी सुविधा बनाएगा, यानी परिणामी डेटासेट मूल्यों के लिए बाइनरी विशेषताओं (कॉलम) को अलग करेगा कुत्ते = 1, कुत्ता = 2, कुत्ता = 3, बिल्ली = 1, आदि आधिकारिक दस्तावेज में उदाहरण देखें। –

3

आप विभिन्न श्रेणियों के लिए सूचक चर बना सकते हैं। उदाहरण के लिए:

animal_names = {'mouse';'cat';'dog'} 

Indicator_cat = strcmp(animal_names,'cat') 
Indicator_dog = strcmp(animal_names,'dog') 

तब हमने:

   [0       [0 
Indicator_cat = 1  Indicator_dog = 0 
       0]       1] 

और आप अपने मूल डेटा मैट्रिक्स पर इन जोड़ सकते हैं:

X_with_indicator_vars = [X, Indicator_cat, Indicator_dog] 

याद रखें, हालांकि बिना एक वर्ग को छोड़ने के लिए एक संकेतक यदि डेटा मैट्रिक्स में निरंतर शब्द शामिल है! अन्यथा, आपका डेटा मैट्रिक्स पूर्ण कॉलम रैंक नहीं होगा (या अर्थमितिक शर्तों में, आपके पास बहुविकल्पीयता है)।

[1 1 0 0   Notice how constant term, an indicator for mouse, 
1 0 1 0   an indicator for ca,t and an indicator for dog 
1 0 0 1]  leads to a less than full column rank matrix: 
        the first column is the sum of the last three. 
+0

प्रतिक्रिया के लिए धन्यवाद। उस पर विचार किया, लेकिन मेरे मन में जो विशेषता है, उसके पास 40 से अधिक विशिष्ट मूल्य हैं (बिल्ली, कुत्ता, हाथी, शेर, ..............)। कोई बेहतर तरीका ज़रूर होगा। – Optimesh

+0

मुझे यकीन नहीं है कि आप क्या चाहते हैं? आप उन्हें बड़ी श्रेणियों में समूहित कर सकते हैं? या श्रेणियों को कुछ 'एन' आयामी वेक्टर स्पेस में मैप करें? (उदाहरण के लिए नक्शा पशु नाम 2 आयामी वेक्टर अंतरिक्ष (ऊंचाई, वजन) के लिए)। लेकिन यदि आप प्रत्येक श्रेणी को अपनी अनूठी श्रेणी के रूप में देखना चाहते हैं, तो यह है कि आप (सामान्य रूप से प्रतिगमन के लिए) करना है। और यदि आप मानते हैं कि प्रभाव श्रेणी के अनुसार वैरी कर सकते हैं, तो आपको अपने अन्य रजिस्ट्रारों के साथ अपनी श्रेणियों के सभी इंटरैक्शन शर्तों को भी रखना होगा। शायद दृश्यों के पीछे sklearn यह आपके लिए करेगा (मुझे कोई जानकारी नहीं है), लेकिन शायद यह होगा कि क्या होगा। –

+0

@ ओप्टिम्स, कोई बेहतर तरीका नहीं है, लेकिन आप फीचर हैशिंग, या पीसीए, आदि के रूप में अधिक जटिल तकनीकों द्वारा आयाम को कम कर सकते हैं इसके अलावा, यह पोस्ट एक ही वन एन्कोडिंग तकनीक का प्रस्ताव करता है। –

0

मान लीजिए कि प्रत्येक वर्गीकृत चर का प्रकार "ऑब्जेक्ट" है।सबसे पहले, आपको स्पष्ट स्तंभ नाम के एक panda.index बना सकते हैं:

import pandas as pd  
catColumns = df.select_dtypes(['object']).columns 

उसके बाद, आप सूचक चर के लिए लूप के नीचे एक का उपयोग कर बना सकते हैं। बाइनरी स्पष्ट चर के लिए, इसे LabelEncoder() का उपयोग 0 और 1 में बदलने के लिए करें। दो से अधिक श्रेणियों वाले स्पष्ट चर के लिए, सूचक चर को प्राप्त करने के लिए pd.getDummies() का उपयोग करें और फिर एक श्रेणी ड्रॉप करें (बहुविकल्पीयता समस्या से बचने के लिए)।

from sklearn import preprocessing 
le = preprocessing.LabelEncoder() 

for col in catColumns: 
    n = len(df[col].unique()) 
    if (n > 2): 
     X = pd.get_dummies(df[col]) 
     X = X.drop(X.columns[0], axis=1) 
     df[X.columns] = X 
     df.drop(col, axis=1, inplace=True) # drop the original categorical variable (optional) 
    else: 
     le.fit(df[col]) 
     df[col] = le.transform(df[col]) 
+1

हाल के sklearn संस्करणों में अब आप दो से अधिक कक्षाओं के साथ स्पष्ट चर के लिए le.fit का उपयोग कर सकते हैं। – Bismarck