पायथन के साथ एमएल - डेटा फ़ीचर चयन
पिछले अध्याय में, हमने विस्तार से देखा है कि मशीन सीखने के लिए डेटा को प्रीप्रोसेस और कैसे तैयार किया जाए। इस अध्याय में, हम विस्तार से डेटा सुविधा चयन और इसमें शामिल विभिन्न पहलुओं को समझते हैं।
डेटा फ़ीचर चयन का महत्व
मशीन लर्निंग मॉडल का प्रदर्शन इसे प्रशिक्षित करने के लिए उपयोग किए जाने वाले डेटा सुविधाओं के सीधे आनुपातिक है। एमएल मॉडल का प्रदर्शन नकारात्मक रूप से प्रभावित होगा यदि इसके लिए प्रदान की गई डेटा सुविधाएँ अप्रासंगिक हैं। दूसरी ओर, प्रासंगिक डेटा सुविधाओं का उपयोग आपके एमएल मॉडल की सटीकता को बढ़ा सकता है विशेष रूप से रैखिक और लॉजिस्टिक प्रतिगमन।
अब सवाल यह उठता है कि स्वचालित सुविधा का चयन क्या है? इसे उस प्रक्रिया के रूप में परिभाषित किया जा सकता है जिसकी सहायता से हम अपने डेटा में उन विशेषताओं का चयन करते हैं जो आउटपुट या पूर्वानुमान चर के लिए सबसे अधिक प्रासंगिक हैं जिसमें हम रुचि रखते हैं। इसे विशेषता चयन भी कहा जाता है।
डेटा मॉडलिंग से पहले स्वचालित सुविधा चयन के कुछ लाभ निम्नलिखित हैं -
डेटा मॉडलिंग से पहले फीचर का चयन करने से ओवरफिटिंग कम हो जाएगी।
डेटा मॉडलिंग से पहले फीचर का चयन करने से एमएल मॉडल की सटीकता बढ़ जाएगी।
डेटा मॉडलिंग से पहले फीचर का चयन करने से प्रशिक्षण का समय कम हो जाएगा
सुविधा चयन तकनीक
अनुसरण स्वचालित सुविधा चयन तकनीकें हैं जिनका उपयोग हम पायथन में एमएल डेटा को मॉडल करने के लिए कर सकते हैं -
अविभाजित चयन
यह सुविधा चयन तकनीक उन विशेषताओं का चयन करने में बहुत उपयोगी है, जो सांख्यिकीय परीक्षण की मदद से, भविष्यवाणी चर के साथ सबसे मजबूत संबंध रखते हैं। हम scikit-learn Python Library की SelectKBest0class की मदद से यूनीवेट फीचर सिलेक्शन तकनीक को लागू कर सकते हैं।
Example
इस उदाहरण में, हम ची-भारतीय मधुमेह परीक्षण की मदद से सर्वश्रेष्ठ विशेषताओं वाले 4 विशेषताओं का चयन करने के लिए पीमा इंडियन्स डायबिटीज डेटासेट का उपयोग करेंगे।
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
अगला, हम सरणी को इनपुट और आउटपुट घटकों में अलग करेंगे -
X = array[:,0:8]
Y = array[:,8]
कोड की निम्नलिखित पंक्तियाँ डेटासेट से सर्वश्रेष्ठ सुविधाओं का चयन करेंगी -
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)
हम अपनी पसंद के अनुसार आउटपुट के लिए डेटा को सारांशित भी कर सकते हैं। यहां, हम 2 के लिए सटीक सेट कर रहे हैं और प्रत्येक विशेषता के सर्वश्रेष्ठ स्कोर के साथ सर्वोत्तम विशेषताओं के साथ 4 डेटा विशेषताओं को दिखा रहे हैं -
set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])
Output
[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
[ 89. 94. 28.1 21. ]
]
पुनरावर्ती सुविधा उन्मूलन
जैसा कि नाम से पता चलता है, RFE (रिकर्सिव फीचर एलिमिनेशन) सुविधा चयन तकनीक पुनरावर्ती विशेषताओं को हटा देती है और शेष विशेषताओं के साथ मॉडल का निर्माण करती है। हम RFE फीचर सिलेक्शन तकनीक को scikit-learn Python Library के RFE वर्ग की मदद से लागू कर सकते हैं।
उदाहरण
इस उदाहरण में, हम पेमा इंडियन्स डायबिटीज से सबसे अच्छी विशेषताओं वाले सर्वोत्तम 3 विशेषताओं का चयन करने के लिए लॉजिस्टिक रिग्रेशन एल्गोरिथ्म के साथ RFE का उपयोग करेंगे।
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
अगला, हम सरणी को इसके इनपुट और आउटपुट घटकों में अलग कर देंगे -
X = array[:,0:8]
Y = array[:,8]
कोड की निम्नलिखित पंक्तियाँ एक डाटासेट से सबसे अच्छी सुविधाओं का चयन करेगी -
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")
उत्पादन
Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]
हम उपरोक्त आउटपुट में देख सकते हैं, RFE पहले 3 सबसे अच्छे फीचर्स के रूप में preg, mass और pedi को चुनते हैं। वे आउटपुट में 1 के रूप में चिह्नित हैं।
प्रधान घटक विश्लेषण (पीसीए)
पीसीए, जिसे आम तौर पर डेटा कमी तकनीक कहा जाता है, बहुत उपयोगी सुविधा चयन तकनीक है क्योंकि यह डेटासेट को संपीड़ित रूप में बदलने के लिए रैखिक बीजगणित का उपयोग करता है। हम PCA सुविधा चयन तकनीक को scikit-learn Python पुस्तकालय के PCA वर्ग की सहायता से कार्यान्वित कर सकते हैं। हम आउटपुट में प्रमुख घटकों की संख्या का चयन कर सकते हैं।
उदाहरण
इस उदाहरण में, हम पीसीए का उपयोग सबसे अच्छा 3 प्रिंसिपल घटकों को चुनने के लिए करेंगे पीमा इंडियंस डायबिटीज डेटासेट से।
from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
अगला, हम सरणी को इनपुट और आउटपुट घटकों में अलग करेंगे -
X = array[:,0:8]
Y = array[:,8]
कोड की निम्नलिखित पंक्तियाँ डेटासेट से विशेषताएँ निकालेगी -
pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)
उत्पादन
Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
[
-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02
9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
]
[
2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02
-9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
]
[
-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01
2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
]
]
हम उपरोक्त आउटपुट से निरीक्षण कर सकते हैं कि 3 प्रिंसिपल कंपोनेंट स्रोत डेटा से कम समानता रखते हैं।
फ़ीचर महत्व
जैसा कि नाम से पता चलता है, महत्वपूर्ण विशेषताओं को चुनने के लिए फीचर महत्व तकनीक का उपयोग किया जाता है। यह मूल रूप से सुविधाओं का चयन करने के लिए एक प्रशिक्षित पर्यवेक्षक वर्गीकृत का उपयोग करता है। हम इस सुविधा चयन तकनीक को स्किटिट-लर्निंग पायथन लाइब्रेरी के एक्सट्राट्रीक्लासीफायर वर्ग की मदद से लागू कर सकते हैं।
उदाहरण
इस उदाहरण में, हम Pima Indian Diabetes डाटासेट से सुविधाओं का चयन करने के लिए ExtraTreeClassifier का उपयोग करेंगे।
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values
अगला, हम सरणी को इनपुट और आउटपुट घटकों में अलग करेंगे -
X = array[:,0:8]
Y = array[:,8]
कोड की निम्नलिखित पंक्तियाँ डेटासेट से विशेषताएँ निकालेगी -
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)
उत्पादन
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
आउटपुट से, हम देख सकते हैं कि प्रत्येक विशेषता के लिए स्कोर हैं। उच्च स्कोर, उच्च उस विशेषता का महत्व है।