Ekuacioni matematikisht linear i një ndryshoreje mund të përkufizohet si më poshtë.
y = mx+c
Për ta lidhur atë me shembullin e botës reale, le të supozojmë se kompania e vogël dëshiron të parashikojë numrin e shisheve të ujit të pijshëm 25 L të nevojshëm në muaj bazuar në temperaturën mesatare të muajit. Ata duan të krijojnë një model midis numrit të shisheve dhe temperaturës mesatare të muajit [Për ta mbajtur të thjeshtë, le të supozojmë se numri i punonjësve është fiks]. Kompania dëshiron të përdorë të dhënat e saj historike për të ndërtuar modelin që mund t'i ndihmojë ata ta arrijnë atë.
Shembull i grupit të të dhënave.
Month's Avg Temperature Number of Bottles consumed in month 35 4 37 8
Le të përpiqemi ta lidhim atë me ekuacion.
Temperature is x and y is bottles now we have to find m and c. so that when we put x in below equation it should help with prediction of number of bottles y = mx+c
Në këtë artikull do të fokusohem në zbatimin duke përdorur Pytorch për detaje matematikore, ju lutemi referojuni postimit tim të mëparshëm. https://www.linkedin.com/feed/update/urn:li:activity:6648611139209003008/ ose https://medium.com/@nirmal1067/linear-regression-from-scratch-in-java-dc7aead2ba04
Kushtet paraprake: konfigurimi i mjedisit PyTorch duhet të jetë aty.
Krijo tensorin e hyrjes X , daljen aktuale Y duke përdorur fragmentin e mëposhtëm. Këtu E përfaqëson gabimin për ta bërë daljen jolineare
X = torch.linspace(0,50,50).reshape(-1,1) torch.manual_seed(50) E = torch.randint(-8,9,(50,1),dtype=torch.float) Y = 5*X + 8 + E
Më poshtë është kodi për Regresionin Linear. Indentizimi po ngatërrohet gjatë kopjimit të kodit.
class LinearRegressionModel(nn.Module): #optimizer def __init__(self,in_Feature=1,out_Feature=1,learningRate=0.001): super().__init__() self.linear= nn.Linear(in_Feature,out_Feature) self.optimizer = torch.optim.SGD(self.parameters(), lr = 0.001) self.criterion = nn.MSELoss() def predict(self,inputs): predict = self.linear(inputs) return predict def printClassValues(self): for name, param in self.named_parameters(): print(name, '\t', param.item()) def trainModel(self,X,y,epochs=50): #epochs = 100 losses = [] for i in range(epochs): i+=1 y_pred = self.predict(X) loss = self.criterion(y_pred, y) losses.append(loss) print(f'epoch: {i:2} loss: {loss.item():10.8f} weight: {self.linear.weight.item():10.8f} \ bias: {self.linear.bias.item():10.8f}') self.optimizer.zero_grad() loss.backward() self.optimizer.step()
Për të testuar kodin përdorni më poshtë. Kjo do të inicializojë Modelin tuaj me paragjykim dhe peshë të paracaktuar.
lgModel = LinearRegressionModel(1,1)
lgModel.printClassValues()
Më poshtë rreshti i kodit do të trajnojë modelin tuaj.
lgModel.trainModel(X,Y)
Gjatë stërvitjes ju mbani sy se si pesha dhe paragjykimi po ndryshojnë. Më poshtë është regjistri i trajnimit për Modelin tim.
epoch: 1 loss: 24908.03906250 weight: -0.24355280 bias: 0.74757409 epoch: 2 loss: 11715.38183594 weight: 8.90680599 bias: 1.02333665 epoch: 3 loss: 5522.17285156 weight: 2.63715982 bias: 0.84102964 epoch: 4 loss: 2614.80932617 weight: 6.93266582 bias: 0.97256958 epoch: 5 loss: 1249.96154785 weight: 3.98936534 bias: 0.88907117 epoch: 6 loss: 609.23602295 weight: 6.00579691 bias: 0.95290476 epoch: 7 loss: 308.44332886 weight: 4.62402439 bias: 0.91578913 epoch: 8 loss: 167.23051453 weight: 5.57056141 bias: 0.94783634 epoch: 9 loss: 100.93089294 weight: 4.92183685 bias: 0.93249261 epoch: 10 loss: 69.79891968 weight: 5.36611938 bias: 0.94961578 epoch: 11 loss: 55.17618179 weight: 5.06151915 bias: 0.94449055 epoch: 12 loss: 48.30352783 weight: 5.27002287 bias: 0.95460564 epoch: 13 loss: 45.06904221 weight: 5.12696838 bias: 0.95427531 epoch: 14 loss: 43.54253006 weight: 5.22478771 bias: 0.96109837 epoch: 15 loss: 42.81778717 weight: 5.15756941 bias: 0.96301681 epoch: 16 loss: 42.46943665 weight: 5.20342922 bias: 0.96829230 epoch: 17 loss: 42.29781723 weight: 5.17181253 bias: 0.97126424 epoch: 18 loss: 42.20915604 weight: 5.19327927 bias: 0.97581106 epoch: 19 loss: 42.15945053 weight: 5.17837572 bias: 0.97927547 epoch: 20 loss: 42.12804413 weight: 5.18839121 bias: 0.98347813 epoch: 21 loss: 42.10523224 weight: 5.18133450 bias: 0.98717159 epoch: 22 loss: 42.08646393 weight: 5.18597412 bias: 0.99121052 epoch: 23 loss: 42.06961060 weight: 5.18260002 bias: 0.99500942 epoch: 24 loss: 42.05364609 weight: 5.18471670 bias: 0.99896938 epoch: 25 loss: 42.03814316 weight: 5.18307209 bias: 1.00281560 epoch: 26 loss: 42.02280426 weight: 5.18400383 bias: 1.00673640 epoch: 27 loss: 42.00761795 weight: 5.18317080 bias: 1.01060271 epoch: 28 loss: 41.99245834 weight: 5.18354702 bias: 1.01450300 epoch: 29 loss: 41.97735596 weight: 5.18309498 bias: 1.01837671 epoch: 30 loss: 41.96227264 weight: 5.18321037 bias: 1.02226520 epoch: 31 loss: 41.94721603 weight: 5.18293667 bias: 1.02614009 epoch: 32 loss: 41.93214798 weight: 5.18293047 bias: 1.03002095 epoch: 33 loss: 41.91712952 weight: 5.18274069 bias: 1.03389442 epoch: 34 loss: 41.90211487 weight: 5.18267632 bias: 1.03776956 epoch: 35 loss: 41.88711548 weight: 5.18252659 bias: 1.04164016 epoch: 36 loss: 41.87213898 weight: 5.18243551 bias: 1.04551053 epoch: 37 loss: 41.85715485 weight: 5.18230391 bias: 1.04937768 epoch: 38 loss: 41.84220123 weight: 5.18220091 bias: 1.05324376 epoch: 39 loss: 41.82727432 weight: 5.18207836 bias: 1.05710721 epoch: 40 loss: 41.81235123 weight: 5.18196821 bias: 1.06096911 epoch: 41 loss: 41.79744339 weight: 5.18185043 bias: 1.06482875 epoch: 42 loss: 41.78254318 weight: 5.18173838 bias: 1.06868660 epoch: 43 loss: 41.76766968 weight: 5.18162251 bias: 1.07254231 epoch: 44 loss: 41.75281525 weight: 5.18150854 bias: 1.07639611 epoch: 45 loss: 41.73797607 weight: 5.18139362 bias: 1.08024788 epoch: 46 loss: 41.72313309 weight: 5.18127966 bias: 1.08409774 epoch: 47 loss: 41.70832825 weight: 5.18116522 bias: 1.08794558 epoch: 48 loss: 41.69353104 weight: 5.18105078 bias: 1.09179139 epoch: 49 loss: 41.67874527 weight: 5.18093681 bias: 1.09563529 epoch: 50 loss: 41.66396332 weight: 5.18082237 bias: 1.09947717
Pasi Modeli të trajnohet, përdorni fragmentin e mëposhtëm për të gjeneruar daljen e parashikuar "O" dhe krahasoni atë grafikisht duke përdorur matplotlib
O = X * lgModel.linear.peshë + lgModel.linear.bias
plt.scatter(X.detach().numpy(),Y.numpy())
plt.plot(X.shkëputje ().numpy(),O.shkëputje().numpy(),'r')
Më poshtë është grafiku për Modelin tim.