Термин линейность в алгебре относится к линейной зависимости между двумя или более переменными.

Первое, что такое Pytorch: PyTorch - это библиотека машинного обучения с открытым исходным кодом для Python, основанная на Torch, используемая для таких приложений, как обработка естественного языка.

Линейная регрессия - это подход, который пытается найти линейную связь между зависимой переменной и независимой переменной путем минимизации расстояния.

При запуске то, что нам нужно для установки пакетов: conda , pandas, matplotlib, numpy, посетите здесь для установки conda, которая дает нам блокнот jupyter для запуска кода в браузере с минимальной настройкой https : //docs.anaconda.com/anaconda/install/

!conda install numpy pytorch torchvision cpuonly -c pytorch -y
!pip install matplotlib --upgrade --quiet
!pip install jovian --upgrade --quiet
!pip install wheel
!pip install pandas

Теперь импортируйте из него пакеты:

import torch
import jovian
import torchvision
import torch.nn as nn
import pandas as pd
import matplotlib.pyplot as plt
import torch.nn.functional as F
from torchvision.datasets.utils import download_url
from torch.utils.data import DataLoader, TensorDataset, random_split

URL, по которому я собираю данные:

DATASET_URL = "https://hub.jovian.ml/wp-content/uploads/2020/05/insurance.csv"
DATA_FILENAME = "insurance.csv"
download_url(DATASET_URL, '.')

Чтобы прочитать csv с помощью pandas: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html,

Pandas - это инструмент для обработки данных высокого уровня, разработанный Уэсом МакКинни. Он построен на пакете Numpy, а его ключевая структура данных называется DataFrame. DataFrames позволяют хранить табличные данные в строках наблюдений и столбцах переменных и управлять ими.

dataframe_raw = pd.read_csv(DATA_FILENAME)
dataframe_raw.head()

Head дает нам 5 лучших рекордов

Как мы можем найти общее количество строк и столбцов в нашем наборе данных,

DataFrame хранит количество строк и столбцов в виде кортежа (количество строк, количество столбцов). Также их можно распаковать и сохранить в отдельных переменных.

num_rows_column = dataframe.shape
print(num_rows_column) => (1271, 7)

Теперь мы можем подготовить набор данных

def dataframe_to_arrays(dataframe):
    # Make a copy of the original dataframe
    dataframe1 = dataframe.copy(deep=True)
    # Convert non-numeric categorical columns to numbers
    for col in categorical_cols:
        dataframe1[col] =   dataframe1[col].astype('category').cat.codes
    # Extract input & outupts as numpy arrays
    inputs_array = dataframe1[input_cols].to_numpy()
    targets_array = dataframe1[output_cols].to_numpy()
    return inputs_array, targets_array

массив_входов, массив_целей = массив_данных (фрейм данных)
массив_входов, массив_целей

Теперь создаем модель

class InsuranceModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(input_size, output_size)  
        
    def forward(self, xb):
        out = self.linear(xb)                        
        return out
    
    def training_step(self, batch):
        inputs, targets = batch 
        # Generate predictions
        out = self(inputs)          
        # Calcuate loss
        loss = F.l1_loss(out, targets)                
        return loss
    
    def validation_step(self, batch):
        inputs, targets = batch
        # Generate predictions
        out = self(inputs)
        # Calculate loss
        loss = F.l1_loss(out, targets)
        return {'val_loss': loss.detach()}
        
    def validation_epoch_end(self, outputs):
        batch_losses = [x['val_loss'] for x in outputs]
        epoch_loss = torch.stack(batch_losses).mean()   
        return {'val_loss': epoch_loss.item()}
    
    def epoch_end(self, epoch, result, num_epochs):
        # Print result every 20th epoch
        if (epoch+1) % 20 == 0 or epoch == num_epochs-1:
            print("Epoch [{}], val_loss: {:.4f}".format(epoch+1, result['val_loss']))

Мы определили класс линейной регрессии, который наследует torch.nn.Module, который является базовым модулем нейронной сети, содержащим все необходимые функции. Наша модель InsuranceModel содержит только одну простую линейную функцию.

Это может создать экземпляр модели:

model = InsuranceModel()

После этого выбираем оптимизатор и критерии потерь. Здесь мы будем использовать l1_loss в качестве оптимизатора. Кроме того, мы произвольно фиксируем скорость обучения 0,01. Мы можем проверить Среднеквадратичную ошибку: Среднеквадратичная ошибка или среднеквадратичное отклонение оценщика измеряет среднее значение квадратов ошибок.

inputs = torch.from_numpy(inputs_array).type(torch.float32)
targets = torch.from_numpy(targets_array).type(torch.float32)
dataset = TensorDataset(inputs, targets)
val_percent = 0.1
val_size = int(num_rows * val_percent)
train_size = num_rows - val_sizetrain_ds, val_ds = random_split(dataset, [train_size, val_size])

Обучите набор данных, чтобы получить убыток

def evaluate(model, val_loader):
    outputs = [model.validation_step(batch) for batch in val_loader]
    return model.validation_epoch_end(outputs)def fit(epochs, lr, model, train_loader, val_loader, opt_func=torch.optim.SGD):
    history = []
    optimizer = opt_func(model.parameters(), lr)
    for epoch in range(epochs):
        # Training Phase 
        for batch in train_loader:
            loss = model.training_step(batch)
            loss.backward()
            optimizer.step()
            optimizer.zero_grad()
        # Validation phase
        result = evaluate(model, val_loader)
        model.epoch_end(epoch, result, epochs)
        history.append(result)
    return history

Модель прогнозирования убытков

val_loss = evaluate(model, val_loader)
val_loss_list = [vl['val_loss'] for vl in val_loss]

Прогнозирование модели поезда. После завершения всех инициализаций мы можем приступить к обучению нашей модели. Ниже приведен код для обучения модели.

def predict_single(input, target, model):
    inputs = input.unsqueeze(0)
    predictions = model(inputs)           # fill this
    prediction = predictions[0].detach()
    print("Input:", input)
    print("Target:", target)
    print("Prediction:", prediction)input, target = val_ds[0]
predict_single(input, target, model)

Таким образом, мы можем получить прогнозируемый результат. Подробнее см. Https://drive.google.com/drive/folders/0B41Zbb4c8HVyUndGdGdJSXd5d3M https://www.geeksforgeeks.org/ml-linear-regression- vs-logistic-regression /? ref = rp https://www.geeksforgeeks.org/ml-linear-regression/?ref=rp

Вы можете найти мою записную книжку здесь: https://jovian.ml/vish-was/02-insurance-linear-regression

Или вы можете проверить Pytorch bacics ‹---------------- https://medium.com/@vshwsnahar3/tensor-with-pytorch-c43072722665