Python
 Computer >> コンピューター >  >> プログラミング >> Python

PyTorchを使用した線形回帰?


線形回帰について

単純な線形回帰の基本

  • 2つの連続変数間の関係を理解できます。

  • 例-

    • x=独立変数

      • 重量

    • y=従属変数

      • 高さ

  • y=αx+β

プログラムによる単純な線形回帰を理解しましょう-

#Simple linear regression

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1)
n = 70
x = 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 = colors, alpha = 0.5)
plt.show()

出力

PyTorchを使用した線形回帰?

線形回帰の目的:
  • ポイントとラインの間の距離を最小化する(y =αx+β)

  • 調整

    • 係数:α

    • インターセプト/バイアス:β

PyTorchを使用した線形回帰モデルの構築

係数(α)が2で、切片(β)が1であるとすると、方程式は-

になります。

y =2x+1#線形モデル

データセットの構築
x_values = [i for i in range(11)]
x_values

出力

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#convert to numpy

x_train = np.array(x_values, dtype = np.float32)
x_train.shape

出力

(11,)
#Important: 2D required
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 iteration

y_values = []
for i in x_values:
result = 2*i +1
y_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 required
y_train = y_train.reshape(-1, 1)
y_train.shape

出力

(11, 1)
建築モデル
#import libraries
import torch
import torch.nn as nn
from torch.autograd import Variable

#Create Model class
class LinearRegModel(nn.Module):
def __init__(self, input_size, output_size):
super(LinearRegModel, self).__init__()
self.linear = nn.Linear(input_dim, output_dim)

def forward(self, x):
out = self.linear(x)
return out

input_dim = 1
output_dim = 1

model = LinearRegModel(input_dim, output_dim)

criterion = nn.MSELoss()

learning_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(), lr = learning_rate)

epochs = 100
for epoch in range(epochs):
epoch += 1
#convert numpy array to torch variable
inputs = Variable(torch.from_numpy(x_train))
labels = Variable(torch.from_numpy(y_train))

#Clear gradients w.r.t parameters
optimizer.zero_grad()

#Forward to get output
outputs = model.forward(inputs)

#Calculate Loss
loss = criterion(outputs, labels)

#Getting gradients w.r.t parameters
loss.backward()

#Updating parameters
optimizer.step()

print('epoch {}, loss {}'.format(epoch, loss.data[0]))

出力

epoch 1, loss 276.7417907714844
epoch 2, loss 22.601360321044922
epoch 3, loss 1.8716105222702026
epoch 4, loss 0.18043726682662964
epoch 5, loss 0.04218350350856781
epoch 6, loss 0.03060017339885235
epoch 7, loss 0.02935197949409485
epoch 8, loss 0.02895027957856655
epoch 9, loss 0.028620922937989235
epoch 10, loss 0.02830091118812561
......
......
epoch 94, loss 0.011018744669854641
epoch 95, loss 0.010895680636167526
epoch 96, loss 0.010774039663374424
epoch 97, loss 0.010653747245669365
epoch 98, loss 0.010534750297665596
epoch 99, loss 0.010417098179459572
epoch 100, loss 0.010300817899405956

したがって、損失はエポック1からエポック100に大幅に削減できます。

グラフをプロットする
#Purely inference
predicted = model(Variable(torch.from_numpy(x_train))).data.numpy()
predicted
y_train

#Plot Graph

#Clear figure
plt.clf()

#Get predictions
predicted = model(Variable(torch.from_numpy(x_train))).data.numpy()

#Plot true data
plt.plot(x_train, y_train, 'go', label ='True data', alpha = 0.5)

#Plot predictions
plt.plot(x_train, predicted, '--', label='Predictions', alpha = 0.5)

#Legend and Plot
plt.legend(loc = 'best')
plt.show()
出力

PyTorchを使用した線形回帰?

したがって、グラフから、真の値と予測値はほぼ同じであることがわかります。


  1. PythonでのCX_Freezeの使用

    時々私たちは非常にエキサイティングな何か違うものを作りたいと感じます、そして人間の性質によれば、私たちはいつもそれを共有するのが大好きです。 Pythonもそれらの願いを満たします。 Pythonを使用して、Pythonプログラムを友人と共有したい場合は、それを行うことができます。必要なのは、マシンのプログラムで使用されるすべてのモジュールに同じバージョンのPythonをインストールすることだけです。 まず、 pip install CX_Frezzeを使用してCX_Freezeモジュールをインストールする必要があります コマンドプロンプトのコマンド。 最初のステップは、この割り当て、

  2. Rubyの線形回帰で未来を予測する

    私たちが行う多くの選択は、数値的な関係を中心に展開します。 科学がコレステロールを下げると言っているので、私たちは特定の食品を食べます 給与が上がる可能性が高いため、教育をさらに進めています。 私たちは、最も価値が高くなると信じている近所の家を購入します どうすればこれらの結論に達することができますか?ほとんどの場合、誰かが大量のデータを収集し、それを使用して結論を​​出しました。一般的な手法の1つは、教師あり学習の形式である線形回帰です。教師あり学習の詳細と、それがよく使用される例については、このシリーズのパート1をご覧ください。 線形関係 2つの値の場合—それらをxと呼びます およ