전체 글 56

[Python] 백준 1157(단어 공부)

백준 1157(단어 공부) https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 코드설명 1 2 3 4 5 6 7 8 9 10 11 12 13 words = input().upper() unique_words = list(set(words)) cnt_list = [] for i in unique_words: cnt = words.count(i) cnt_list.append(cnt) if cnt_list.count(max(cnt_list)) > 1: print('?') else: ma..

Python 2021.08.02

랜덤 포레스트 vs 엑스트라 트리

Random Forest vs Extra Trees 랜덤 포레스트와 엑스트라 트리의 차이점은 부트스트랩 샘플(중복된 훈련 샘플)을 사용하지 않는다는 점에 있습니다. 엑스트라 트리는 결정 트리를 만들어 낼 때 훈련 세트 전체를 사용하기 때문에 Bagging이라고는 할 수 없습니다. 또 랜덤포레스트는 주어진 모든 feature에 대한 정보이득을 계산하고 가장 높은 정보 이득을 가지는 feature를 Split Node로 선택하고 그것들은 전부 비교해서 가장 최선의 feature를 선정합니다. 이 과정을 통해 성능이 좋은 결정트리를 만들 수 있지만 연산량이 많이 든다는 단점이 있습니다. 반면에 엑스트라 트리는 Split을 할 때 무작위로 feature를 선정합니다. feature중에 아무거나 고른 다음 그 f..

AI 2021.08.02

랜덤 포레스트 (Random Forest)

앙상블 학습 랜덤 포레스트 (ensemble learning random forest) Decision Tree의 overfitting되는 약점을 보완해 줄 Random Forest 알고리즘은 여러개의 decision tree를 만들고 각 트리에 데이터를 통과시켜 나온 결과를 종합해 최종 분류하는 알고리즘입니다. 여러개의 트리 중 일부는 overfitting 될 수 있지만 많은 수의 트리를 생성함으로 overfitting이 예측하는데 있어 큰 영향을 끼치지 않게 합니다. 배깅 (Bagging) 배깅은 트리를 만들 때 training set에서 일부 데이터를 활용해 트리를 만드는 것을 말합니다. 예를 들어 training set에 1000개의 데이터가 있다면 100개의 데이터만 임의로 선정해 트리를 만드는..

AI 2021.08.02

[Python] 백준 8958(OX퀴즈)

백준 8958(OX퀴즈) https://www.acmicpc.net/problem/8958 8958번: OX퀴즈 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수 www.acmicpc.net 코드설명 1 2 3 4 5 6 7 8 9 10 11 12 13 n = int(input()) for _ in range(n): quiz = list(input()) score = 0 sum_score = 0 for ox in quiz: if ox == 'o': score = score+1 sum_score = sum_score+score else: sc..

Python 2021.07.29

[Python] 백준 4344(평균은 넘겠지)

백준 4344(평균은 넘겠지) https://www.acmicpc.net/problem/4344 4344번: 평균은 넘겠지 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. www.acmicpc.net 코드설명 1 2 3 4 5 6 7 8 9 10 11 12 13 import numpy as np n = int(input()) for _ in range(n): nums = list(map(int, input().split())) avg = np.mean(nums[1:]) cnt = 0 for score in nums[1:]: if score > avg: cnt += 1 rate = cnt/nums[0]*100 print(round(rate,3..

Python 2021.07.29

AutoML(Grid Search, Random Search)

그리드 서치 (Grid Search) 와 랜덤 서치 (Random Search) 그리드 서치란 관심 있는 매개변수들을 대상으로 가능한 모든 조합을 시도하여 최적의 하이퍼파라미터 값을 튜닝하는 방법으로 python의 scikit-learn에서 제공합니다. 그리드 서치는 모든 조합에 대해 평가를 징행하기 때문에 계산 비용이 매우 비싸고 시간이 오래 걸린다는 단점이 있습니다. 랜덤 서치는 정해진 범위에서 난수를 생성해 최적의 하이퍼파라미터 값을 찾습니다. 하이퍼 파라미터는 상대적 중요도가 서로 다르고 랜덤 서치는 중요한 파라미터를 더 많이 탐색할 수 있기 때문에 최적화하기에 유리합니다. 실제로 논문에서 랜덤 서치가 더 적은 탐색 기회로 더 좋은 결과를 냈다는 지표도 있습니다. 랜덤 서치는 언제든지 탐색을 중단..

AI 2021.07.29

교차 검증(cross validation)

교차 검증(cross validation) 지금까지는 모델을 훈련하고 평가할 때 train set과 test set을 사용했습니다. test set에서 얻은 점수를 보고 일반화 성능을 가늠해 볼 수 있습니다. 그러나 test set을 사용해 자꾸 성능을 확인하다 보면 점점 test set에 맞는 모델을 만들어 가는 것이기 때문에 test set을 계속 사용하는 것은 좋지 않을 수 있습니다. 모델을 만들고 최종적으로 한 번만 사용하는 것이 가장 좋습니다. 이를 해결하고자 교차 검증을 사용해보겠습니다. 교차검증은 train set에서 train set + validation set으로 데이터를 한 번 더 나누어 주고 validation set을 사용해 검증하는 방식입니다. validation set을 사용해..

AI 2021.07.27

[Python] 백준 1110(더하기 사이클)

백준 1110(더하기 사이클) https://www.acmicpc.net/problem/1110 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net 코드설명 1 2 3 4 5 6 7 8 9 10 11 12 input_num = int(input()) num = input_num new_num = 100 cnt = 0 while new_num!=input_num: sum_num = (num//10)+(num%10) new_num = (num%10)*10+(sum_num%10) num = new_num..

Python 2021.07.25

[Python] 백준 5543(상근날드)

백준 5543(상근날드) https://www.acmicpc.net/problem/5543 5543번: 상근날드 입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가 www.acmicpc.net 코드설명 1 2 3 4 5 6 7 8 9 10 11 burger = [] drink = [] for _ in range(3): burger.append(int(input())) for _ in range(2): drink.append(int(input())) cost = min(burger) + min(drink) - 50 print(cost) cs burger와 drink의 가..

Python 2021.07.25