PyTorch를 사용한 Logistic 컴백

PyTorch를 사용한 Logistic 컴백

2022-06-04 last update

5 minutes reading Data Science
Logistic 회귀는 유명한 기계 학습 알고리즘으로 이원 분류 문제를 해결하는 데 쓰인다.이것은 선형 회귀 알고리즘에서 유래한 것으로 이 알고리즘은 연속적인 출력 변수를 가지고 논리 회귀는 심지어 그것을 약간 수정하여 두 개 이상의 종류를 분류할 수 있다.우리는 논리 회귀의 개념과 그것이 어떻게 PyTorch에서 실현되었는지 연구할 것이다. PyTorch는 기계 학습과 깊이 학습 모델을 만드는 데 유용한 라이브러리이다.

논리 회귀의 개념


Logistic 회귀는 이원 분류 알고리즘의 일종이다.이것은 결정 알고리즘의 하나로 두 종류 사이에 경계를 만드는 것을 의미한다.이것은 선형 회귀 문제를 확장하여 출력에 활성화 함수를 사용하여 1과 0 사이로 제한합니다.따라서 이것은 2진 분류 문제에 사용된다.논리 회귀 그림은 다음 그림과 같습니다.

우리는 이 그림이 0과 1 사이로 제한된 것을 볼 수 있다.정적 선형 회귀는 모든 실수 형식의 목표 값을 제시할 수 있지만 S형 함수의 존재로logistic 회귀는 그렇지 않다.Logistic 회귀는 최대 유사 추정(MLE) 개념을 기반으로 합니다.가장 큰 가능성은 간단하게 한 조가 정한 매개 변수로 확률 분포를 얻은 다음에 "내 데이터가 이 확률 분포에서 생성된다면 이 데이터를 볼 가능성이 얼마나 됩니까?"라고 묻는 것이다.그것의 작업 원리는 모든 데이터 점의 가능성을 계산한 후에 모든 가능성을 곱하는 것이다.실제로 우리는 확률의 대수를 더한다.
만약 우리가 기계 학습 모델을 구축해야 한다면, 모든 변수 데이터는 x1*w1+x2*w2가 될 것이다. 이와 같이 함수를 활성화할 때, 0과 1 사이의 값을 생성할 것이다.만약 우리가 0.50을 결정 요소나 한도값으로 삼는다면.그리고 0.5보다 큰 결과는 1로 간주되고 그 값보다 작은 결과는 0으로 간주됩니다.
2개 이상의 종류에 대해 우리는 한 쌍의 모든 방법을 사용한다.One Vs All은 One Vs Rest라고도 하며 다중 태그와 다중 ML 분류 과정입니다.그것은 먼저 모든 종류를 위해 이원 분류기를 훈련시킨 다음에 모든 분류기를 모든 입력과 일치시켜 입력이 어느 종류에 속하는지 확인한다.만약 문제가 n개의 클래스가 있다면, One Vs All은 훈련 데이터 집합을 n개의 이진 분류 문제로 변환합니다.
logistic 회귀와 관련된 손실 함수는 이원 교차 엔트로피로 정보 이득의 반향이다.이것을 로그 분실이라고도 부른다.손실 함수는 다음과 같습니다.

손실 함수는 무엇입니까?


손실 함수는 우리가 줄이고자 하는 수학 도량이다.우리는 우리가 무엇을 원하는지 정확하게 예측할 수 있는 모델을 구축하고 모델의 성능을 평가하는 방법은 손실을 보는 것이다. 왜냐하면 우리는 모델의 출력과 우리가 무엇을 얻어야 하는지 알고 있기 때문이다.우리는 이런 손실을 이용하여 모델의 매개 변수를 상응하여 조정하여 우리의 모델을 훈련하고 개선할 수 있다.손실 함수는 알고리즘 유형에 따라 다르다.선형 회귀에 있어 균형 오차와 평균 절대 오차는 자주 사용하는 손실 함수이고 교차 엔트로피는 분류 문제에 적용된다.

활성화 기능은 무엇입니까?


활성화 함수는 입력 변수를 수정하여 새 출력을 제공하는 수학 함수일 뿐입니다.이것은 통상적으로 기계 학습에서 완성된 것으로 데이터를 표준화하거나 입력을 일정한 한도 내에 제한한다.자주 사용하는 동작 함수는sigmoid, 정류선형 단원(ReLU), Tan(h) 등이 있다.

Pytork란 무엇입니까?


Pytorch는 Torch와 함께 사용할 수 있는 인기 딥러닝 대안입니다.페이스북의 인공지능 부서에서 만든 것이지만 다른 옵션과 유사하게 사용할 수 있다.이것은 각종 모델을 개발하는 데 사용되지만 자연언어처리(NLP) 용례에서 가장 광범위하게 응용된다.만약에 아주 적은 자원으로 모델을 구축하고 사용자의 우호적이고 사용하기 쉬우며 경량급의 라이브러리를 만들고 싶다면,Pytorch는 항상 좋은 선택입니다.이런 느낌도 자연스러워 이 과정을 완성하는 데 도움이 된다.상술한 이유로 우리는 PyTorch를 사용하여 우리의 모델을 실현할 것이다.그러나 이 알고리즘은 다른 대안 (예: Tensorflow) 과 동일합니다.

PyTorch에서 Logistic 컴백 실시


우리는 다음 절차를 사용하여 우리의 모델을 실현할 것이다.
  • 매개 변수가 있는 신경 네트워크를 만듭니다. 매개 변수는 매번 교체된 후에 업데이트됩니다.
  • 입력된 데이터를 반복합니다.
  • 입력은 전방향 전파를 사용하여 네트워크를 통과합니다.
  • 우리는 현재 2진 교차 엔트로피를 사용하여 손실을 계산한다.
  • 대가 함수를 최소화하기 위해 우리는 사다리 하강법으로 파라미터를 업데이트합니다.
  • 업데이트된 매개변수를 사용하여 동일한 단계를 다시 수행합니다.
  • NIST 데이터 세트 숫자를 분류합니다.이것은 매우 환영받는 심도 있는 학습 문제로 초보자에게 가르친다.
    우선 필요한 라이브러리와 모듈을 가져옵니다.
    import torch
    
    from torch.autograd import Variable
    
    import torchvision.transforms as transforms
    
    import torchvision.datasets as dsets
    다음 단계는 데이터 집합을 가져오는 것입니다.
    train = dsets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=False)
    
    test = dsets.MNIST(root='./data', train=False, transform=transforms.ToTensor())
    데이터 로더를 사용하여 데이터 저장 가능
    train_loader = torch.utils.data.DataLoader(dataset=train, batch_size=batch_size, shuffle=True)
    
    test_loader = torch.utils.data.DataLoader(dataset=test, batch_size=batch_size, shuffle=False)
    모델을 정의합니다.
    class Model(torch.nn.Module):
    
    def __init__(self, inp, out):
    
    super(Model, self).__init__()
    
    self.linear = torch.nn.Linear(inp, out)
    
    def forward(self, x):
    
    outputs = self.linear(x)
    
    return outputs
    슈퍼 파라미터, 최적화기 및 손실을 지정합니다.
    batch = 50
    
    n_iters = 1500
    
    epochs = n_iters / (len(train_dataset) / batch)
    
    inp = 784
    
    out = 10
    
    alpha = 0.001
    
    model = LogisticRegression(inp, out)
    
    loss = torch.nn.CrossEntropyLoss()
    
    optimizer = torch.optim.SGD(model.parameters(), lr=alpha)
    마지막으로 모형에 대해 훈련을 진행하다.
    itr = 0
    
    for epoch in range(int(epochs)):
    
    for i, (images, labels) in enumerate(train_loader):
    
    images = Variable(images.view(-1, 28 * 28))
    
    labels = Variable(labels)
    
    optimizer.zero_grad()
    
    outputs = model(images)
    
    lossFunc = loss(outputs, labels)
    
    lossFunc.backward()
    
    optimizer.step()
    
    itr+=1
    
    if itr%500==0:
    
    correct = 0
    
    total = 0
    
    for images, labels in test_loader:
    
    images = Variable(images.view(-1, 28*28))
    
    outputs = model(images)
    
    _, predicted = torch.max(outputs.data, 1)
    
    total+= labels.size(0)
    
    correct+= (predicted == labels).sum()
    
    accuracy = 100 * correct/total
    
    print("Iteration is {}. Loss is {}. Accuracy is {}.".format(itr, lossFunc.item(), accuracy))

    결론


    PyTorch를 사용하여 Logistic 회귀와 그 실현을 설명했습니다. PyTorch는 딥러닝 모델을 개발하는 데 사용되는 유행 라이브러리입니다.우리는 이미지 매개 변수에 따라 숫자를 식별하는 MNIST 데이터 집합 분류 문제를 실현했다.