Skip to content

Latest commit

 

History

History
386 lines (257 loc) · 43.4 KB

File metadata and controls

386 lines (257 loc) · 43.4 KB

स्कायट-लर्न वापरून रिग्रेशन मॉडेल तयार करा: रिग्रेशन चार प्रकारे

सुरुवातीसाठी टीप

रेखीय रिग्रेशन तेव्हा वापरले जाते जेव्हा आपल्याला संख्यात्मक मूल्य (उदाहरणार्थ, घरांची किंमत, तापमान, किंवा विक्री) भाकित करायचे असते. हे इनपुट वैशिष्ट्ये आणि आउटपुटमधील संबंध सर्वोत्तम रीतीने दर्शविणारी सरळ रेषा शोधून कार्य करते.

या धड्यात, आम्ही पूर्वीच्या अधिक प्रगत रिग्रेशन तंत्रांचा अभ्यास करण्याआधी संकल्पना समजण्यावर भर देतो. Linear vs polynomial regression infographic

इन्फोग्राफिक द्वारे दसनी मडिपल्ली

परिचय

तुम्ही आतापर्यंत रिग्रेशन म्हणजे काय हे कद्दू किमतींच्या डेटासेटवरून पाहिले आहे ज्याचा उपयोग संपूर्ण धड्यात होणार आहे. तुम्ही ते मॅटप्लॉटलिब वापरून दृष्यरूपात देखील पाहिले आहे.

आता तुम्ही ML साठी रिग्रेशनमध्ये खोलवर जाण्यास तयार आहात. चित्ररूपण तुम्हाला डेटाचे अर्थ लावण्यास मदत करते, परंतु मशीन लर्निंगची खरी सामर्थ्य म्हणजे मॉडेल प्रशिक्षित करणे. मॉडेल्स ऐतिहासिक डेटावर प्रशिक्षित केले जातात जेणेकरून डेटा संबंधितता आपोआप पकडता येते, आणि ते नवीन डेटासाठी पूर्वनिर्धारित परिणाम भाकित करू शकतात, ज्याचा मॉडेलने परवानगी घेतलेली माहिती नाही.

या धड्यात, तुम्ही दोन प्रकारच्या रिग्रेशनबद्दल अधिक जाणून घेणार आहात: मूलभूत रेखीय रिग्रेशन आणि बहुपद रिग्रेशन, तसेच या तंत्रज्ञानामागील काही गणित. हे मॉडेल्स आम्हाला विविध इनपुट डेटानुसार कद्दूच्या किंमती भाकित करण्याची परवानगी देतील.

ML for beginners - Understanding Linear Regression

🎥 वरील चित्रावर क्लिक करा रेखीय रिग्रेशनच्या थोडक्यात व्हिडिओसाठी.

या अभ्यासक्रमादरम्यान, आम्ही गणिताची कमीतकमी माहिती धरतो आणि इतर क्षेत्रांतील विद्यार्थ्यांसाठी हा विषय सुलभ करण्याचा प्रयत्न करतो, त्यामुळे समज वाढविण्यासाठी टीपा, 🧮 गणितीय कॉलआउट्स, आकृत्या आणि इतर अध्ययन साधने पाहा.

पूर्वतयारी

आता तुम्हाला कद्दू डेटाच्या रचनेची ओळख झाली पाहिजे ज्याचे आपण अभ्यास करीत आहोत. ती या धड्याच्या notebook.ipynb फाइलमध्ये आधीच लोड केलेली आणि स्वच्छ केलेली आहे. त्या फाईलमध्ये कद्दूची किंमत बसलावर एक नवीन डेटाफ्रेममध्ये दाखवली गेली आहे. ही नोटबुक विज्युअल स्टुडिओ कोडमध्ये कर्नल्समध्ये चालवता यावी याची खात्री करा.

तयारी

स्मरणपत्र म्हणून, तुम्ही हा डेटा हे प्रश्न विचारण्यासाठी लोड करत आहात.

  • कधी कद्दू विकत घेण्याची उत्तम वेळ आहे?
  • एका केज लहान कद्दूचा कसा अंदाजित किंमत येईल?
  • मला हाफ-बुशेल बास्केट्समध्ये खरेदी करायला हवे की 1 1/9 बुशेल बॉक्समध्ये? चला या डेटामध्ये अधिक खोलवर जाऊया.

मागच्या धड्यात तुम्ही पँडास डेटा फ्रेम तयार केला आणि मूळ डेटासेटचा एक भाग भरा, किंमती बुशेल प्रमाणे प्रमाणित केल्या. पण त्यामुळे तुम्हाला अंदाजे 400 डेटापॉईंट्स, केवळ शरद ऋतू महिन्यांसाठी मिळाले.

या धड्याच्या संबंधित नोटबुकमध्ये आधीच लोड केलेला डेटा पहा. डेटा आधीच लोड केलेला आहे आणि सुरुवातीचा स्कॅटरप्लॉट महिन्यांचे डेटा दाखवतो. कदाचित आपण डेटाची स्वच्छता करून अधिक सखोल माहिती मिळवू शकतो.

रेखीय रिग्रेशन रेषा

धडा 1 मध्ये आपण शिकल्याप्रमाणे, रेखीय रिग्रेशनचा उद्देश असा आहे की:

  • चलांचे संबंध दाखवा. चलांमधील संबंध दाखवा.
  • भाकित करा. या रेषेच्या अनुरूप नवीन डेटापॉईंट कुठे येईल ते अचूक भाकित करा.

लिस्ट-स्क्वेअर रिग्रेशन मध्ये अशा प्रकारची रेषा काढणे सामान्य आहे. "लिस्ट-स्क्वेअर" म्हणजे आपल्या मॉडेलचा एकूण त्रुटी कमी करण्याचा प्रक्रियेला म्हणतात. प्रत्येक datapoint साठी आपण त्याच्या प्रत्यक्ष बिंदू आणि रिग्रेशन रेषा यामधील उभ्या अंतराचा (called residuals) मोजमाप करतो.

या अंतरांचे वर्ग काढण्याची दोन मुख्य कारणे आहेत:

  1. परिमाणावर भर, दिशा नोंदपण ठेवण्यास नकार: -5 या त्रुटीस +5 सारखेच मानायचे आहे. वर्ग काढल्याने सर्व मूल्ये धनात्मक होतात.

  2. आउटलायर्सना जबरदस्त गणना: वर्गाने मोठ्या त्रुटींना अधिक वजन दिले जाते, जेणेकरून रेषा दूरच्या बिंदूंच्या जवळ राहते.

नंतर आपण सर्व वर्गबद्ध मूल्ये जमा करतो. आपला उद्देश असा रेषा शोधणे आहे जिथे ही अंतिम बेरीज कमी होईल (सर्वांत लहान मूल्य)—त्यामुळे हे नाव "लिस्ट-स्क्वेअर" आहे.

🧮 मला गणित दाखवा

या रेषेला हे सबसे योग्य रेषा म्हणतात, जे एका समीकरणाने दर्शविले जाते:

Y = a + bX

X हा 'स्पष्टीकरणात्मक चल' आहे. Y हा 'आश्रित चल' आहे. रेषेचा उतार b आहे आणि a हा y-अवरोधक आहे, जो X = 0 असताना Y ची किंमत दर्शवितो.

calculate the slope

प्रथम, उतार b काढा. इन्फोग्राफिक द्वारे जेन लूपर

दुसऱ्या शब्दांत, आपल्या कद्दू डेटाच्या मूळ प्रश्नासंबंधात: "महिन्यानुसार कद्दूच्या किंमतीची भाकीत करा", X ची किंमत असेल आणि Y विक्रीचा महिना असेल.

complete the equation

Y ची किंमत काढा. जर तुम्ही सुमारे $4 देत असाल, तर नक्की एप्रिल असावा! इन्फोग्राफिक द्वारे जेन लूपर

गणिताची रेषा काढण्यासाठी उतार दर्शविला पाहिजे, जो अवरोधकावर अवलंबून असतो, किंवा X = 0 असताना Y कोठे आहे हे दर्शवितो.

तुम्ही Math is Fun वेबसाइटवर या गणनांची पद्धत पाहू शकता. तसेच, हा लिस्ट-स्क्वेअर कॅल्क्युलेटर भेट देऊन संख्या कशी रेषेवर परिणाम करतात ते बघा.

सहसंबंध

अजून एक शब्द समजून घेणे आवश्यक आहे: दिलेल्या X आणि Y चलांमधील सहसंबंध गुणांक. स्कॅटरप्लॉट वापरून तुम्ही जलदपणे हा गुणांक पाहू शकता. जर डेटा बिंदू एका नीटसर रेषेत विखुरलेले असतील तर उच्च सहसंबंध असतो, परंतु जर डेटा बिंदू सर्वत्र विखुरलेले असतील तर सहसंबंध कमी असतो.

योग्य रिग्रेशन मॉडेल असेल ज्याचा सहसंबंध गुणांक (0 पेक्षा जवळजवळ 1) लिस्ट-स्क्वेअर रिग्रेशन पद्धतीने रेषा सह असतो.

✅ या धड्याशी संबंधित नोटबुक चालवा आणि महिन्यांवरून किमतींचा स्कॅटरप्लॉट पहा. कद्दू विक्रीसाठी महिना व किमतींचा संबंध तुमच्या दृश्य समजुतीनुसार उच्च किंवा कमी सहसंबंध दर्शवितो का? जर तुम्ही Month ऐवजी वर्षातील दिवस (उदा. वर्षाच्या सुरुवातीपासून किती दिवस झाले) वापरला तर सहसंबंध बदलतो का?

खालील कोडमध्ये, समजा आपण डेटा स्वच्छ केला आहे, आणणि new_pumpkins नावाचा डेटा फ्रेम मिळवला आहे, जो पुढीलप्रमाणे असेल:

ID Month DayOfYear Variety City Package Low Price High Price Price
70 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 15.0 13.636364
71 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 18.0 16.363636
72 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 18.0 16.363636
73 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 17.0 17.0 15.454545
74 10 281 PIE TYPE BALTIMORE 1 1/9 bushel cartons 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)

आता तुम्हाला रेखीय रिग्रेशनमागील गणित समजले आहे, तर आपण एक रिग्रेशन मॉडेल तयार करूया आणि बघूया की कोणता कद्दू पॅकेज सर्वोत्तम किम्मती असेल याचा अंदाज लावता येतो का. कोणीतरी काही सणासाठी कद्दू विकत घेणार असेल तर हे माहिती त्यांच्या खरेदीचे ऑप्टिमायझेशन करण्यास मदत करेल.

सहसंबंध शोधत आहोत

ML for beginners - Looking for Correlation: The Key to Linear Regression

🎥 वरील चित्रावर क्लिक करा सहसंबंधाचा थोडक्यात व्हिडिओसाठी.

मागील धड्यात तुम्ही कदाचित पाहिले असेल की वेगवेगळ्या महिन्यांमध्ये सरासरी किंमती अशा आहेत:

Average price by month

हे सूचित करते की किमान काही सहसंबंध असावा, आणि आपण रेखीय रिग्रेशनच्या मदतीने MonthPrice किंवा DayOfYearPrice मध्ये संबंध भाकित करण्याचा प्रयत्न करू शकतो. खालील स्कॅटरप्लॉट DayOfYearPrice मधील संबंध दाखवते:

Scatter plot of Price vs. Day of Year

corr फंक्शन वापरून बघूया:

print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))

सहसंबंध 0 पेक्षा कमी आणि फार लहान वाटत आहे, Month करीता -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)

Scatter plot of Price vs. Day of Year

आपल्या तपासणीत असे दिसते की विविध प्रकार किम्मतीवर विक्रीच्या तारखेच्या तुलनेत अधिक प्रभाव टाकतात. हे खालील बार ग्राफवरून दिसू शकते:

new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')

Bar graph of price vs variety

सध्या फक्त एका कद्दू प्रकारावर, 'पाय टाईप', लक्ष केंद्रित करूया, आणि पाहूया की विक्री तारखेचा किम्मतीवर काय परिणाम आहे:

pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price') 

Scatter plot of Price vs. Day of Year

जर आपण Price आणि DayOfYear यांच्यात corr फंक्शनने सहसंबंध काढला तर आपल्याला सुमारे -0.27 मिळेल - म्हणजे एक भाकीत करणारा मॉडेल तयार करणे योग्य आहे.

रेखीय रिग्रेशन मॉडेल प्रशिक्षणापूर्वी आपला डेटा स्वच्छ असणे महत्त्वाचे आहे. रेखीय रिग्रेशनमध्ये रिकाम्या मूल्यांबरोबर चांगले काम होत नाही, त्यामुळे रिकाम्या सेल्स काढून टाकणे योग्य आहे:

pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()

दुसरी पद्धत म्हणजे त्या रिकाम्या सेल्सना संबंधित कॉलममधल्या सरासरी मूल्याने भरून काढणे.

सोपी रेखीय रिग्रेशन

ML for beginners - Linear and Polynomial Regression using Scikit-learn

🎥 वरील चित्रावर क्लिक करा रेखीय आणि बहुपद रिग्रेशनचा थोडक्यात व्हिडिओसाठी.

आपल्या रेखीय रिग्रेशन मॉडेलचे प्रशिक्षण करण्यासाठी आम्ही Scikit-learn लायब्ररी वापरणार आहोत.

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

आम्ही इनपुट मूल्ये (वैशिष्ट्ये) आणि अपेक्षित आउटपुट (लेबल) वेगळ्या numpy array मध्ये विभागतो:

X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']

लक्षात घ्या की इनपुट डेटावर आम्हाला reshape करावे लागले कारण Linear Regression पॅकेजला ते योग्यरित्या समजावे लागते. Linear Regression ला 2D-array इनपुट म्हणून अपेक्षा असते, जिथे प्रत्येक रांगेत इनपुट वैशिष्ट्यांचा वेक्टर असतो. आमच्याकडे फक्त एक इनपुट असल्याने, N×1 आकाराचा array आवश्यक आहे, जिथे N हा डेटासेटचा आकार आहे.

नंतर, आम्हाला डेटा प्रशिक्षण आणि चाचणी संचात विभागावा लागतो, जेणेकरून प्रशिक्षणानंतर आमचे मॉडेल सत्यापित करता येईल:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

शेवटी, Lineal Regression मॉडेलचे प्रशिक्षण फक्त दोन ओळींमध्ये होते. आम्ही LinearRegression ऑब्जेक्ट तयार करतो, आणि fit पद्धतीने आमच्या डेटावर ते बसवतो:

lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)

LinearRegression ऑब्जेक्ट fit केल्यानंतर सर्व रेग्रेशनचे गुणांक समाविष्ट करतो, जे .coef_ प्रॉपर्टीने प्रवेश केले जाऊ शकतात. आपल्या बाबतीत, फक्त एकच गुणांक आहे, जो सुमारे -0.017 असावा. याचा अर्थ किंमती काळाप्रमाणे थोड्या प्रमाणात कमी होतात, पण फार नाही, दररोज सुमारे 2 सेंट. आपण lin_reg.intercept_ वापरून रेग्रेशनचा Y-अक्षाशी छेदन बिंदू देखील प्राप्त करू शकतो - आपल्या बाबतीत हा सुमारे 21 असेल, जो वर्षाच्या सुरुवातीच्या किमतीचा दर्शवितो.

आपल्या मॉडेलची अचूकता पाहण्यासाठी, आपण चाचणी डेटासेटवरील किंमतींची भाकित करू शकतो, आणि नंतर आपल्या भाकिते अपेक्षित किमतींपेक्षा किती जवळ आहेत हे मोजू शकतो. हे सर्व अपेक्षित आणि भाकित मूल्ये यांच्यातील चौकटांत फरकांचे सरासरी (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}%)')

आपला त्रुटी सुमारे 2 पॉइंट्स असून सुमारे ~17% आहे. फार चांगले नाही. मॉडेल क्वालिटीचा आणखी एक निर्देशांक म्हणजे निर्धारण गुणांक, जो अशी प्राप्त केला जाऊ शकतो:

score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)

जर मूल्य 0 असेल, तर त्याचा अर्थ आहे की मॉडेल इनपुट डेटाला लक्षात घेत नाही आणि सर्वात वाईट रेषीय भाकितकार म्हणून काम करते, जे फक्त परिणामाचे सरासरी मूल्य आहे. 1 ची किंमत म्हणजे आपण सर्व अपेक्षित आउटपुट्स परिपूर्णपणे भाकित करू शकतो. आपल्या बाबतीत, हा गुणांक सुमारे 0.06 आहे, जे खूप कमी आहे.

आपण चाचणी डेटा आणि रेग्रेशन रेषा एकत्र प्लॉट करू शकतो ज्यामुळे रेग्रेशन आपल्या बाबतीत कसे कार्य करते हे चांगल्या प्रकारे दिसते:

plt.scatter(X_test,y_test)
plt.plot(X_test,pred)

Linear regression

बहुपदी रेग्रेशन

रेषीय रेग्रेशनचा दुसरा प्रकार आहे बहुपदी रेग्रेशन. कधी कधी व्हेरीएबल्समध्ये रेषीय संबंध असतो - जितका भोपळा खंडफळाने मोठा तितकी किंमत जास्त - पण कधी कधी हे संबंध समतल किंवा सरळ रेषा म्हणून दर्शवू शकत नाहीत.

✅ येथे अधिक काही उदाहरणे आहेत ज्यासाठी बहुपदी रेग्रेशन वापरले जाऊ शकते

दिनांक आणि किंमत यांच्यातील संबंध पुन्हा एकदा पाहा. हा स्कॅटरप्लॉट आवश्यकतेनुसार नेहमी सरळ रेषेत विश्लेषित व्हायला हवा का? किंमती कधी बदलत नाहीत का? अशा केसमध्ये आपण बहुपदी रेग्रेशन वापरून पाहू शकतो.

✅ बहुपदी गणितीय अभिव्यक्ती आहेत ज्यात एक किंवा अधिक चल आणि गुणांक असू शकतात

बहुपदी रेग्रेशन वक्र रेषा तयार करते ज्यामुळे नॉन-रेषीय डेटा चांगल्या प्रकारे फिट होतो. आपल्या बाबतीत, जर आपण DayOfYear चा वर्गमूल इनपुटमध्ये समाविष्ट केला तर आपला डेटा एक पराबॉलिक वक्राद्वारे फिट करू शकतो, ज्याची किमान किंमत वर्षातील एका विशिष्ट बिंदूवर असेल.

स्किट-लर्नमध्ये डेटा प्रोसेसिंगच्या विविध टप्प्यांना एकत्रित करण्यासाठी उपयुक्त pipeline API आहे. एक pipeline म्हणजे estimators ची साखळी आहे. आपल्या बाबतीत, आपण असा pipeline तयार करू जे प्रथम polynomial features जोडेल आणि नंतर रेग्रेशन ट्रेन करेल:

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) वापरून म्हणजे इनपुट डेटामधून सर्व दुसऱ्या क्रमांकाचे बहुपदी जोडले जातील. आपल्या बाबतीत याचा अर्थ फक्त DayOfYear2 असेल, पण दोन इनपुट व्हेरीएबल्स X आणि Y असल्यास, हे X2, XY आणि Y2 जोडेल. आपण इच्छित असल्यास अधिक उच्च क्रमांकाचे बहुपदी देखील वापरू शकतो.

Pipelines मूळ LinearRegression ऑब्जेक्टसारखे वापरू शकतो, म्हणजे आपण pipeline ला fit करू शकतो आणि नंतर predict वापरून भाकित प्राप्त करू शकतो. खाली ग्राफमध्ये चाचणी डेटा आणि अंदाजे वक्र दाखवला आहे:

Polynomial regression

बहुपदी रेग्रेशन वापरून आपल्याला थोडा कमी MSE आणि अधिक निर्धारण गुणांक मिळू शकतो, पण फारसे नाही. आपल्याला इतर वैशिष्ट्ये देखील विचारात घ्यावी लागतील!

आपण पाहू शकता की किमान भोपळ्याच्या किंमती हॅलोवीनच्या सुमारास दिसतात. तुम्ही हे कसे समजावून सांगू शकता?

🎃 अभिनंदन, तुम्ही अशी मॉडेल तयार केली आहे जी पाय भोपळ्याच्या किंमती भाकित करण्यात मदत करू शकते. तुम्ही हेच प्रोसिजर सर्व भोपळ्यांच्या प्रकारांसाठी पुनरावृत्ती करू शकता, पण ते फारच वेळखाऊ होईल. चला आता शिकूया की आपल्या मॉडेलमध्ये भोपळ्याचा प्रकार कसा विचारात घ्यावा!

श्रेणीगत वैशिष्ट्ये

आदर्श जगात, आपल्याला वेगवेगळ्या भोपळा प्रकारांसाठी किंमती सारखे मॉडेल वापरून भाकित करायचे आहे. तथापि, Variety स्तंभ Month सारख्या स्तंभांपेक्षा वेगळा आहे, कारण त्यात संख्या नसलेली (गैर-सांख्यिक) मूल्ये असतात. अशा स्तंभांना categorical म्हणतात.

ML for beginners - Categorical Feature Predictions with Linear Regression

🎥 वरील प्रतिमा क्लिक करा, जेथे श्रेणीगत वैशिष्ट्य वापरण्याचे संक्षिप्त व्हिडिओ अवलोकन आहे.

येथे तुम्ही पाहू शकता की सरासरी किंमत प्रकारावर कशी अवलंबून असते:

Average price by variety

प्रकार विचारात घेण्यासाठी, आपल्याला प्रथम त्याला संख्यात्मक स्वरूपात रूपांतरित करणे आवश्यक आहे, किंवा encode करणे आवश्यक आहे. आपण हे करण्याचे काही मार्ग आहेत:

  • सोप्या संख्यात्मक एनकोडिंग मध्ये वेगवेगळ्या प्रकारांची यादी तयार केली जाते आणि नंतर त्या यादीतील क्रमांकाने प्रकाराचे नाव बदलले जाते. रेषीय रेग्रेशनसाठी हे चांगले नाही, कारण रेषीय रेग्रेशन त्या क्रमांकाचे वास्तविक अंकात्मक मूल्य घेते आणि त्याला गुणांशी जमा करते. आपल्या बाबतीत, मूल्य आणि किंमत यांच्यातील संबंध स्पष्टपणे नॉन-रेखीय आहे, जरी सूचकांची विशिष्ट क्रमशः वितरण केली द्या.
  • One-hot एनकोडिंग मध्ये Variety कॉलम ४ वेगळ्या कॉलमने बदलले जाते, प्रत्येक प्रकारासाठी एक कॉलम. प्रत्येक कॉलममध्ये 1 असेल जर संबंधित ओळ दिलेल्या प्रकाराची असेल, नाहीतर 0. याचा अर्थ रेषीय रेग्रेशनमध्ये पुढील चार गुणांक असतील, प्रत्येक भोपळा प्रकारासाठी, जे त्या प्रकाराच्या "सुरुवातीच्या किंमतीसाठी" जबाबदार आहेत (किंवा "अतिरिक्त किंमत" म्हणावे).

खालील कोडमध्ये आपण variety कसा one-hot encode करू शकतो हे दाखवले आहे:

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

वन-हॉट एनकोडेड variety वापरून रेषीय रेग्रेशन ट्रेन करण्यासाठी, आपल्याला फक्त X आणि y डेटा योग्यरित्या प्रारंभ करावा लागेल:

X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']

उर्वरित कोड तेच आहे जे आपण वर रेषीय रेग्रेशनसाठी वापरले होते. आपण प्रयत्न केले तर पाहाल की MSE सुमारे तसंच आहे, पण निर्धारण गुणांक खूप जास्त (~77%) मिळतो. अधिक अचूक भाकितांसाठी आपल्याला अधिक श्रेणीगत वैशिष्ट्ये आणि संख्यात्मक वैशिष्ट्ये, जसे की 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 2.84 (10%) आणि निर्धारण 0.94 मिळते!

सर्व एकत्र करणे

सर्वात चांगले मॉडेल तयार करण्यासाठी, आपण वरील उदाहरणातील एकत्रित (वन-हॉट एनकोडेड श्रेणीगत + संख्यात्मक) डेटा Polynomial Regression सह वापरू शकतो. आपल्यासाठी पूर्ण कोड खाली दिला आहे:

# प्रशिक्षण डेटा सेट करा
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']

# ट्रेन-टेस्ट विभाजन करा
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# पाइपलाइन सेटअप करा आणि प्रशिक्षण द्या
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)

# चाचणी डेटासाठी निकाल भाकीत करा
pred = pipeline.predict(X_test)

# MSE आणि निर्धारण गणना करा
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)

हे आपल्याला जवळपास 97% चा सर्वोत्तम निर्धारण गुणांक आणि MSE=2.23 (~8% भाकित त्रुटी) देईल.

मॉडेल MSE निर्धारण
DayOfYear Linear 2.77 (17.2%) 0.07
DayOfYear Polynomial 2.73 (17.0%) 0.08
Variety Linear 5.24 (19.7%) 0.77
सर्व वैशिष्ट्ये Linear 2.84 (10.5%) 0.94
सर्व वैशिष्ट्ये Polynomial 2.23 (8.25%) 0.97

🏆 छान काम! तुम्ही एका धड्यात चार रेग्रेशन मॉडेल तयार केली, आणि मॉडेल क्वालिटी 97% पर्यंत सुधारली. अंतिम विभागात, आपण Logistic Regression बद्दल शिकाल ज्याद्वारे वर्ग निश्चित केले जातात.


🚀आव्हान

या नोटबुकमध्ये विविध व्हेरीएबल्ससह प्रयत्न करा आणि correlation आणि मॉडेल अचूकतेत कसा संबंध आहे हे तपासा.

पुनरावलोकन आणि स्वाध्याय

या धड्यात आपण Linear Regression बद्दल शिकले. इतरही महत्त्वाचे Regression प्रकार आहेत. Stepwise, Ridge, Lasso आणि Elasticnet तंत्रे वाचा. अधिक शिकण्यासाठी एक चांगला अभ्यासक्रम म्हणजे Stanford Statistical Learning course

असाइनमेंट

मॉडेल तयार करा


अस्वीकरण: हा दस्तऐवज AI अनुवाद सेवा Co-op Translator चा वापर करून भाषांतरित केला आहे. आम्ही अचूकतेसाठी प्रयत्न करत असलो तरी, कृपया लक्षात घ्या की स्वयंचलित अनुवादांमध्ये चुका किंवा अचूकतेची कमतरता असू शकते. मूळ दस्तऐवज त्याच्या स्थानिक भाषेत अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी अनुवादाची शिफारस केली जाते. या अनुवादाच्या वापरातून उद्भवणाऱ्या कोणत्याही गैरसमजुती किंवा चुकांसाठी आम्ही जबाबदार नाही.