रैखिक प्रतिगमन के बारे में
सरल रैखिक प्रतिगमन मूल बातें
-
हमें दो सतत चर के बीच संबंध को समझने की अनुमति देता है।
-
उदाहरण -
-
x =स्वतंत्र चर
-
वजन
-
-
y =आश्रित चर
-
ऊंचाई
-
-
-
वाई =αx + β
आइए एक प्रोग्राम के माध्यम से सरल रेखीय प्रतिगमन को समझते हैं -
#सिंपल लीनियर रिग्रेशनआयात numpy as npimport matplotlib.pyplot as pltnp.random.seed(1)n =70x =np.random.randn(n)y =x * np.random.randn(n)colors =np. random.rand(n)plt.plot(np.unique(x), np.poly1d(np.polyfit(x, y, 1))(np.unique(x)))plt.scatter(x, y, c =रंग, अल्फा =0.5)plt.show()
आउटपुट
रैखिक प्रतिगमन का उद्देश्य:
-
बिंदुओं और रेखा के बीच की दूरी को कम करने के लिए (y =αx + β)
-
एडजस्ट करना
-
गुणांक:α
-
अवरोधन/पूर्वाग्रह:β
-
PyTorch के साथ एक लीनियर रिग्रेशन मॉडल बनाना
मान लें कि हमारा गुणांक (α) 2 है और अवरोधन (β) 1 है तो हमारा समीकरण बन जाएगा -
y =2x +1 #रैखिक मॉडल
डेटासेट बनाना
x_values =[i for i इन रेंज(11)]x_values
आउटपुट
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#कन्वर्ट टू numpy
x_train =np.array(x_values, dtype =np.float32)x_train.shape
आउटपुट
(11,)
#महत्वपूर्ण:2D आवश्यकx_train =x_train.reshape(-1, 1)x_train.shape
आउटपुट
(11, 1)
y_values =[2*i + 1 for i in x_values]y_values
आउटपुट
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
#list iterationy_values =[] for i in x_values:result =2*i +1y_values.append(result)y_values
आउटपुट
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
y_train =np.array(y_values, dtype =np.float32)y_train.shape
आउटपुट
(11,)
#2D आवश्यक_ट्रेन =y_train.reshape(-1, 1)y_train.shape
आउटपुट
(11, 1)
बिल्डिंग मॉडल
#आयात पुस्तकालयआयात मशालआयात मशाल.एनएन के रूप में मशाल से nn.autograd आयात चर# बनाएँ मॉडल वर्ग वर्ग LinearRegModel(nn.Module):def __init__(self, input_size, output_size):super(LinearRegModel, self).__init__()self. रैखिक =nn.Linear (input_dim, output_dim) def आगे (स्वयं, x):बाहर =स्वयं। रैखिक (x) वापसी outinput_dim =1output_dim =1model =LinearRegModel (input_dim, output_dim) मानदंड =nn.MSELoss (learning_rate =0.01 अनुकूलक) =टॉर्च। ऑप्टिम। एसजीडी (मॉडल। पैरामीटर्स (), एलआर =लर्निंग_रेट) युग =100 फॉर एपोच इन रेंज (युग):एपोच + =1 # सुन्न सरणी को टार्च वेरिएबल इनपुट में बदलें =वेरिएबल (टॉर्च। चर(torch.from_numpy(y_train))#साफ़ ग्रेडिएंट w.r.t पैरामीटरOptimizer.zero_grad()# आउटपुट आउटपुट प्राप्त करने के लिए फ़ॉरवर्ड करें =मॉडल. फ़ॉरवर्ड (इनपुट्स) # लॉसलॉस की गणना करें =मानदंड (आउटपुट, लेबल) # ग्रेडिएंट प्राप्त करना w.r.t पैरामीटरलॉस.बैकवर्ड ()# पैरामीटर्स को अपडेट कर रहा है।आउटपुट
युग 1, हानि 276.7417907714844युग 2, हानि 22.601360321044922 युग 3, हानि 1.8716105222702026युग 4, हानि 0.18043726682662964 युग 5, हानि 0.04218350350856781 युग 6, हानि 0.03060017339885235 युग 7, 998 हानि 0.065279,2749409 हानि 0.029351992,86524 , हानि 0.02830091118812561 ......... युग 94, हानि 0.011018744669854641 युग 95, हानि 0.010895680636167526 युग 96, हानि 0.010774039663374424 युग 97, हानि 0.010653747245669365 युग 98, हानि 0.010534750297665594059तो हम युग 1 से युग 100 तक नुकसान को काफी कम कर सकते हैं।
ग्राफ़ प्लॉट करें
#पूरी तरह से अनुमान लगाया गया =मॉडल (चर (torch.from_numpy(x_train)))। )).data.numpy()#Plot true dataplt.plot(x_train, y_train, 'go', label ='True data', alpha =0.5)#Plot Predictionsplt.plot(x_train, भविष्यवाणी, '--', लेबल ='भविष्यवाणियां', अल्फ़ा =0.5)#किंवदंती और Plotplt.legend(loc ='best')plt.show()आउटपुट
तो हम ग्राफ से कर सकते हैं- हमारा सही और अनुमानित मूल्य लगभग समान है।