मुख्य सामग्री पर जाएँ

डेटा साइंस में प्रीप्रोसेसिंग (भाग 1): सेंट्रिंग, स्केलिंग, और KNN

यह लेख बताएगा कि मशीन लर्निंग पाइपलाइन में प्रीप्रोसेसिंग क्यों महत्वपूर्ण है, और कैसे सेंट्रिंग व स्केलिंग मॉडल के प्रदर्शन में सुधार कर सकती हैं।
· 11 मि॰ पढ़ें

AI के साथ खोजें

डेटा प्रीप्रोसेसिंग एक छत्र-शब्द है जो उन अनेक क्रियाओं को कवर करता है जिनका उपयोग डेटा वैज्ञानिक अपना डेटा उस रूप में लाने के लिए करते हैं जो उनके इच्छित कार्य के लिए अधिक उपयुक्त हो। उदाहरण के लिए, ट्विटर डेटा पर सेंटिमेंट विश्लेषण करने से पहले, आप किसी भी HTML टैग, अतिरिक्त खाली जगहें हटाना, संक्षेपों का विस्तार करना और ट्वीट्स को उनके शब्दों की सूचियों में विभाजित करना चाहेंगे। स्थानिक डेटा का विश्लेषण करते समय आप उसे इस तरह स्केल कर सकते हैं कि वह इकाई-स्वतंत्र हो जाए, यानी आपका एल्गोरिद्म इस बात की परवाह न करे कि मूल माप मील में थे या सेंटीमीटर में। हालांकि, डेटा का प्रीप्रोसेसिंग निर्वात में नहीं होता। कहने का आशय यह है कि प्रीप्रोसेसिंग साधन है, लक्ष्य नहीं, और इसके लिए कोई कठोर नियम नहीं हैं: मानक प्रथाएँ मौजूद हैं, जैसा कि हम देखेंगे, और आप क्या काम करेगा इसका सहज बोध विकसित कर सकते हैं; पर अंततः, प्रीप्रोसेसिंग आम तौर पर एक परिणामोन्मुख पाइपलाइन का हिस्सा होती है और इसके प्रदर्शन का आकलन संदर्भ में होना चाहिए।

इस लेख में, मैं संख्यात्मक डेटा के स्केलिंग के उदाहरण का उपयोग करूँगा (संख्यात्मक डेटा: ऐसे डेटा जो संख्याओं से बने हों, श्रेणियों/स्ट्रिंग्स के विपरीत; स्केलिंग: डेटा की रेंज बदलने के लिए बुनियादी अंकगणित का उपयोग; आगे विवरण आएगा) ताकि यह दिखाया जा सके कि प्रीप्रोसेसिंग को एक बड़े ढाँचे, यानी मशीन लर्निंग (ML) पाइपलाइन, का हिस्सा मानना क्यों महत्वपूर्ण है। इसी उद्देश्य से, हम एक वास्तविक उदाहरण देखेंगे जिसमें स्केलिंग मॉडल के प्रदर्शन में सुधार कर सकती है।

मैं पहले ML में वर्गीकरण समस्याओं और k-Nearest Neighbors, जो ऐसे परिदृश्यों में उपयोग होने वाले सबसे सरल एल्गोरिद्म में से एक है, का परिचय दूँगा। ऐसे परिदृश्य में संख्यात्मक डेटा के स्केलिंग के महत्व को समझने के लिए, मुझे मॉडल प्रदर्शन के मापदंडों और ट्रेनिंग व टेस्ट सेट की अवधारणाएँ पेश करनी होंगी। आप इन सभी अवधारणाओं और प्रथाओं को उस डेटा सेट के साथ क्रियान्वित होते देखेंगे जिसमें मैं लाल वाइन की गुणवत्ता का वर्गीकरण करने का प्रयास करता हूँ। मैं यह भी सुनिश्चित करूँगा कि प्रीप्रोसेसिंग को उसके सबसे उपयोगी स्थान पर रखा जाए—एक पुनरावृत्त डेटा साइंस पाइपलाइन की शुरुआत के पास। यहाँ सभी उदाहरण Python में होंगे। यदि आप Python से परिचित नहीं हैं, तो हमारे DataCamp कोर्सेज यहाँ देख सकते हैं। मैं pandas लाइब्रेरी का उपयोग डेटा फ्रेम के लिए और scikit-learn का उपयोग मशीन लर्निंग के लिए करूँगा।

यह तीन-भाग की ट्यूटोरियल शृंखला का भाग एक है:

भाग 2: सेंट्रिंग, स्केलिंग और लॉजिस्टिक रिग्रेशन

भाग 3: सिंथेसाइज़्ड डेटा का स्केलिंग

मशीन लर्निंग में वर्गीकरण समस्याओं का संक्षिप्त परिचय

प्रकृति की दुनिया में चीजों को वर्गीकृत व नामित करना प्राचीन कला है। चौथी सदी ईसा पूर्व में, अरस्तू ने जीवित प्राणियों की एक वर्गीकरण प्रणाली बनाई थी जिसका 2,000 वर्षों तक उपयोग हुआ। आधुनिक दुनिया में, वर्गीकरण को सामान्यतः एक मशीन लर्निंग कार्य, विशेषकर सुपरवाइज़्ड लर्निंग कार्य, के रूप में परिभाषित किया जाता है। सुपरवाइज़्ड लर्निंग का मूल सिद्धांत सीधा है: हमारे पास प्रेडिक्टर वैरिएबल्स और एक टार्गेट वैरिएबल से बना डेटा होता है। सुपरवाइज़्ड लर्निंग का उद्देश्य ऐसा मॉडल बनाना है जो प्रेडिक्टर वैरिएबल्स के आधार पर टार्गेट वैरिएबल का सही अनुमान लगाने में “अच्छा” हो। यदि टार्गेट वैरिएबल श्रेणियों से बना हो (जैसे ‘क्लिक’ या ‘नहीं’, ‘घातक’ या ‘सौम्य’ ट्यूमर), तो हम इस लर्निंग कार्य को वर्गीकरण कहते हैं। इसके विपरीत, यदि टार्गेट निरंतर रूप से बदलने वाला वैरिएबल हो (जैसे घर की कीमत), तो यह रिग्रेशन कार्य है।

एक उदाहरण यहाँ बहुत उपयोगी होगा: हृदय रोग डेटा सेट पर विचार करें, जिसमें 75 प्रेडिक्टर वैरिएबल्स हैं, जैसे ‘आयु’, ‘लिंग’ और ‘धूम्रपान करता है या नहीं’, और टार्गेट वैरिएबल हृदय रोग की उपस्थिति को दर्शाता है जो 0 (कोई हृदय रोग नहीं) से 4 तक के मान लेता है। इस डेटा सेट पर काफी काम हृदय रोग की उपस्थिति और अनुपस्थिति में भेद करने के प्रयास पर केंद्रित रहा है। यह एक वर्गीकरण कार्य है। यदि आप टार्गेट वैरिएबल का वास्तविक मान (0 से 4) भविष्यवाणी करने की कोशिश करें, तो यह रिग्रेशन समस्या होगी (क्योंकि टार्गेट वैरिएबल क्रमबद्ध है)। रिग्रेशन पर मैं अगले पोस्ट में चर्चा करूँगा। यहाँ मैं वर्गीकरण कार्यों के लिए सबसे सरल एल्गोरिद्म में से एक, k-Nearest Neighbors एल्गोरिद्म, पर नज़र डालूँगा।

मशीन लर्निंग में वर्गीकरण के लिए k-Nearest Neighbors

मान लीजिए हमारे पास कुछ लेबलयुक्त डेटा है; उदाहरण के लिए, लाल वाइन की विशेषताओं (जैसे अल्कोहल कंटेंट, घनत्व, साइट्रिक एसिड की मात्रा, pH, आदि; ये प्रेडिक्टर वैरिएबल्स हैं) के साथ टार्गेट वैरिएबल ‘Quality’ और लेबल ‘good’ व ‘bad’। तब, किसी नई, बिना लेबल वाली वाइन की विशेषताएँ दी होने पर, वर्गीकरण कार्य उसकी ‘Quality’ का पूर्वानुमान लगाना है। जब सभी प्रेडिक्टर वैरिएबल्स संख्यात्मक हों (श्रेणीबद्ध मामले से निपटने के अन्य तरीके भी हैं), तो हम प्रत्येक पंक्ति/वाइन को n-आयामी स्थान में एक बिंदु मान सकते हैं, और ऐसे में k-Nearest Neighbors (k-NN) वैचारिक और कम्प्यूटेशनल रूप से एक सरल वर्गीकरण विधि है: हर नई, बिना लेबल वाली वाइन के लिए, किसी पूर्णांक k के लिए, हम उसके n-आयामी प्रेडिक्टर वैरिएबल स्पेस में k निकटतम पड़ोसी निकालते हैं। फिर हम इन k पड़ोसियों के लेबल देखते हैं (जैसे ‘good’ या ‘bad’) और सबसे अधिक वोट वाले लेबल को नई वाइन को सौंप देते हैं (उदाहरण: यदि k = 5, 3 पड़ोसी ‘good’ और 2 ‘bad’ वोट दें, तो हमारा मॉडल नई वाइन को ‘good’ लेबल देगा)। ध्यान दें कि यहाँ मॉडल का प्रशिक्षण मात्र डेटा बिंदुओं को संग्रहीत करने तक सीमित है: कोई पैरामीटर फिट नहीं किए जाते!

k-Nearest Neighbors का दृश्य वर्णन

नीचे दी गई छवि में 2D में k-NN का एक उदाहरण है: बीच में मौजूद डेटा बिंदु को आप कैसे वर्गीकृत करेंगे? यदि k=3 है, तो आप इसे लाल के रूप में वर्गीकृत करेंगे और यदि k=5 है, तो हरे के रूप में।

 
2D में k-nn उदाहरण

Python (scikit-learn) में k-NN का इम्प्लिमेंटेशन

अब हम काम करते हुए k-NN का एक उदाहरण देखते हैं। इसके लिए हम वाइन क्वालिटी डेटा सेट देखेंगे: इसे एक pandas डेटा फ्रेम में आयात करेंगे और फिर प्रेडिक्टर वैरिएबल्स के हिस्टोग्राम प्लॉट करेंगे ताकि डेटा का अंदाजा लगे।
import pandas as pd%matplotlib inlineimport matplotlib.pyplot as pltplt.style.use('ggplot')df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv ' , sep = ';')X = df.drop('quality' , 1).values # drop target variabley1 = df['quality'].valuespd.DataFrame.hist(df, figsize = [15,15]);
बार चार्ट

पहले प्रेडिक्टर वैरिएबल्स की रेंज पर ध्यान दें: ‘free sulfur dioxide’ 0 से ~70 तक और ‘volatile acidity’ ~0 से ~1.2 तक है। विशेष रूप से, पहले वाले की रेंज दूसरे की तुलना में 2 आर्डर ऑफ मैग्नीट्यूड अधिक है। कोई भी एल्गोरिद्म, जैसे k-NN, जो डेटा बिंदुओं के बीच दूरी पर ध्यान देता है, वह बड़ी रेंज वाले वैरिएबल्स, जैसे ‘free sulfur dioxide’, पर अनावश्यक रूप से और अनुचित रूप से फोकस कर सकता है—जो कि, क्या पता, केवल शोर ही हो। यही हमारे डेटा को स्केल करने की प्रेरणा देता है, जिस पर हम जल्द ही आएँगे।

अब टार्गेट वैरिएबल वाइन की ‘Quality’ रेटिंग है जो 3 से 8 तक जाती है। व्याख्या में सरलता के लिए, इसे दो-श्रेणी वाले वैरिएबल में बदलते हैं: ‘good’ (रेटिंग > 5) और ‘bad’ (रेटिंग <= 5)। हम टार्गेट वैरिएबल की दोनों परिभाषाओं के हिस्टोग्राम भी प्लॉट करेंगे ताकि स्थिति का आभास हो।

y = y1 <= 5 # is the rating <= 5?# plot histograms of original target variable# and aggregated target variableplt.figure(figsize=(20,5));plt.subplot(1, 2, 1 );plt.hist(y1);plt.xlabel('original target value')plt.ylabel('count')plt.subplot(1, 2, 2);plt.hist(y)plt.xlabel('aggregated target value')plt.show()
बार चार्ट
अब हम लगभग k-Nearest Neighbors चलाने के लिए तैयार हैं। लेकिन सबसे पहले, यदि हमें अपने मॉडल के प्रदर्शन की तुलना प्रीप्रोसेसिंग के साथ और बिना करनी है, तो हमें यह पता करना होगा कि किसी मॉडल की ‘अच्छाई’ कैसे मापें:

k-Nearest Neighbors: यह कितना अच्छा प्रदर्शन करता है?

वर्गीकरण चुनौतियों के लिए कई प्रदर्शन माप हैं। यह समझना अत्यंत महत्वपूर्ण है कि प्रदर्शन माप का चुनाव गहरे तौर पर डोमेन व प्रश्न-विशिष्ट होता है। संतुलित कक्षाओं वाले डेटा सेट (जहाँ सभी टार्गेट मान लगभग समान रूप से प्रतिनिधित्वित हों) के मामले में, डेटा वैज्ञानिक सामान्यतः एक्यूरेसी को प्रदर्शन माप के रूप में देखते हैं। वास्तव में, जैसा कि हम देखेंगे, scikit-learn में k-Nearest Neighbors और लॉजिस्टिक रिग्रेशन दोनों के लिए एक्यूरेसी डिफॉल्ट स्कोरिंग विधि है। तो एक्यूरेसी क्या है? यह मात्र सही भविष्यवाणियों की संख्या को कुल भविष्यवाणियों की संख्या से भाग देने पर प्राप्त मान है:
$$\text{Accuracy}=\frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}}.$$

ध्यान दें: एक्यूरेसी को कन्फ्यूज़न मैट्रिक्स के संदर्भ में भी परिभाषित किया जा सकता है और इसे प्रायः बाइनरी वर्गीकरण समस्याओं के लिए ट्रू पॉज़िटिव्स और फॉल्स नेगेटिव्स के संदर्भ में परिभाषित किया जाता है; कन्फ्यूज़न मैट्रिक्स से निकाले जाने वाले अन्य आम प्रदर्शन माप हैं प्रिसिशन—ट्रू पॉज़िटिव्स की संख्या को ट्रू व फॉल्स पॉज़िटिव्स की कुल संख्या से भाग; और रीकॉल—ट्रू पॉज़िटिव्स की संख्या को ट्रू पॉज़िटिव्स और फॉल्स नेगेटिव्स की कुल संख्या से भाग। एक और माप, F1-स्कोर, प्रिसिशन और रीकॉल का हार्मोनिक मीन है। इन मापों की अच्छी व्याख्या के लिए machine learning mastery देखें; साथ ही कन्फ्यूज़न मैट्रिक्स और F1 स्कोर के विकिपीडिया प्रविष्टियाँ भी देखें।

k-Nearest Neighbors: व्यवहार में प्रदर्शन और ट्रेन-टेस्ट स्प्लिट

एक्यूरेसी जैसा प्रदर्शन माप होना अच्छी बात है, पर यदि हम मॉडल को हमारे पास मौजूद सारे डेटा पर फिट कर दें, तो हम किस डेटा सेट से एक्यूरेसी रिपोर्ट करेंगे? याद रखें कि हमें ऐसा मॉडल चाहिए जो नए डेटा पर अच्छी तरह सामान्यीकृत हो। अतः यदि हम अपने मॉडल को डेटा सेट D पर प्रशिक्षित करते हैं, तो उसी डेटा D पर मॉडल की एक्यूरेसी रिपोर्ट करना इसे वास्तविक प्रदर्शन से बेहतर दिखा सकता है। इसे ओवरफिटिंग कहा जाता है। इस समस्या से निपटने के लिए, डेटा वैज्ञानिक प्रायः डेटा के एक उपसमुच्चय पर अपना मॉडल प्रशिक्षित करते हैं, जिसे ट्रेनिंग सेट कहते हैं, और उसके प्रदर्शन का आकलन शेष डेटा पर करते हैं, जिसे टेस्ट सेट कहते हैं। यही हम यहाँ करने जा रहे हैं! एक सामान्य अंगूठा-नियम यह है कि लगभग 80% डेटा ट्रेनिंग के लिए और 20% टेस्ट के लिए उपयोग करें। अब अपने रेड वाइन क्वालिटी डेटा को विभाजित करते हैं:
from sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)We now build the k-NN model, make predictions on the test set and compare these predictions to the ground truth in order to get a measure of model performance:from sklearn import neighbors, linear_modelknn = neighbors.KNeighborsClassifier(n_neighbors = 5)knn_model_1 = knn.fit(X_train, y_train)print('k-NN accuracy for test set: %f' % knn_model_1.score(X_test, y_test))k-NN accuracy for test set: 0.612500

It is worth reiterating that the default scoring method for k-NN in scikit-learn is
accuracy. An accuracy of 61% is not great but for an out of the box model without any preprocessing it's not horrible either. To check out a variety of other metrics, we can use scikit-learn's classification report also:

from sklearn.metrics import classification_reporty_true, y_pred = y_test, knn_model_1.predict(X_test)print(classification_report(y_true, y_pred))
 
             precision    recall  f1-score   support      False       0.66      0.64      0.65       179       True       0.56      0.57      0.57       141avg / total       0.61      0.61      0.61       320

अब हम स्केलिंग और सेंट्रिंग—संख्यात्मक डेटा के प्रीप्रोसेसिंग की सबसे बुनियादी विधियाँ—को पेश करने जा रहे हैं और देखेंगे कि वे हमारे मॉडल के प्रदर्शन को कैसे और कितना प्रभावित करती हैं।

प्रीप्रोसेसिंग की यांत्रिकी: स्केलिंग और सेंट्रिंग

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

नॉर्मलाइज़ेशन का आशय बस इतना है कि डेटा सेट को इस तरह स्केल करना कि उसका न्यूनतम 0 और अधिकतम 1 हो। इसे प्राप्त करने के लिए हम प्रत्येक डेटा बिंदु x को इस रूप में बदलते हैं

$$x_{normalized} = \frac{x-x_{min}}{x_{max}-x_{min}}.$$

स्टैंडर्डाइज़ेशन थोड़ा भिन्न है; इसका काम डेटा को 0 के आसपास केंद्रित करना और मानक विचलन के संदर्भ में स्केल करना है:

$$x_{standardized} = \frac{x-\mu}{\sigma},$$

जहाँ \mu और \sigma क्रमशः डेटा सेट का औसत और मानक विचलन हैं। पहले ध्यान दें कि ये रूपांतरण केवल डेटा की रेंज बदलते हैं, वितरण नहीं। आगे चलकर आप लॉग ट्रांसफॉर्म या बॉक्स-कॉक्स ट्रांसफॉर्म जैसे कई अन्य रूपांतरण भी इस्तेमाल करना चाह सकते हैं ताकि आपका डेटा अधिक Gaussian (घंटी-आकार) जैसा दिखे। पर आगे बढ़ने से पहले, यह पूछना महत्वपूर्ण है: हम अपना डेटा स्केल क्यों करते हैं? क्या कुछ स्थितियों में यह अधिक उपयुक्त होता है? उदाहरण के लिए, क्या यह वर्गीकरण समस्याओं में रिग्रेशन की तुलना में अधिक महत्वपूर्ण है?

पहले वर्गीकरण चुनौतियों में उतरते हैं और देखते हैं कि स्केलिंग k-Nearest Neighbors के प्रदर्शन को कैसे प्रभावित करती है:

प्रीप्रोसेसिंग: व्यवहार में स्केलिंग

नीचे मैं (i) डेटा को स्केल करता हूँ, (ii) k-Nearest Neighbors का उपयोग करता हूँ, और (iii) मॉडल प्रदर्शन जाँचता हूँ। मैं scikit-learn के scale फंक्शन का उपयोग करूँगा, जो पास की गई array में सभी फीचर्स (कॉलम) को स्टैंडर्डाइज़ करता है।

from sklearn.preprocessing import scaleXs = scale(X)from sklearn.cross_validation import train_test_splitXs_train, Xs_test, y_train, y_test = train_test_split(Xs, y, test_size=0.2, random_state=42)knn_model_2 = knn.fit(Xs_train, y_train)print('k-NN score for test set: %f' % knn_model_2.score(Xs_test, y_test))print('k-NN score for training set: %f' % knn_model_2.score(Xs_train, y_train))y_true, y_pred = y_test, knn_model_2.predict(Xs_test)print(classification_report(y_true, y_pred))
 
 k-NN score for test set: 0.712500k-NN score for training set: 0.814699             precision    recall  f1-score   support      False       0.72      0.79      0.75       179       True       0.70      0.62      0.65       141avg / total       0.71      0.71      0.71       320

ये सभी माप 0.1 से बेहतर हुए हैं, जो 16% का सुधार है और महत्वपूर्ण है! जैसा कि ऊपर संकेत किया गया था, स्केलिंग से पहले कई प्रेडिक्टर वैरिएबल्स की रेंज में आर्डर ऑफ मैग्नीट्यूड का अंतर था, जिसका मतलब है कि k-NN जैसे एल्गोरिद्म के संदर्भ में एक-दो वैरिएबल्स हावी हो सकते थे। अपने डेटा को स्केल करने के दो मुख्य कारण हैं

  1. आपके प्रेडिक्टर वैरिएबल्स की रेंज में बड़ा अंतर हो सकता है और कुछ स्थितियों में, जैसे k-NN लागू करते समय, इसे कम करना आवश्यक है ताकि कुछ फीचर्स एल्गोरिद्म पर हावी न हों;
  2. आप अपने फीचर्स को इकाई-स्वतंत्र बनाना चाहते हैं, यानी माप की स्केल पर निर्भर न हों: उदाहरण के लिए, आपके पास कोई फीचर मीटर में व्यक्त हो सकता है और मेरे पास वही फीचर सेंटीमीटर में। यदि हम दोनों अपना-अपना डेटा स्केल करें, तो यह फीचर हम दोनों के लिए समान होगा।

हमने देखा कि डेटा साइंस पाइपलाइन में, स्केलिंग और सेंट्रिंग के रूप में, प्रीप्रोसेसिंग का स्थान कितना केंद्रीय है—और हमने यह मशीन लर्निंग की चुनौतियों के लिए समग्र दृष्टिकोण को बढ़ावा देने के लिए किया। आने वाले लेखों में, मैं इस चर्चा का विस्तार अन्य प्रकार की प्रीप्रोसेसिंग तक करना चाहता हूँ, जैसे संख्यात्मक डेटा के रूपांतरण और श्रेणीबद्ध डेटा का प्रीप्रोसेसिंग—जो किसी भी डेटा वैज्ञानिक के टूलकिट के आवश्यक पहलू हैं। इससे पहले, अगले लेख में मैं वर्गीकरण के रिग्रेशन दृष्टिकोणों में स्केलिंग की भूमिका का अन्वेषण करूँगा। विशेष रूप से, मैं लॉजिस्टिक रिग्रेशन देखूँगा और आप पाएँगे कि परिणाम k-Nearest Neighbors के संदर्भ में अभी जो आपने देखा उससे बहुत भिन्न है।

नीचे दिए गए इंटरैक्टिव विंडो में, आप स्वयं डेटा के साथ खेल सकते हैं। शुरुआत में n_neig वैरिएबल बदलें, जो k-NN एल्गोरिद्म में उपयोग होने वाले पड़ोसियों की संख्या है। यदि आप चाहें, तो sc = True सेट करके डेटा को स्केल भी कर सकते हैं। फिर पूरे स्क्रिप्ट को चलाएँ ताकि मॉडल की एक्यूरेसी और क्लासिफिकेशन रिपोर्ट प्राप्त हो सके।

import pandas as pdimport matplotlib.pyplot as pltfrom sklearn.cross_validation import train_test_splitfrom sklearn import neighborsfrom sklearn.preprocessing import scalefrom sklearn.metrics import classification_report # Set the the number of neighbors for k-NNn_neig = 5# Set sc = True if you want to scale your featuressc = False# Load datadf = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv ' , sep = ';')X = df.drop('quality' , 1).values# drop target variable# Here we scale, if desiredif sc == True: X = scale(X)# Target valuey1 = df['quality'].values# original target variabley = y1 <= 5# new target variable: is the rating <= 5?# Split the data into a test set and a training setX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Train k-NN model and print performance on the test setknn = neighbors.KNeighborsClassifier(n_neighbors = n_neig)knn_model = knn.fit(X_train, y_train)y_true, y_pred = y_test, knn_model.predict(X_test)print('k-NN accuracy for test set: %f' % knn_model.score(X_test, y_test))print(classification_report(y_true, y_pred))

शब्दावली

सुपरवाइज़्ड लर्निंग: प्रेडिक्टर वैरिएबल्स से टार्गेट वैरिएबल का अनुमान लगाने का कार्य। उदाहरण के लिए, टार्गेट वैरिएबल ‘हृदय रोग की उपस्थिति’ का अनुमान ‘आयु’, ‘लिंग’ और ‘धूम्रपान स्थिति’ जैसे प्रेडिक्टर वैरिएबल्स से लगाना।

वर्गीकरण कार्य: यदि सुपरवाइज़्ड लर्निंग कार्य में टार्गेट वैरिएबल श्रेणियों से बना हो (जैसे ‘क्लिक’ या ‘नहीं’, ‘घातक’ या ‘सौम्य’ ट्यूमर), तो वह वर्गीकरण कार्य है।

रिग्रेशन कार्य: यदि सुपरवाइज़्ड लर्निंग कार्य में टार्गेट वैरिएबल निरंतर रूप से बदलने वाला वैरिएबल हो (जैसे घर की कीमत) या क्रमबद्ध श्रेणीबद्ध वैरिएबल, जैसे ‘वाइन की गुणवत्ता रेटिंग’, तो वह रिग्रेशन कार्य है।

k-Nearest Neighbors: वर्गीकरण कार्यों के लिए एक एल्गोरिद्म, जिसमें किसी डेटा बिंदु को उसके k निकटतम पड़ोसियों के बहुमत वोट से तय लेबल दिया जाता है।

प्रीप्रोसेसिंग: वे सभी क्रियाएँ जिनका उपयोग डेटा वैज्ञानिक अपना डेटा उस रूप में लाने के लिए करते हैं जो उनके इच्छित कार्य के लिए अधिक उपयुक्त हो। उदाहरण के लिए, ट्विटर डेटा पर सेंटिमेंट विश्लेषण करने से पहले आप HTML टैग, अतिरिक्त खाली जगहें हटाना, संक्षेपों का विस्तार करना और ट्वीट्स को उनके शब्दों की सूचियों में बाँटना चाहेंगे।

सेंट्रिंग और स्केलिंग: ये दोनों संख्यात्मक डेटा के प्रीप्रोसेसिंग के रूप हैं—यानी ऐसा डेटा जो संख्याओं से बना हो, न कि श्रेणियों या स्ट्रिंग्स से, उदाहरण के लिए; किसी वैरिएबल को सेंटर करना मतलब उसके हर डेटा बिंदु से उस वैरिएबल का औसत घटाना ताकि नए वैरिएबल का औसत 0 हो; किसी वैरिएबल को स्केल करना मतलब हर डेटा बिंदु को किसी स्थिरांक से गुणा करना ताकि डेटा की रेंज बदली जा सके। इनके महत्व और उदाहरणों के लिए लेख के मुख्य भाग देखें।

यह लेख एक Jupyter नोटबुक से जनरेट किया गया है। आप नोटबुक यहाँ डाउनलोड कर सकते हैं।

विषय