전체 글 111

[딥러닝]규제 Regularization

1. Regularization? 딥러닝 모델을 구성하다 보면 우리가 만든 모델이 실제 데이터에 잘 맞지않는 (과적합 or 과소적합) 결과를 마주치게 될것이다. 이이럴때 우리는 '규제' Regularization를 활용해서 이러한 현상을 피할 수 있는데 쉽게 설명하자면 모델에 조건들을 추가해서 어느 선을 넘지 않은 이상한 모델이 만들어 지지 않게 만드는 것이다. 그렇다면 왜 이러한 규제들을 사용할까? 앞에서 설명했듯이 과적합이나 과소적합 (Overfitting, Underfitting)을 피하기 위해서 이다. 과적합과 과소적합을 피하기 위해서 우리가 할 수 있는 방법은 크게 2가지이다. 1. DataSet의 Size를 증가한다 하지만 이러한 방법은 실제 데이터를 수집하는 환경에 제약이 있다. 또한 캐글이..

[딥러닝] 옵티마이저 (Optimizer)

1. Optimizer? 딥러닝 모델을 학습하다 보면 마주치는 장치가 있다. 바로 옵티마이저(Optimizer)이다. 옵티마이저는 무엇일까? 쉽게 말해서 loss function(ex MSE, MAE...)을 사용해서 구한 오차를 이용하여 미분을 하여 기울기를 구하고이를 통해서 어떻게 뉴런 네트워크의 파라미터를 업데이트 할지 결정하는 방법이다. 즉, 옵티마이저를 결정함에 따라서 파라미터의 수정 방법과 학습의 정도가 차이 날 수 있다.물론 명심해야 할 것은 모든 학습에서 최고의 방법은 존재하지 않는다.각 옵티마이저를 사용해보고 비교한 다음 최적의 방법을 선택하는 것이 최선이다. 위 사진은 옵티마이저의 발전단계를 표현한 사진이다. 스텝 방향을 조절하는 방법과 스텝 사이즈를 조절하는 방법으로 크게 나누어진다...

베이즈 정리(Bayes' theorem)

인공지능을 공부하다보면 수많은 모델들이 오늘 정리할 '베이즈 정리'에 기반을 두고 있다는 것을 확인 할 수 있다. 기초적인 조건부 확률을 통해서 모델을 구성하고 실제 세계에 이러한 모델들을 적용하고 있는 것이다 1. 조건부 확률? 고등학교 시절 확률과 통계를 배워본 학생이라면 '조건부 확률'은 한번쯤 들어보았을 것이다. A와 B라는 사건이 있다고 가정해보자 여기서 조건부 확률은 특정한 사건이 발생한 상황에서 또 다른 사건이 발생할 확률로B가 일어난 상황에서 A가 발생할 확률(조건부 확률 예시)이다 이를 수식으로 표현하면 아래와 같다 $P(A|B)$ 또한 이를 정리하면 아래와 같다 $P(A|B) = \frac{P(A \cap B)}{P(B)} $ 이를 활용하면 베이즈 정리를 할 수 있다 2. 베이즈 정리 ..

[Python] 파이썬 데코레이터

데코레이터 decorator 데이터 분석을 하다보면 특히, Pytorch를 활용하다 보면 @[메소드명]을 클래스나 메소드 위에 작성한 예시를 자주보게 될것이다. 이러한 것을 데코레이터 decorator방식이라고 하는데 왜 사용하는 것일까? 바로 메소드를 수정하지 않고 특정 동작을 이용할 수 있기 때문이다. 언제나 그렇듯 간단한 예시로 살펴보자 def Hi(): print('Hi !') >>> Hi() Hi ! Hi !를 출력해주는 간단한 메소드를 작성해 보았다 그런데 우리 서비스는 이용자가 들어올때마다 >>>이용자 이름 >>>Hi ! >>>선택한 서비스 순서로 출력하는 메소드를 구성하고 싶다 이미 우리에게 Hi !를 출력하는 메소드가 있기 때문에 이를 이용해서 새로운 메소드를 작성해 보자 def serv..

[Python] 간단한 class 정리 및 객체지향 프로그래밍

참고자료 : https://wikidocs.net/16071 41. class 정리 - 클래스 기본적인 사용 ## 1. 클래스 개요 - 클래스는 객체의 구조와 행동을 정의합니다. - 객체의 클래스는 초기화를 통해 제어합니다. - 클래스는 복잡한 문제를 다루기 쉽도록 만듭니다. ##… wikidocs.net 1. 객체지향 프로그래밍 C, C++, Java 그리고 Python은 대표적인 객체지향 프로그래밍 (Object-Oriented Programming, OOP) 언어이다 여기서 '객체지향'을 이해할 필요가 있다. 쉽게 설명하자면 하나의 프로그램을 구성하기 위해서 다양한 객체를 이용해서 구성한다는 것이다. 우리가 코딩을 하면서 마주치는 상황중에서 이전에 썼던 for문이나 구조가 뒤에서 다시한번 사용되는 ..

[백준] 1038번 감소하는 수 파이썬(Python) 풀이

1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net [문제] [코드] from itertools import combinations N = int(input()) result = [] for i in range(1, 11): for temp in combinations(range(0, 10), i): temp = list(temp) temp.sort(reverse=True) result.append(int("".join(map(str, temp)))) result.sort() try: print(r..

[백준] 10844번 쉬운 계단 수 파이썬(Python) 풀이

10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net [문제] [코드] N = int(input()) dp = [[0]*10 for _ in range(N+1)] for i in range(1, 10): dp[1][i] = 1 for i in range(2, N+1): for j in range(10): if j ==0: dp[i][j] = dp[i-1][1] elif j == 9: dp[i][j] = dp[i-1][8] else: dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1] print(sum(dp[N]) % 1000000000) [해설] 다이나믹 프로그래밍 문제이다 문제의 핵심 간단하다 아래의 그림을 참..

[백준] 1932번 정수 삼각형 파이썬(Python) 풀이

1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net [문제] [코드] import sys input = sys.stdin.readline n = int(input()) tree = [] for _ in range(n): tree.append([int(f) for f in input().split()]) for i in range(1, n): for j in range(0 , i+1): if j == 0: tree[i][0] += tree[i-1][0] elif j == i: tree[i][j] += tree[i-1][j-1] else: tree[i][j] += max(tree[i-1]..

[Deep한 머신러닝] Boosting 부스팅 3편 (GradientBoost Classification)

1. Boosting 부스팅 핸즈온 머신러닝의 앙상블 (https://eumgill98.tistory.com/20)을 공부하다 보니 다른 앙상블 기법들은 이해하기 쉬웠으나 Boosting 부스팅이 조금 더 자세히 살펴볼 필요가 있다고 생각되어서 (수식적인 이해를 할 식들이 많다) Deep한 머신러닝의첫 번째 주제로 선택하게 되었다 이번 글에서는 Boosting 깊이 있게 살펴 보려고 한다 포괄적인 이해를 원한다면 위의 앙상블 포스팅 링크를 참조해주기를 바란다 1.2.2 Gradient Boosting - Classification 지난시간 우리는 Gradient Boosting, 그중에서도 상대적으로 이해하기 쉬운 Regression에 대해서 알아 보았다 이번시간에는 Classification에 대해서 ..

[백준] 1946번 신입 사원 파이썬(Python) 풀이

1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net [문제] [코드] import sys input = sys.stdin.readline case = int(input()) for _ in range(case): N = int(input()) total = [] for _ in range(N): a, b = map(int, input().split()) total.append((a, b)) total.sort(key=lambda x: x[0]) cnt = 1 check = total[0][1..