मशीन लर्निंग - ट्रेन/टेस्ट
अपने मॉडल का मूल्यांकन करें
मशीन लर्निंग में हम कुछ घटनाओं के परिणाम की भविष्यवाणी करने के लिए मॉडल बनाते हैं, जैसे पिछले अध्याय में जहां हमने एक कार के CO2 उत्सर्जन की भविष्यवाणी की थी जब हम वजन और इंजन के आकार को जानते थे।
यह मापने के लिए कि क्या मॉडल काफी अच्छा है, हम ट्रेन/टेस्ट नामक एक विधि का उपयोग कर सकते हैं।
ट्रेन / टेस्ट क्या है
ट्रेन/टेस्ट आपके मॉडल की सटीकता को मापने का एक तरीका है।
इसे ट्रेन/टेस्ट कहा जाता है क्योंकि आप डेटा सेट को दो सेटों में विभाजित करते हैं: एक प्रशिक्षण सेट और एक परीक्षण सेट।
प्रशिक्षण के लिए 80% और परीक्षण के लिए 20%।
आप प्रशिक्षण सेट का उपयोग करके मॉडल को प्रशिक्षित करते हैं।
आप परीक्षण सेट का उपयोग करके मॉडल का परीक्षण करते हैं।
मॉडल को प्रशिक्षित करने का अर्थ है मॉडल बनाना ।
मॉडल का परीक्षण करें का अर्थ है मॉडल की सटीकता का परीक्षण करना।
डेटा सेट के साथ प्रारंभ करें
उस डेटा सेट से शुरू करें जिसका आप परीक्षण करना चाहते हैं।
हमारा डेटा सेट एक दुकान में 100 ग्राहकों और उनकी खरीदारी की आदतों को दिखाता है।
उदाहरण
import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40,
100) / x
plt.scatter(x, y)
plt.show()
परिणाम:
एक्स अक्ष खरीदारी करने से पहले मिनटों की संख्या का प्रतिनिधित्व करता है।
y अक्ष खरीद पर खर्च की गई राशि का प्रतिनिधित्व करता है।
ट्रेन/टेस्ट में विभाजित करें
प्रशिक्षण सेट मूल डेटा के 80% का यादृच्छिक चयन होना चाहिए ।
परीक्षण सेट शेष 20% होना चाहिए ।
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
प्रशिक्षण सेट प्रदर्शित करें
प्रशिक्षण सेट के साथ समान स्कैटर प्लॉट प्रदर्शित करें:
उदाहरण
plt.scatter(train_x,
train_y)
plt.show()
परिणाम:
यह मूल डेटा सेट जैसा दिखता है, इसलिए यह एक उचित चयन प्रतीत होता है:
परीक्षण सेट प्रदर्शित करें
यह सुनिश्चित करने के लिए कि परीक्षण सेट पूरी तरह से अलग नहीं है, हम परीक्षण सेट पर भी एक नज़र डालेंगे।
उदाहरण
plt.scatter(test_x,
test_y)
plt.show()
परिणाम:
परीक्षण सेट भी मूल डेटा सेट जैसा दिखता है:
डेटा सेट फिट करें
डेटा सेट कैसा दिखता है? मेरी राय में मुझे लगता है कि सबसे उपयुक्त बहुपद प्रतिगमन होगा , तो आइए हम बहुपद प्रतिगमन की एक रेखा खींचते हैं।
डेटा बिंदुओं के माध्यम से एक रेखा खींचने के लिए, हम
plot()
matplotlib मॉड्यूल की विधि का उपयोग करते हैं:
उदाहरण
डेटा बिंदुओं के माध्यम से एक बहुपद प्रतिगमन रेखा बनाएं:
import numpy
import
matplotlib.pyplot as plt
numpy.random.seed(2)
x =
numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y =
y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
myline = numpy.linspace(0, 6, 100)
plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()
परिणाम:
परिणाम एक बहुपद प्रतिगमन को फिट करने वाले डेटा सेट के मेरे सुझाव का समर्थन कर सकता है, भले ही यह हमें कुछ अजीब परिणाम देगा यदि हम डेटा सेट के बाहर मूल्यों की भविष्यवाणी करने का प्रयास करते हैं। उदाहरण: रेखा इंगित करती है कि एक ग्राहक दुकान में 6 मिनट बिताकर 200 की खरीदारी करेगा। यह संभवतः ओवरफिटिंग का संकेत है।
लेकिन आर-स्क्वेर्ड स्कोर का क्या? आर-स्क्वेर्ड स्कोर इस बात का एक अच्छा संकेतक है कि मेरा डेटा सेट मॉडल को कितनी अच्छी तरह फिट कर रहा है।
R2
R2 याद रखें, जिसे R-वर्ग के रूप में भी जाना जाता है?
यह x अक्ष और y अक्ष के बीच संबंध को मापता है, और मान 0 से 1 तक होता है, जहां 0 का अर्थ कोई संबंध नहीं है, और 1 का अर्थ पूरी तरह से संबंधित है।
स्केलेर मॉड्यूल में एक विधि है जिसे कहा जाता r2_score()
है जो हमें इस संबंध को खोजने में मदद करेगी।
इस मामले में हम एक ग्राहक के दुकान में रहने के मिनटों और उनके द्वारा खर्च किए गए पैसे के बीच के संबंध को मापना चाहेंगे।
उदाहरण
एक बहुपद प्रतिगमन में मेरा प्रशिक्षण डेटा कितनी अच्छी तरह फिट बैठता है?
import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40,
100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y,
4))
r2 = r2_score(train_y, mymodel(train_x))
print(r2)
नोट: परिणाम 0.799 दर्शाता है कि एक ठीक संबंध है।
परीक्षण सेट में लाओ
अब हमने एक मॉडल बनाया है जो ठीक है, कम से कम जब प्रशिक्षण डेटा की बात आती है।
अब हम परीक्षण डेटा के साथ मॉडल का परीक्षण करना चाहते हैं, यह देखने के लिए कि क्या हमें वही परिणाम मिलता है।
उदाहरण
आइए परीक्षण डेटा का उपयोग करते समय R2 स्कोर खोजें:
import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40,
100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y,
4))
r2 = r2_score(test_y, mymodel(test_x))
print(r2)
नोट: परिणाम 0.809 से पता चलता है कि मॉडल परीक्षण सेट में भी फिट बैठता है, और हमें विश्वास है कि हम भविष्य के मूल्यों की भविष्यवाणी करने के लिए मॉडल का उपयोग कर सकते हैं।
मूल्यों की भविष्यवाणी करें
अब जब हमने यह स्थापित कर लिया है कि हमारा मॉडल ठीक है, तो हम नए मूल्यों की भविष्यवाणी करना शुरू कर सकते हैं।
उदाहरण
एक खरीददार ग्राहक कितना पैसा खर्च करेगा, अगर वह 5 मिनट के लिए दुकान में रहता है?
print(mymodel(5))
उदाहरण ने ग्राहक को 22.88 डॉलर खर्च करने की भविष्यवाणी की, जैसा कि आरेख के अनुरूप लगता है: