|
2 weeks ago | |
---|---|---|
.. | ||
solution | 3 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 3 weeks ago | |
notebook.ipynb | 3 weeks ago |
README.md
Scikit-learn प्रयोग गरेर रिग्रेशन मोडेल बनाउने: चार तरिकामा रिग्रेशन
इन्फोग्राफिक: Dasani Madipalli
पाठ अघि क्विज
यो पाठ R मा उपलब्ध छ!
परिचय
अहिलेसम्म तपाईंले रिग्रेशन के हो भनेर बुझ्न कद्दूको मूल्य निर्धारण डेटासेटको नमूना डाटाको साथ अन्वेषण गर्नुभएको छ, जुन हामीले यस पाठभरि प्रयोग गर्नेछौं। तपाईंले यसलाई Matplotlib प्रयोग गरेर दृश्यात्मक रूपमा पनि हेर्नुभएको छ।
अब तपाईं ML को लागि रिग्रेशनमा गहिरो रूपमा जान तयार हुनुहुन्छ। दृश्यात्मकता डाटालाई बुझ्न मद्दत गर्दछ, तर मेसिन लर्निङको वास्तविक शक्ति मोडेल प्रशिक्षण बाट आउँछ। मोडेलहरू ऐतिहासिक डाटामा प्रशिक्षित गरिन्छन् ताकि डाटाको निर्भरता स्वचालित रूपमा समात्न सकियोस्, र तिनीहरूले नयाँ डाटाको लागि परिणामहरू भविष्यवाणी गर्न अनुमति दिन्छन्, जुन मोडेलले पहिले देखेको छैन।
यस पाठमा, तपाईं दुई प्रकारका रिग्रेशनबारे थप जान्नेछ: साधारण रेखीय रिग्रेशन र बहुपद रिग्रेशन, साथै यी प्रविधिहरूको आधारभूत गणित। यी मोडेलहरूले हामीलाई विभिन्न इनपुट डाटाको आधारमा कद्दूको मूल्य भविष्यवाणी गर्न अनुमति दिनेछन्।
🎥 माथिको छवि क्लिक गरेर रेखीय रिग्रेशनको छोटो भिडियो अवलोकन हेर्नुहोस्।
यस पाठ्यक्रमभरि, हामी न्यूनतम गणितीय ज्ञानलाई मान्यता दिन्छौं, र अन्य क्षेत्रबाट आएका विद्यार्थीहरूको लागि यसलाई पहुँचयोग्य बनाउन प्रयास गर्छौं। नोटहरू, 🧮 गणितीय संकेतहरू, रेखाचित्रहरू, र अन्य सिकाइ उपकरणहरूको लागि ध्यान दिनुहोस्।
पूर्वआवश्यकता
तपाईंले अहिले सम्म कद्दूको डाटाको संरचनासँग परिचित हुनुहुन्छ जुन हामी अध्ययन गर्दैछौं। यो पाठको notebook.ipynb फाइलमा पूर्वलोड गरिएको र सफा गरिएको छ। फाइलमा, कद्दूको मूल्य प्रति बुशल नयाँ डाटाफ्रेममा देखाइएको छ। सुनिश्चित गर्नुहोस् कि तपाईं यी नोटबुकहरू Visual Studio Code मा चलाउन सक्नुहुन्छ।
तयारी
याद दिलाउनका लागि, तपाईं यो डाटा लोड गर्दै हुनुहुन्छ ताकि यसबाट प्रश्न सोध्न सकियोस्।
- कद्दू किन्ने उत्तम समय कहिले हो?
- सानो कद्दूको केसको मूल्य कति अपेक्षा गर्न सकिन्छ?
- म तिनीहरूलाई आधा-बुशल टोकरीमा किन्ने कि 1 1/9 बुशल बक्समा? आउनुहोस्, यस डाटामा अझै गहिरो अध्ययन गरौं।
पछिल्लो पाठमा, तपाईंले Pandas डाटाफ्रेम सिर्जना गर्नुभयो र मूल डेटासेटको भागसँग यसलाई भर्नुभयो, बुशलद्वारा मूल्यलाई मानकीकरण गर्दै। तर, त्यसो गर्दा, तपाईंले केवल लगभग 400 डाटाप्वाइन्टहरू मात्र संकलन गर्न सक्नुभयो र केवल शरद ऋतु महिनाहरूको लागि।
यस पाठको साथमा रहेको नोटबुकमा पूर्वलोड गरिएको डाटालाई हेर्नुहोस्। डाटा पूर्वलोड गरिएको छ र प्रारम्भिक स्क्याटरप्लट चार्ट गरिएको छ ताकि महिनाको डाटा देखाउन सकियोस्। सायद हामी यस डाटाको प्रकृतिबारे अझै धेरै विवरण प्राप्त गर्न सक्छौं यदि यसलाई अझ सफा गरियो भने।
रेखीय रिग्रेशन रेखा
Lesson 1 मा तपाईंले सिक्नुभएको अनुसार, रेखीय रिग्रेशन अभ्यासको लक्ष्य एउटा रेखा प्लट गर्न सक्षम हुनु हो:
- चरहरूको सम्बन्ध देखाउनुहोस्। चरहरू बीचको सम्बन्ध देखाउनुहोस्
- भविष्यवाणी गर्नुहोस्। नयाँ डाटाप्वाइन्ट उक्त रेखासँगको सम्बन्धमा कहाँ पर्नेछ भन्ने सटीक भविष्यवाणी गर्नुहोस्।
यो Least-Squares Regression को लागि सामान्य हो कि यस प्रकारको रेखा कोरियोस्। 'least-squares' शब्दको अर्थ हो कि रिग्रेशन रेखाको वरिपरिका सबै डाटाप्वाइन्टहरू वर्गाकार गरिन्छ र त्यसपछि जोडिन्छ। आदर्श रूपमा, अन्तिम योग यथासम्भव सानो हुनुपर्छ, किनभने हामी कम त्रुटिहरू, वा least-squares
चाहन्छौं।
हामी यसो गर्छौं किनभने हामी चाहन्छौं कि हाम्रो सबै डाटाप्वाइन्टहरूको सँग्लित दूरी कम भएको मोडेल बनोस्। हामीले तिनीहरूलाई वर्गाकार गरेर जोड्छौं किनभने हामी यसको परिमाणमा चासो राख्छौं, यसको दिशा होइन।
🧮 गणित देखाउनुहोस्
यो रेखा, जसलाई सबैभन्दा राम्रो फिटको रेखा भनिन्छ, एक समीकरण द्वारा व्यक्त गर्न सकिन्छ:
Y = a + bX
X
'व्याख्यात्मक चर' हो।Y
'निर्भर चर' हो। रेखाको ढलानb
हो रa
y-अवरोध हो, जसलेX = 0
हुँदाY
को मानलाई जनाउँछ।पहिलो, ढलान
b
गणना गर्नुहोस्। इन्फोग्राफिक: Jen Looperअर्को शब्दमा, र हाम्रो कद्दू डाटाको मूल प्रश्नलाई सन्दर्भ गर्दै: "महिनाद्वारा प्रति बुशल कद्दूको मूल्य भविष्यवाणी गर्नुहोस्",
X
मूल्यलाई जनाउँछ रY
बिक्रीको महिनालाई जनाउँछ।
Y
को मान गणना गर्नुहोस्। यदि तपाईं लगभग $4 तिर्दै हुनुहुन्छ भने, यो अप्रिल हुनुपर्छ! इन्फोग्राफिक: Jen Looperरेखाको ढलान गणना गर्ने गणित, जुन अवरोधमा पनि निर्भर गर्दछ,
X = 0
हुँदाY
कहाँ स्थित छ भनेर देखाउनुपर्छ।तपाईंले यी मानहरूको गणना गर्ने विधि Math is Fun वेबसाइटमा अवलोकन गर्न सक्नुहुन्छ। यो Least-squares calculator पनि भ्रमण गर्नुहोस् ताकि संख्याहरूको मानले रेखालाई कसरी प्रभाव पार्छ हेर्न सकियोस्।
सम्बन्ध
अर्को शब्द बुझ्नुपर्ने भनेको Correlation Coefficient हो, जुन दिइएको X र Y चरहरू बीचको सम्बन्ध हो। स्क्याटरप्लट प्रयोग गरेर, तपाईंले यो गुणांकलाई छिटो दृश्यात्मक रूपमा हेर्न सक्नुहुन्छ। यदि प्लटमा डाटाप्वाइन्टहरू एक सुन्दर रेखामा फैलिएका छन् भने उच्च सम्बन्ध हुन्छ, तर यदि प्लटमा डाटाप्वाइन्टहरू X र Y बीचमा जताततै फैलिएका छन् भने कम सम्बन्ध हुन्छ।
एक राम्रो रेखीय रिग्रेशन मोडेल भनेको उच्च (1 नजिक, 0 भन्दा टाढा) सम्बन्ध गुणांक भएको मोडेल हो, Least-Squares Regression विधि प्रयोग गरेर रिग्रेशन रेखासँग।
✅ यस पाठसँगको नोटबुक चलाउनुहोस् र महिना र मूल्यको स्क्याटरप्लट हेर्नुहोस्। कद्दू बिक्रीको लागि महिना र मूल्यको डाटा स्क्याटरप्लटको दृश्यात्मक व्याख्याको आधारमा उच्च वा कम सम्बन्ध देखिन्छ? यदि तपाईं महिना
को सट्टा वर्षको दिन (जस्तै, वर्षको सुरुबाट दिनहरूको संख्या) प्रयोग गर्नुहुन्छ भने के यो परिवर्तन हुन्छ?
तलको कोडमा, हामी मान्छौं कि हामीले डाटालाई सफा गरिसकेका छौं, र new_pumpkins
नामक डाटाफ्रेम प्राप्त गरेका छौं, निम्नानुसार:
ID | महिना | वर्षको दिन | प्रकार | सहर | प्याकेज | न्यूनतम मूल्य | उच्चतम मूल्य | मूल्य |
---|---|---|---|---|---|---|---|---|
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 बुशल कार्टन | 15.0 | 15.0 | 13.636364 |
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 बुशल कार्टन | 18.0 | 18.0 | 16.363636 |
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 बुशल कार्टन | 18.0 | 18.0 | 16.363636 |
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 बुशल कार्टन | 17.0 | 17.0 | 15.454545 |
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 बुशल कार्टन | 15.0 | 15.0 | 13.636364 |
डाटा सफा गर्ने कोड
notebook.ipynb
मा उपलब्ध छ। हामीले अघिल्लो पाठमा जस्तै सफा गर्ने चरणहरू पूरा गरेका छौं, र निम्न अभिव्यक्तिको प्रयोग गरेरDayOfYear
स्तम्भ गणना गरेका छौं:
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
अब तपाईंले रेखीय रिग्रेशनको गणितको समझ पाउनुभएको छ, आउनुहोस् रिग्रेशन मोडेल बनाऔं ताकि हामी भविष्यवाणी गर्न सकौं कि कद्दूको प्याकेजको मूल्य कुनमा सबैभन्दा राम्रो हुनेछ। छुट्टीको कद्दूको बगैंचाको लागि कद्दू किन्ने कोहीले कद्दू प्याकेजहरूको खरीदलाई अनुकूलित गर्न यो जानकारी चाहन सक्छ।
सम्बन्ध खोज्दै
🎥 माथिको छवि क्लिक गरेर सम्बन्धको छोटो भिडियो अवलोकन हेर्नुहोस्।
पछिल्लो पाठबाट तपाईंले सम्भवतः देख्नुभएको छ कि विभिन्न महिनाहरूको लागि औसत मूल्य यस प्रकार देखिन्छ:

यसले सुझाव दिन्छ कि केही सम्बन्ध हुनुपर्छ, र हामी महिना
र मूल्य
बीचको सम्बन्ध भविष्यवाणी गर्न, वा DayOfYear
र मूल्य
बीचको सम्बन्ध भविष्यवाणी गर्न रेखीय रिग्रेशन मोडेल प्रशिक्षण गर्न प्रयास गर्न सक्छौं। यहाँ स्क्याटरप्लट छ जसले पछिल्लो सम्बन्ध देखाउँछ:

आउनुहोस् corr
फंक्शन प्रयोग गरेर सम्बन्ध छ कि छैन हेर्नुहोस्:
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
यो देखिन्छ कि सम्बन्ध धेरै सानो छ, महिना
द्वारा -0.15 र DayOfMonth
द्वारा -0.17, तर अर्को महत्त्वपूर्ण सम्बन्ध हुन सक्छ। यस्तो देखिन्छ कि विभिन्न कद्दू प्रकारहरूका लागि मूल्यका विभिन्न समूहहरू छन्। यस परिकल्पनालाई पुष्टि गर्न, आउनुहोस् प्रत्येक कद्दूको प्रकारलाई फरक रंगमा प्लट गरौं। scatter
प्लटिङ फंक्शनमा ax
प्यारामिटर पास गरेर हामी सबै बिन्दुहरू एउटै ग्राफमा प्लट गर्न सक्छौं:
ax=None
colors = ['red','blue','green','yellow']
for i,var in enumerate(new_pumpkins['Variety'].unique()):
df = new_pumpkins[new_pumpkins['Variety']==var]
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)

हाम्रो अनुसन्धानले सुझाव दिन्छ कि प्रकारले वास्तविक बिक्री मितिभन्दा समग्र मूल्यमा बढी प्रभाव पार्छ। हामीले यो बार ग्राफको साथ देख्न सक्छौं:
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')

आउनुहोस् अहिलेको लागि केवल एक कद्दू प्रकार, 'pie type', मा ध्यान केन्द्रित गरौं, र हेर्नुहोस् कि मितिले मूल्यमा कस्तो प्रभाव पार्छ:
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')

यदि हामी अहिले corr
फंक्शन प्रयोग गरेर मूल्य
र DayOfYear
बीचको सम्बन्ध गणना गर्छौं भने, हामीले -0.27
जस्तो केही प्राप्त गर्नेछौं - जसको अर्थ भविष्यवाणी मोडेल प्रशिक्षण गर्नुको अर्थ छ।
रेखीय रिग्रेशन मोडेल प्रशिक्षण गर्नु अघि, यो सुनिश्चित गर्नु महत्त्वपूर्ण छ कि हाम्रो डाटा सफा छ। रेखीय रिग्रेशनले हराएका मानहरूसँग राम्रोसँग काम गर्दैन, त्यसैले सबै खाली कोषहरू हटाउनु उचित हुन्छ:
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
अर्को दृष्टिकोण भनेको ती खाली मानहरूलाई सम्बन्धित स्तम्भबाट औसत मानहरूद्वारा भरिदिनु हो।
साधारण रेखीय रिग्रेशन
🎥 माथिको छवि क्लिक गरेर रेखीय र बहुपद रिग्रेशनको छोटो भिडियो अवलोकन हेर्नुहोस्।
हाम्रो रेखीय रिग्रेशन मोडेल प्रशिक्षण गर्न, हामी Scikit-learn लाइब्रेरी प्रयोग गर्नेछौं।
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
हामी इनपुट मानहरू (features) र अपेक्षित आउटपुट (label) लाई अलग-अलग numpy arrays मा विभाजन गरेर सुरु गर्छौं:
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
ध्यान दिनुहोस् कि हामीले इनपुट डाटामा
reshape
प्रदर्शन गर्नुपर्यो ताकि रेखीय रिग्रेशन प्याकेजले यसलाई सही रूपमा बुझ्न सकियोस्। रेखीय रिग्रेशनले इनपुटको रूपमा 2D-array अपेक्षा गर्दछ, जहाँ array को प्रत्येक पङ्क्ति इनपुट features को भेक्टरसँग मेल खान्छ। हाम्रो केसमा, किनभने हामीसँग केवल एक इनपुट छ - हामीलाई आकार N×1 भएको array चाहिन्छ, जहाँ N डेटासेटको आकार हो।
त्यसपछि, हामीले डाटालाई ट्रेन र टेस्ट डेटासेटहरूमा विभाजन गर्नुपर्छ ताकि प्रशिक्षण पछि हाम्रो मोडेललाई मान्य गर्न सकियोस्:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
अन्ततः, वास्तविक रेखीय रिग्रेशन मोडेल प्रशिक्षण गर्न केवल दुई लाइन कोड लाग्छ। हामी LinearRegression
वस्तु परिभाषित गर्छौं, र fit
विधि प्रयोग गरेर यसलाई हाम्रो डाटामा फिट गर्छौं:
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
LinearRegression
वस्तु fit
-पश्चात् रिग्रेशनका सबै गुणांकहरू समावेश गर्दछ, जसलाई .coef_
प्रोपर्टी प्रयोग गरेर पहुँच गर्न सकिन्छ। हाम्रो केसमा, केवल एक गुणांक छ, जुन -0.017
को वरिपरि हुनुपर्छ। यसको अर्थ मूल्य समयसँगै थोरै घट्छ, तर धेरै होइन, लगभग प्रति दिन 2 सेन्ट। हामी रिग्रेशनको Y-अक्षसँगको intersection बिन्दु lin_reg.intercept_
प्रयोग गरेर पनि पहुँच गर्न सक्छौं - यो हाम्रो केसमा लगभग 21
हुनेछ, जसले वर्षको सुरुमा मूल्यलाई संकेत गर्दछ।
हाम्रो मोडेल कति सटीक छ हेर्नको लागि, हामी टेस्ट डेटासेटमा मूल्यहरू भविष्यवाणी गर्न सक्छौं, र त्यसपछि हाम्रो भविष्यवाणीहरू अपेक्षित मानहरूसँग कति नजिक छन् मापन गर्न सक्छौं। यो mean square error (MSE) मेट्रिक्स प्रयोग गरेर गर्न सकिन्छ, जुन अपेक्षित र भविष्यवाणी गरिएको मानहरू बीचको सबै वर्गाकार भिन्नताहरूको औसत हो।
pred = lin_reg.predict(X_test)
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
हाम्रो त्रुटि लगभग २ बिन्दुमा देखिन्छ, जुन ~१७% हो। यो धेरै राम्रो छैन। मोडेलको गुणस्तरको अर्को सूचक निर्धारण गुणांक हो, जसलाई यसरी प्राप्त गर्न सकिन्छ:
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
यदि मान ० छ भने यसको अर्थ मोडेलले इनपुट डाटालाई ध्यानमा राख्दैन, र सबभन्दा खराब रेखीय भविष्यवक्ता को रूपमा कार्य गर्दछ, जुन परिणामको औसत मान मात्र हो। मान १ भएमा हामी सबै अपेक्षित नतिजाहरू पूर्ण रूपमा भविष्यवाणी गर्न सक्छौं। हाम्रो अवस्थामा, निर्धारण गुणांक लगभग ०.०६ छ, जुन धेरै कम छ।
हामी परीक्षण डाटा र रिग्रेसन रेखालाई सँगै प्लट गर्न सक्छौं ताकि हाम्रो अवस्थामा रिग्रेसन कसरी काम गर्छ भन्ने राम्रोसँग देख्न सकियोस्:
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)

बहुपद रिग्रेसन
रेखीय रिग्रेसनको अर्को प्रकार बहुपद रिग्रेसन हो। कहिलेकाहीँ चरहरू बीच रेखीय सम्बन्ध हुन्छ - जस्तै, कद्दूको मात्रा ठूलो भएमा मूल्य उच्च हुन्छ - तर कहिलेकाहीँ यी सम्बन्धहरू समतल वा सीधा रेखाको रूपमा प्लट गर्न सकिँदैन।
✅ यहाँ केही थप उदाहरणहरू छन् जसले बहुपद रिग्रेसन प्रयोग गर्न सक्ने डाटा देखाउँछ।
मिति र मूल्य बीचको सम्बन्धलाई फेरि हेर्नुहोस्। के यो स्क्याटरप्लट सीधा रेखाले विश्लेषण गर्नुपर्छ जस्तो देखिन्छ? के मूल्यहरू परिवर्तन हुन सक्दैनन्? यस अवस्थामा, तपाईं बहुपद रिग्रेसन प्रयास गर्न सक्नुहुन्छ।
✅ बहुपदहरू गणितीय अभिव्यक्तिहरू हुन् जसमा एक वा बढी चर र गुणांकहरू समावेश हुन सक्छन्।
बहुपद रिग्रेसनले गैर-रेखीय डाटालाई राम्रोसँग फिट गर्न घुमाउरो रेखा सिर्जना गर्छ। हाम्रो अवस्थामा, यदि हामी इनपुट डाटामा वर्गाकार DayOfYear
चर समावेश गर्छौं भने, हामी हाम्रो डाटालाई पराबोलिक वक्रसँग फिट गर्न सक्षम हुनेछौं, जसको न्यूनतम वर्षको निश्चित बिन्दुमा हुनेछ।
Scikit-learn ले विभिन्न डाटा प्रशोधन चरणहरूलाई सँगै संयोजन गर्न उपयोगी पाइपलाइन API समावेश गर्दछ। पाइपलाइन अनुमानकर्ताहरू को श्रृंखला हो। हाम्रो अवस्थामा, हामी एक पाइपलाइन सिर्जना गर्नेछौं जसले पहिलो बहुपद विशेषताहरूलाई हाम्रो मोडेलमा थप्छ, र त्यसपछि रिग्रेसनलाई प्रशिक्षण दिन्छ:
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
PolynomialFeatures(2)
प्रयोग गर्दा यसको अर्थ इनपुट डाटाबाट सबै दोस्रो-डिग्री बहुपदहरू समावेश हुनेछ। हाम्रो अवस्थामा यसको मतलब केवल DayOfYear
2 हुनेछ, तर दुई इनपुट चरहरू X र Y दिँदा, यसले X2, XY र Y2 थप्नेछ। यदि हामी चाहन्छौं भने उच्च डिग्री बहुपदहरू पनि प्रयोग गर्न सक्छौं।
पाइपलाइनहरू मूल LinearRegression
वस्तुको जस्तै तरिकामा प्रयोग गर्न सकिन्छ, अर्थात् हामी पाइपलाइनलाई fit
गर्न सक्छौं, र त्यसपछि भविष्यवाणी परिणामहरू प्राप्त गर्न predict
प्रयोग गर्न सक्छौं। यहाँ परीक्षण डाटा र अनुमान वक्र देखाउने ग्राफ छ:

बहुपद रिग्रेसन प्रयोग गर्दा, हामी थोरै कम MSE र उच्च निर्धारण प्राप्त गर्न सक्छौं, तर धेरै महत्त्वपूर्ण रूपमा होइन। हामीले अन्य विशेषताहरूलाई ध्यानमा राख्न आवश्यक छ!
तपाईं देख्न सक्नुहुन्छ कि न्यूनतम कद्दू मूल्यहरू हलोविनको वरिपरि देखिन्छ। तपाईं यसलाई कसरी व्याख्या गर्न सक्नुहुन्छ?
🎃 बधाई छ, तपाईंले पाई कद्दूको मूल्य भविष्यवाणी गर्न मद्दत गर्ने मोडेल सिर्जना गर्नुभयो। तपाईं सम्भवतः सबै कद्दू प्रकारहरूको लागि समान प्रक्रिया दोहोर्याउन सक्नुहुन्छ, तर त्यो थकाउने हुनेछ। अब सिकौं कि कसरी हाम्रो मोडेलमा कद्दूको विविधतालाई ध्यानमा राख्ने!
श्रेणीगत विशेषताहरू
आदर्श संसारमा, हामी एउटै मोडेल प्रयोग गरेर विभिन्न कद्दू प्रकारहरूको मूल्य भविष्यवाणी गर्न सक्षम हुन चाहन्छौं। तर, Variety
स्तम्भ Month
जस्ता स्तम्भहरू भन्दा केही फरक छ, किनभने यसमा गैर-संख्यात्मक मानहरू समावेश छन्। यस्ता स्तम्भहरूलाई श्रेणीगत भनिन्छ।
🎥 माथिको छवि क्लिक गरेर श्रेणीगत विशेषताहरू प्रयोग गर्ने छोटो भिडियो अवलोकन हेर्नुहोस्।
यहाँ तपाईं देख्न सक्नुहुन्छ कि औसत मूल्य विविधतामा कसरी निर्भर गर्दछ:

विविधतालाई ध्यानमा राख्न, हामीले पहिले यसलाई संख्यात्मक रूपमा रूपान्तरण गर्न आवश्यक छ, वा एन्कोड गर्नुपर्छ। यसलाई गर्नका लागि केही तरिकाहरू छन्:
- साधारण संख्यात्मक एन्कोडिङ ले विभिन्न विविधताहरूको तालिका बनाउनेछ, र त्यसपछि विविधताको नामलाई उक्त तालिकामा सूचकांकले प्रतिस्थापन गर्नेछ। यो रेखीय रिग्रेसनको लागि उत्तम विचार होइन, किनभने रेखीय रिग्रेसनले सूचकांकको वास्तविक संख्यात्मक मानलाई लिन्छ, र केही गुणांकले गुणा गरेर नतिजामा थप्छ। हाम्रो अवस्थामा, सूचकांक नम्बर र मूल्य बीचको सम्बन्ध स्पष्ट रूपमा गैर-रेखीय छ, भले पनि हामी सुनिश्चित गर्छौं कि सूचकांकहरू कुनै विशिष्ट तरिकामा क्रमबद्ध छन्।
- वन-हट एन्कोडिङ ले
Variety
स्तम्भलाई ४ विभिन्न स्तम्भहरूले प्रतिस्थापन गर्नेछ, प्रत्येक विविधताको लागि एउटा। प्रत्येक स्तम्भले१
समावेश गर्नेछ यदि सम्बन्धित पङ्क्ति दिइएको विविधताको हो भने, र०
अन्यथा। यसको मतलब रेखीय रिग्रेसनमा चार गुणांकहरू हुनेछन्, प्रत्येक कद्दू विविधताको लागि, उक्त विशेष विविधताको लागि "सुरुवात मूल्य" (वा "थप मूल्य") को जिम्मेवार।
तलको कोडले विविधतालाई वन-हट एन्कोड कसरी गर्न सकिन्छ देखाउँछ:
pd.get_dummies(new_pumpkins['Variety'])
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE |
---|---|---|---|---|
70 | 0 | 0 | 0 | 1 |
71 | 0 | 0 | 0 | 1 |
... | ... | ... | ... | ... |
1738 | 0 | 1 | 0 | 0 |
1739 | 0 | 1 | 0 | 0 |
1740 | 0 | 1 | 0 | 0 |
1741 | 0 | 1 | 0 | 0 |
1742 | 0 | 1 | 0 | 0 |
वन-हट एन्कोड गरिएको विविधतालाई इनपुटको रूपमा प्रयोग गरेर रेखीय रिग्रेसन प्रशिक्षण गर्न, हामीले केवल X
र y
डाटालाई सही रूपमा आरम्भ गर्न आवश्यक छ:
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
बाकी कोड माथि प्रयोग गरिएको रेखीय रिग्रेसन प्रशिक्षण गर्न प्रयोग गरिएको कोड जस्तै छ। यदि तपाईंले प्रयास गर्नुभयो भने, तपाईं देख्नुहुनेछ कि औसत वर्ग त्रुटि लगभग उस्तै छ, तर हामीले धेरै उच्च निर्धारण गुणांक (~७७%) प्राप्त गर्छौं। अझ सही भविष्यवाणीहरू प्राप्त गर्न, हामीले थप श्रेणीगत विशेषताहरू, साथै संख्यात्मक विशेषताहरू, जस्तै Month
वा DayOfYear
लाई ध्यानमा राख्न सक्छौं। विशेषताहरूको ठूलो एरे प्राप्त गर्न, हामी join
प्रयोग गर्न सक्छौं:
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
यहाँ हामीले City
र Package
प्रकारलाई पनि ध्यानमा राखेका छौं, जसले हामीलाई MSE २.८४ (१०%) र निर्धारण ०.९४ दिन्छ!
सबैलाई सँगै राख्दै
सर्वश्रेष्ठ मोडेल बनाउन, हामी माथिको उदाहरणबाट संयुक्त (वन-हट एन्कोड गरिएको श्रेणीगत + संख्यात्मक) डाटा बहुपद रिग्रेसनसँग प्रयोग गर्न सक्छौं। यहाँ तपाईंको सुविधाको लागि पूर्ण कोड छ:
# set up training data
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# make train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# setup and train the pipeline
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# predict results for test data
pred = pipeline.predict(X_test)
# calculate MSE and determination
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
यसले हामीलाई लगभग ९७% निर्धारण गुणांक र MSE=२.२३ (~८% भविष्यवाणी त्रुटि) दिन्छ।
मोडेल | MSE | निर्धारण |
---|---|---|
DayOfYear रेखीय |
२.७७ (१७.२%) | ०.०७ |
DayOfYear बहुपद |
२.७३ (१७.०%) | ०.०८ |
Variety रेखीय |
५.२४ (१९.७%) | ०.७७ |
सबै विशेषताहरू रेखीय | २.८४ (१०.५%) | ०.९४ |
सबै विशेषताहरू बहुपद | २.२३ (८.२५%) | ०.९७ |
🏆 राम्रो काम! तपाईंले एक पाठमा चार रिग्रेसन मोडेलहरू सिर्जना गर्नुभयो, र मोडेलको गुणस्तरलाई ९७% सम्म सुधार गर्नुभयो। रिग्रेसनको अन्तिम खण्डमा, तपाईंले श्रेणी निर्धारण गर्न लॉजिस्टिक रिग्रेसनको बारेमा सिक्नुहुनेछ।
🚀 चुनौती
यस नोटबुकमा विभिन्न चरहरू परीक्षण गर्नुहोस् ताकि सम्बन्ध मोडेलको सटीकतासँग कसरी मेल खान्छ हेर्न सकियोस्।
पाठ-पछिको क्विज
समीक्षा र आत्म अध्ययन
यस पाठमा हामीले रेखीय रिग्रेसनको बारेमा सिक्यौं। रिग्रेसनका अन्य महत्त्वपूर्ण प्रकारहरू छन्। Stepwise, Ridge, Lasso र Elasticnet प्रविधिहरूको बारेमा पढ्नुहोस्। थप जान्नको लागि राम्रो पाठ्यक्रम स्ट्यानफोर्ड स्ट्याटिस्टिकल लर्निङ कोर्स हो।
असाइनमेन्ट
अस्वीकरण:
यो दस्तावेज़ AI अनुवाद सेवा Co-op Translator प्रयोग गरी अनुवाद गरिएको हो। हामी यथासम्भव सटीकता सुनिश्चित गर्न प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटि वा अशुद्धता हुन सक्छ। यसको मूल भाषामा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्त्वपूर्ण जानकारीका लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याका लागि हामी जिम्मेवार हुने छैनौं।