SW Academy

[CNU SW Academy] 26일차(23.01.05)

narlo 2023. 1. 5. 17:45

양희철교수님 - 데이터분석

Regression

Linear Regression

- 독립변수와 종속변수 사이 선형식을 구하고 그 식을 이용하여

  변수값이 주어졌을 때 종속변수의 변수 값을 예측하는 분석방법

- 독립변수의 개수에 따라 단순 선형과 다중 선형으로 구분

 

더 높은 차수 : 정확하게 표현할 수 있지만 그만큼 연산복잡도가 기하급수적으로 증가

새로운 데이터가 들어왔을 때 얼마나 잘 표현할수 있는가가 목적

차수가 높은 것이 항상 좋은 성능을 보이지는 않는다.

 

Machine learning based regression
적절한 트레이닝 셋을 통해 learning algorithm을 만들어내고 이렇게 만들어진 h와 입력 x를 이용해 예측 y을 만들어내는 것

손실함수(loss function)
선형회귀식과 실제 값의 오차
MSE(평균제곱오차)는 머신러닝 모델을 구축할 때 작을수록 원본과의 오차가 적은 것이므로 추측한 값의 정확성이 높다고 할 수 있다

어느 방향으로 학습하느냐
Gradient descent
손실함수를 최소화하는 매개변수를 찾는 방법
손실함수 값이 가장 낮은 지점을 찾아가도록 손실 함수의 기울기를 구해 최적값을 찾아가는 방법
1. 어느 방향으로 w를 바꿔야 하는가(미분에 -를 붙여서 반대방향으로)
2. How Far? -> Learning rate를 조절해줘야 한다. 너무 작으면 많은 학습 횟수가 필요, 가다가 멈추는 경우도 발생 너무 크게 잡으면 최소값에 도달하지 못하고 왔다갔다하거나 발산하는 경우 발생

Batch GD : 전체를 다 봄
MiniBatch GD : 가장 많이 사용, 적절한 크기의 미니배치 이용
SGD : 하나씩 봄

Regression에는 overfitting 문제가 존재한다
Regularization

Overfitting : 모델이 훈련 데이터에 너무 잘 맞지만 일반성이 떨어지는 문제가 발생
Underfitting : 모델이 너무 단순해서 데이터에 포함된 의미를 제대로 학습하지 못하는 문제가 발생

-> 이 문제를 해결하기 위해 Regularization을 사용
복잡도는 유지하되 그 안에서 규제를 함으로써 너무 잘 표현하려고 하는 것을 막는다.

L1 norm regularization : sparsity를 increase하자. (0이 많을수록 좋은)

Squared L2 norm regularization : encourages small weights

좋은 regression 모델이란
1. 데이터의 양
2. 모델의 특징 개수(모델의 크기가 커야함)
3. 적절한 규제

Classification & Clustering
분류문제
x는 똑같지만 y값이 0 아니면 1 처럼 불연속적인 값을 갖는 문제

Logistic regression
계단함수를 가지는 함수로 regression하면 그게 classification이 아닌가?

Conditional Bernoulli distribution(sigmoid)

Softmax regression
Multi-label classification

Cross entropy
Loss function이 다르다. Classification, Logistic regression, Softmax regression에서는 MSE 대신 cross entropy를 사용


코딩테스트 - 개미탈출 2

t = int(input())
for i in range(t):
    n, m = map(int, input().split(" "))
    s = input()
    
    isStart = False
    isEnd = False
    for j in s:
        if isStart and isEnd:
            break
        if j == 'O':
            isEnd = True
        elif j == '@':
            isStart = True
        elif j == '#':
            if isStart or isEnd:
                m -= 1 
        
    if m >= 0:
        print('HAHA!')
    else:
        print('HELP!')

 

타노스 정렬 1, 2

T = int(input())
for i in range(T):
    N = int(input())
    A = list(map(int, input().split(" ")))

    start = N-1
    while True:
        if start < 1:
            break
        if A[start-1] > A[start]:
            A[start-1] //= 2
        else:
            start -= 1

    for j in A:
        print(j, end=' ')
    print()

 

자물쇠와 키

def rotate(array, d):
    n = len(array)
    result = [[0] * n for _ in range(n)]

    if d == 1:
        for r in range(n):
            for c in range(n):
                result[c][n - r - 1] = array[r][c]
    else:
        return array
    return result

def check(new_lock):
    n = len(new_lock) // 3
    for i in range(n, n * 2):
        for j in range(n, n * 2):
            if new_lock[i][j] != 1:
                return False
    return True

def solution(key):
    for i in range(1, n * 2):
        for j in range(1, n * 2):
            for d in range(2):
                r_key = rotate(key, d)
                for x in range(m):
                    for y in range(m):
                        new_lock[i + x][j + y] += r_key[x][y]

                if check(new_lock):
                    print("true")
                    return

                for x in range(m):
                    for y in range(m):
                        new_lock[i + x][j + y] -= r_key[x][y]

    print("false")
    return

m, n = map(int, input().split(" "))
key = []
lock = []
for i in range(m):
    key.append(list(map(int, input().split(" "))))
for i in range(n):
    lock.append(list(map(int, input().split(" "))))

new_lock = [[0] * (n * 3) for _ in range(n * 3)]
for i in range(n):
    for j in range(n):
        new_lock[n + i][n + j] = lock[i][j]

solution(key)

프로그래머스 - 프론트엔드 미니 데브코스

Project Deploy - EC2

어떻게 배포하고 어떻게 다른 사용자들에게 제공하는지

- netlify

- firebase

- vercel

- github pages

 

History API 기반의 SPA를 배포하려면 404에러에 대해 처리할 수 있는 옵션이 필요하다. => npx serve -s

1. 서버에서 직접 호스팅하기

- 가장 난이도가 높음, 자유도도 높다.

- 인프라 지식이 많이 필요

 

2.  클라우드 업체에서 제공하는 서버에서 직접 호스팅하는 방법

- Amazon EC2

- Google Compute Engine

- Azure(MS)

- Naver Cloud Platform

- CAFE24

- IWINV

- ORACLE CLOUD

매달 일정 금액을 지불하고 서버를 빌려오는 서비스

 

집에 놀고 있는 PC나 노트북, 스마트폰 등을 이용해 서버를 사용할 수도 있음

 

AWS S3 + CloudFront 이용하기

- 실제 회사에서 만든 것을 배포할때도 많이 사용하는 방법

- 속도, 안정성 측면에서 좋음

S3는 파일만을 저장하는 서비스(html, css, js, 이미지, 동영상 등 정적인 요소)

 

CloudFront에서 실제 요청을 받고 S3에서 꺼내서 제공하는 방식

404 Page 문제를 cloudfront가 자체로 해결

 

Amazon CloudFront - Amazon S3를 이용해 TodoApp 배포해보기

https://d10hzhcrii9f4n.cloudfront.net/

 

Todo App

 

d10hzhcrii9f4n.cloudfront.net

404 error가 발생했을 때 경로를 index.html로 돌리고, 200 응답코드를 돌려주도록 설정

 

만든 서버를 배포해봤는지 => 어떻게 관리했는지를 면접에서 종종 물어본다.

 

 

'SW Academy' 카테고리의 다른 글

[CNU SW Academy] 12.14 보강  (0) 2023.01.08
[CNU SW Academy] 27일차(23.01.06)  (0) 2023.01.06
[CNU SW Academy] 25일차(23.01.04)  (0) 2023.01.04
[CNU SW Academy] 24일차(23.01.03)  (0) 2023.01.03
[CNU SW Academy] 23일차(23.01.02)  (0) 2023.01.02