Термин линейность в алгебре относится к линейной зависимости между двумя или более переменными.
Первое, что такое 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