खोज…


लो-वेरिएंस फीचर रिमूवल

यह एक बहुत ही बुनियादी सुविधा चयन तकनीक है।

इसका अंतर्निहित विचार यह है कि यदि कोई विशेषता स्थिर है (जिसका 0 संस्करण है), तो इसका उपयोग किसी भी दिलचस्प पैटर्न को खोजने के लिए नहीं किया जा सकता है और इसे डेटासेट से हटाया जा सकता है।

नतीजतन, सुविधा को समाप्त करने के लिए एक न्यायिक दृष्टिकोण सबसे पहले उन सभी विशेषताओं को दूर करना है, जिनका विचरण कुछ (निम्न) सीमा से नीचे है।

दस्तावेज़ीकरण में उदाहरण का निर्माण, मान लें कि हम शुरू करते हैं

X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]

यहां 3 बूलियन विशेषताएं हैं, प्रत्येक में 6 उदाहरण हैं। मान लीजिए हम कम से कम 80% उदाहरणों में स्थिर रहने वालों को हटाना चाहते हैं। कुछ संभावना गणनाओं से पता चलता है कि इन सुविधाओं के लिए विचरण 0.8 * (1 - 0.8) से कम होना चाहिए । नतीजतन, हम उपयोग कर सकते हैं

from sklearn.feature_selection import VarianceThreshold
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))    
sel.fit_transform(X)
# Output: array([[0, 1],
                 [1, 0],
                 [0, 0],
                 [1, 1],
                 [1, 0],
                 [1, 1]])

ध्यान दें कि पहली सुविधा कैसे निकाली गई थी।

इस विधि का उपयोग सावधानी के साथ किया जाना चाहिए क्योंकि एक कम विचरण का मतलब यह नहीं है कि एक विशेषता "निर्बाध" है। निम्नलिखित उदाहरण पर विचार करें जहां हम एक डेटासेट का निर्माण करते हैं जिसमें 3 विशेषताएं होती हैं, पहले दो बेतरतीब ढंग से वितरित चर और समान रूप से चर चर के तीसरे से मिलकर।

from sklearn.feature_selection import VarianceThreshold
import numpy as np

# generate dataset
np.random.seed(0)

feat1 = np.random.normal(loc=0, scale=.1, size=100) # normal dist. with mean=0 and std=.1
feat2 = np.random.normal(loc=0, scale=10, size=100) # normal dist. with mean=0 and std=10
feat3 = np.random.uniform(low=0, high=10, size=100) # uniform dist. in the interval [0,10)
data = np.column_stack((feat1,feat2,feat3))

data[:5]
# Output:
# array([[  0.17640523,  18.83150697,   9.61936379],
#        [  0.04001572, -13.47759061,   2.92147527],
#        [  0.0978738 , -12.70484998,   2.4082878 ],
#        [  0.22408932,   9.69396708,   1.00293942],
#        [  0.1867558 , -11.73123405,   0.1642963 ]]) 

np.var(data, axis=0)
# Output: array([  1.01582662e-02,   1.07053580e+02,   9.07187722e+00])

sel = VarianceThreshold(threshold=0.1)
sel.fit_transform(data)[:5]
# Output:
# array([[ 18.83150697,   9.61936379],
#        [-13.47759061,   2.92147527],
#        [-12.70484998,   2.4082878 ],
#        [  9.69396708,   1.00293942],
#        [-11.73123405,   0.1642963 ]])

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



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow