एमएल - सांख्यिकी के साथ डेटा को समझना
परिचय
मशीन लर्निंग प्रोजेक्ट्स के साथ काम करते समय, आमतौर पर हम दो सबसे महत्वपूर्ण भागों की अनदेखी करते हैं mathematics तथा data। ऐसा इसलिए है, क्योंकि हम जानते हैं कि एमएल एक डेटा संचालित दृष्टिकोण है और हमारा एमएल मॉडल केवल अच्छे या बुरे परिणामों के रूप में उत्पन्न करेगा जो हमने इसे प्रदान किया था।
पिछले अध्याय में, हमने चर्चा की कि हम अपने ML प्रोजेक्ट में CSV डेटा कैसे अपलोड कर सकते हैं, लेकिन इसे अपलोड करने से पहले डेटा को समझना अच्छा होगा। हम आंकड़ों के साथ और दृश्य के साथ डेटा को दो तरीकों से समझ सकते हैं।
इस अध्याय में, पायथन व्यंजनों का पालन करने की मदद से, हम आंकड़ों के साथ एमएल डेटा को समझने जा रहे हैं।
रॉ डेटा को देखते हुए
बहुत ही पहला नुस्खा आपके कच्चे डेटा को देखने के लिए है। कच्चे डेटा को देखना महत्वपूर्ण है क्योंकि कच्चे डेटा को देखने के बाद हमें जो अंतर्दृष्टि प्राप्त होगी, वह बेहतर पूर्व-प्रसंस्करण के साथ-साथ एमएल परियोजनाओं के लिए डेटा को संभालने के हमारे अवसरों को बढ़ावा देगी।
पाइमा इंडियन्स डायबिटीज डेटासेट पर पंडों डेटाफ्रेम के प्रमुख () फ़ंक्शन का उपयोग करके लागू की गई पायथन लिपि निम्नलिखित है, इसकी बेहतर समझ प्राप्त करने के लिए पहले 50 पंक्तियों को देखें -
उदाहरण
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.head(50))
उत्पादन
preg plas pres skin test mass pedi age class
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1
5 5 116 74 0 0 25.6 0.201 30 0
6 3 78 50 32 88 31.0 0.248 26 1
7 10 115 0 0 0 35.3 0.134 29 0
8 2 197 70 45 543 30.5 0.158 53 1
9 8 125 96 0 0 0.0 0.232 54 1
10 4 110 92 0 0 37.6 0.191 30 0
11 10 168 74 0 0 38.0 0.537 34 1
12 10 139 80 0 0 27.1 1.441 57 0
13 1 189 60 23 846 30.1 0.398 59 1
14 5 166 72 19 175 25.8 0.587 51 1
15 7 100 0 0 0 30.0 0.484 32 1
16 0 118 84 47 230 45.8 0.551 31 1
17 7 107 74 0 0 29.6 0.254 31 1
18 1 103 30 38 83 43.3 0.183 33 0
19 1 115 70 30 96 34.6 0.529 32 1
20 3 126 88 41 235 39.3 0.704 27 0
21 8 99 84 0 0 35.4 0.388 50 0
22 7 196 90 0 0 39.8 0.451 41 1
23 9 119 80 35 0 29.0 0.263 29 1
24 11 143 94 33 146 36.6 0.254 51 1
25 10 125 70 26 115 31.1 0.205 41 1
26 7 147 76 0 0 39.4 0.257 43 1
27 1 97 66 15 140 23.2 0.487 22 0
28 13 145 82 19 110 22.2 0.245 57 0
29 5 117 92 0 0 34.1 0.337 38 0
30 5 109 75 26 0 36.0 0.546 60 0
31 3 158 76 36 245 31.6 0.851 28 1
32 3 88 58 11 54 24.8 0.267 22 0
33 6 92 92 0 0 19.9 0.188 28 0
34 10 122 78 31 0 27.6 0.512 45 0
35 4 103 60 33 192 24.0 0.966 33 0
36 11 138 76 0 0 33.2 0.420 35 0
37 9 102 76 37 0 32.9 0.665 46 1
38 2 90 68 42 0 38.2 0.503 27 1
39 4 111 72 47 207 37.1 1.390 56 1
40 3 180 64 25 70 34.0 0.271 26 0
41 7 133 84 0 0 40.2 0.696 37 0
42 7 106 92 18 0 22.7 0.235 48 0
43 9 171 110 24 240 45.4 0.721 54 1
44 7 159 64 0 0 27.4 0.294 40 0
45 0 180 66 39 0 42.0 1.893 25 1
46 1 146 56 0 0 29.7 0.564 29 0
47 2 71 70 27 0 28.0 0.586 22 0
48 7 103 66 32 0 39.1 0.344 31 1
49 7 105 0 0 0 0.0 0.305 24 0
हम उपरोक्त आउटपुट से देख सकते हैं कि पहला कॉलम पंक्ति संख्या देता है जो एक विशिष्ट अवलोकन को संदर्भित करने के लिए बहुत उपयोगी हो सकता है।
डेटा के आयामों की जाँच करना
यह जानने के लिए हमेशा एक अच्छा अभ्यास है कि पंक्तियों और स्तंभों के संदर्भ में कितना डेटा है, हम अपने एमएल प्रोजेक्ट के लिए हैं। इसके पीछे कारण हैं -
मान लीजिए अगर हमारे पास बहुत अधिक पंक्तियाँ और स्तंभ हैं तो एल्गोरिथम को चलाने और मॉडल को प्रशिक्षित करने में लंबा समय लगेगा।
मान लीजिए अगर हमारे पास बहुत कम पंक्तियाँ और स्तंभ हैं तो हमारे पास मॉडल को अच्छी तरह से प्रशिक्षित करने के लिए पर्याप्त डेटा नहीं होगा।
पंडों के डेटा फ़्रेम पर आकृति की संपत्ति को प्रिंट करके एक पायथन स्क्रिप्ट लागू की गई है। हम इसे कुल पंक्तियों और स्तंभों की संख्या प्राप्त करने के लिए आईरिस डेटा सेट पर लागू करने जा रहे हैं।
उदाहरण
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)
उत्पादन
(150, 4)
हम उस आउटपुट से आसानी से निरीक्षण कर सकते हैं जो आईरिस डेटा सेट, हम उपयोग करने जा रहे हैं, जिसमें 150 पंक्तियाँ और 4 कॉलम हैं।
प्रत्येक गुण का डेटा प्रकार प्राप्त करना
प्रत्येक विशेषता के डेटा प्रकार को जानना एक और अच्छा अभ्यास है। इसके पीछे का कारण है, आवश्यकता के अनुसार, कभी-कभी हमें एक डेटा प्रकार को दूसरे में बदलने की आवश्यकता हो सकती है। उदाहरण के लिए, हमें स्ट्रिंग को फ्लोटिंग पॉइंट में बदलने की आवश्यकता हो सकती है या श्रेणीबद्ध या क्रमिक मूल्यों का प्रतिनिधित्व करने के लिए int। हम कच्चे डेटा को देखकर विशेषता के डेटा प्रकार के बारे में विचार कर सकते हैं, लेकिन दूसरा तरीका पंडों डेटाफ्रेम की dtypes संपत्ति का उपयोग करना है। Dtypes प्रॉपर्टी की मदद से हम प्रत्येक विशेषता डेटा प्रकार को श्रेणीबद्ध कर सकते हैं। इसे पायथन लिपि की मदद से समझा जा सकता है -
उदाहरण
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.dtypes)
उत्पादन
sepal_length float64
sepal_width float64
petal_length float64
petal_width float64
dtype: object
उपरोक्त आउटपुट से, हम आसानी से प्रत्येक विशेषता के डेटाटिप्स प्राप्त कर सकते हैं।
डेटा का सांख्यिकीय सारांश
हमने आकार के लिए पंक्तियों और स्तंभों की संख्या, डेटा की संख्या प्राप्त करने के लिए पायथन रेसिपी पर चर्चा की है, लेकिन कई बार हमें डेटा के उस आकार के सारांश की समीक्षा करने की आवश्यकता होती है। यह पंडों डेटाफ्रेम के वर्णन () फ़ंक्शन की सहायता से किया जा सकता है जो प्रत्येक और प्रत्येक डेटा विशेषता के निम्नलिखित 8 सांख्यिकीय गुण प्रदान करते हैं -
- Count
- Mean
- मानक विचलन
- न्यूनतम मूल्य
- अधिकतम मूल्य
- 25%
- मेडियन यानी 50%
- 75%
उदाहरण
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
print(data.shape)
print(data.describe())
उत्पादन
(768, 9)
preg plas pres skin test mass pedi age class
count 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00
mean 3.85 120.89 69.11 20.54 79.80 31.99 0.47 33.24 0.35
std 3.37 31.97 19.36 15.95 115.24 7.88 0.33 11.76 0.48
min 0.00 0.00 0.00 0.00 0.00 0.00 0.08 21.00 0.00
25% 1.00 99.00 62.00 0.00 0.00 27.30 0.24 24.00 0.00
50% 3.00 117.00 72.00 23.00 30.50 32.00 0.37 29.00 0.00
75% 6.00 140.25 80.00 32.00 127.25 36.60 0.63 41.00 1.00
max 17.00 199.00 122.00 99.00 846.00 67.10 2.42 81.00 1.00
उपरोक्त आउटपुट से, हम डेटा के आकार के साथ-साथ पीमा भारतीय मधुमेह डेटासेट के डेटा का सांख्यिकीय सारांश देख सकते हैं।
कक्षा वितरण की समीक्षा करना
श्रेणी वितरण की समस्याएँ वर्गीकरण की समस्याओं में उपयोगी होती हैं जहाँ हमें वर्ग मूल्यों के संतुलन को जानना आवश्यक होता है। क्लास वैल्यू डिस्ट्रीब्यूशन जानना महत्वपूर्ण है क्योंकि अगर हमारे पास अत्यधिक असंतुलित क्लास डिस्ट्रीब्यूशन है यानी एक क्लास में अन्य क्लास की तुलना में बहुत अधिक ऑब्जर्वेशन है, तो उसे हमारे एमएल प्रोजेक्ट के डेटा तैयारी चरण में विशेष हैंडलिंग की आवश्यकता हो सकती है। हम पंडों DataFrame की मदद से अजगर में वर्ग वितरण आसानी से प्राप्त कर सकते हैं।
उदाहरण
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
count_class = data.groupby('class').size()
print(count_class)
उत्पादन
Class
0 500
1 268
dtype: int64
उपरोक्त आउटपुट से, यह स्पष्ट रूप से देखा जा सकता है कि कक्षा 1 के साथ टिप्पणियों की संख्या कक्षा 1 के साथ टिप्पणियों की संख्या लगभग दोगुनी है।
विशेषताएँ के बीच सहसंबंध की समीक्षा
दो चर के बीच संबंध को सहसंबंध कहा जाता है। आंकड़ों में, सहसंबंध की गणना के लिए सबसे आम तरीका पियर्सन के सहसंबंध गुणांक है। इसके तीन मान हो सकते हैं -
Coefficient value = 1 - यह पूर्ण प्रतिनिधित्व करता है positive चर के बीच सहसंबंध।
Coefficient value = -1 - यह पूर्ण प्रतिनिधित्व करता है negative चर के बीच सहसंबंध।
Coefficient value = 0 - यह प्रतिनिधित्व किया no चर सभी के बीच संबंध।
एमएल प्रोजेक्ट में उपयोग करने से पहले हमारे डेटासेट में मौजूद विशेषताओं के युग्मक सहसंबंधों की समीक्षा करना हमारे लिए हमेशा अच्छा होता है क्योंकि कुछ मशीन लर्निंग एल्गोरिदम जैसे लीनियर रिग्रेशन और लॉजिस्टिक रिग्रेशन हमारे खराब सहसंबद्ध गुण होने पर खराब प्रदर्शन करेंगे। पायथन में, हम आसानी से पांडस डेटाफ़्रेम पर कार्य () फ़ंक्शन की मदद से डेटासेट विशेषताओं के सहसंबंध मैट्रिक्स की गणना कर सकते हैं।
उदाहरण
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
correlations = data.corr(method='pearson')
print(correlations)
उत्पादन
preg plas pres skin test mass pedi age class
preg 1.00 0.13 0.14 -0.08 -0.07 0.02 -0.03 0.54 0.22
plas 0.13 1.00 0.15 0.06 0.33 0.22 0.14 0.26 0.47
pres 0.14 0.15 1.00 0.21 0.09 0.28 0.04 0.24 0.07
skin -0.08 0.06 0.21 1.00 0.44 0.39 0.18 -0.11 0.07
test -0.07 0.33 0.09 0.44 1.00 0.20 0.19 -0.04 0.13
mass 0.02 0.22 0.28 0.39 0.20 1.00 0.14 0.04 0.29
pedi -0.03 0.14 0.04 0.18 0.19 0.14 1.00 0.03 0.17
age 0.54 0.26 0.24 -0.11 -0.04 0.04 0.03 1.00 0.24
class 0.22 0.47 0.07 0.07 0.13 0.29 0.17 0.24 1.00
उपरोक्त आउटपुट में मैट्रिक्स, डेटासेट में विशेषता के सभी जोड़े के बीच सहसंबंध देता है।
वितरण वितरण की समीक्षा करना
स्केवनेस को उस वितरण के रूप में परिभाषित किया जा सकता है जिसे गॉसियन माना जाता है लेकिन विकृत या एक दिशा या किसी अन्य में स्थानांतरित हो जाता है, या तो बाईं या दाईं ओर दिखाई देता है। निम्नलिखित कारणों से विशेषताओं के तिरछेपन की समीक्षा करना महत्वपूर्ण कार्य है -
डेटा में तिरछापन की उपस्थिति के लिए डेटा तैयारी चरण में सुधार की आवश्यकता होती है ताकि हम अपने मॉडल से अधिक सटीकता प्राप्त कर सकें।
अधिकांश एमएल एल्गोरिदम मानते हैं कि डेटा में गॉसियन वितरण होता है या तो घंटी घुमावदार डेटा के सामान्य।
पाइथन में, हम पांडस डेटाफ़्रेम पर तिरछा () फ़ंक्शन का उपयोग करके आसानी से प्रत्येक विशेषता के तिरछा की गणना कर सकते हैं।
उदाहरण
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
print(data.skew())
उत्पादन
preg 0.90
plas 0.17
pres -1.84
skin 0.11
test 2.27
mass -0.43
pedi 1.92
age 1.13
class 0.64
dtype: float64
उपरोक्त आउटपुट से, सकारात्मक या नकारात्मक तिरछा मनाया जा सकता है। यदि मान शून्य के करीब है, तो यह कम तिरछा दिखाता है।