앞서 포스팅에서 확률과 가능도에 대해 알아보았습니다.마지막 글을 보시면 의미심자한 말이있죠? 가능도(Likelihood) vs 확률(Probability)통계를 공부한다면 확률은 많이 들어보셨을 겁니다. 더욱 깊이 들어가 ML과 같은 여러 알고리즘을 접하면 자연스레 가능도에 대해서도 듣게 되죠. 확률과 가능도. 매우 비슷해 보이지만 해당 의datanovice.tistory.com 오늘은 이렇게 가능도를 최대화 하는 방향으로 파라미터를 추정하는 방법에 대해 알아볼 것입니다. 이를 최대 우도 추정 혹은 최대 가능도 추정법이라고 합니다.짧게 MLE(Maximum Likelihood Estimation)라고 하겠습니다. 📌 MLE 일반적으로 통계 모델의 매개변수를 추정하..
전체 글
공부한 걸 정리하고 공유하며 틀린 부분을 함께 고쳐나가는 블로그입니다.통계를 공부한다면 확률은 많이 들어보셨을 겁니다. 더욱 깊이 들어가 ML과 같은 여러 알고리즘을 접하면 자연스레 가능도에 대해서도 듣게 되죠. 확률과 가능도. 매우 비슷해 보이지만 해당 의미와 방법에 차이가 있습니다. 한번 확인해 봅시다. 📌 확률(Probability) 아주 친숙한 확률입니다. 통계나 수학을 공부하지 않아도, 일반 사람들이라면 확률에 대해 많이 이야기 합니다. 확률은 특정 사건이 발생할 가능성을 수치적으로 표현한 것으로 0과 1사이의 값을 가지게 됩니다. 여기서 0은 사건이 절대 발생하지 않음을 나타내고, 1은 사건이 반드시 발생함을 의미합니다. 또한, 확률은 일반적으로 사전에 알려진 정보 혹은 긴 기간의 관찰 결과에 기반하여 결정됩니다. 동전 던지기를 예로 들어봅시다. 앞면과 뒷면이 ..
부스팅 알고리즘에 대해 공부하시는 분들이라면 CATBoost를 들어보셨을 것 같습니다. CATBoost를 Yandex라는 러시아 검색 엔진 인터넷 기업에서 개발한 그래디언트 부스팅 라이브러리입니다. 범주형 데이터를 다루는데 최적화 되어 있으며, XGBoost와 함께 여러 분야에서 사용하는 모델입니다. 📌 기존 부스팅과의 차이점(Ordered Boosting) 먼저, CATBoost는 Ordered Boosting(순서 부스팅)이라는 기법을 사용하여 데이터의 순서에 따라 모델을 학습시킵니다. 기존의 부스팅 모델들을 모든 훈련 데이터를 대상으로 잔차를 계산하여 트리를 적합해 나간다. CATBoost의 경우 학습 데이터의 일부만을 사용하여 잔차를 계산한 뒤, 해당 결과를 통해 모델을 만들어나간다. 이때 ord..
학회 때문에 pycaret을 쓰는데 이게 말썽이다.. 정말 pycaret은 좋은 물건?인데 항상 호환이 문제다. 전에 mri분석 때문에 사이킷런 버전을 좀 만졌더니 호환이 안되는 문제가 발생. 사이킷런 버전을 바꾸고 이것저것 해봤더니 또 다른 문제 발생... 그냥 가상환경을 사용하기로 결정. 가상환경 만드는 김에 포스팅도 하기로!! 가상환경은 말 그대로 가상의 환경이다. 나의 사례처럼 여러 프로젝트를 진행하는 사람들이 많을 것 같은데, 그때 마다 버전이 다르면 호환이 되지 않아 버전을 그때그때 갈아엎어야 하는 상황이 발생한다. 가상환경을 만들어서 따로 라이브러리를 관리하면 쉽게 제어 가능하다! - 가상환경 in Jupyter notebook 1. 가상환경 설치 먼저 가상 환경을 설치한다. 어렵진 않고, ..
📌 문제 📌 풀이 머리가 아프다... 쉬운 난이도 일텐데 ㅜㅜ 우선 분모랑 분자를 따로 보고, 반복 패턴을 확인하면 각각 아래와 같다. 분자 : [1], [1,2], [1,2,3], [1,2,3,4] ... 분모 : [1], [2,1], [3,2,1], [4,3,2,1] ... 먼저 여기서 힌트를 얻기.. 각 리스트의 길이(M)와 1~M의 요소가 리스트에 들어있다는 점. 분모와 분자는 순서차이일 뿐. 중요한 점은 그럼 입력을 받았을 때 몇 번째 리스트에 있는 지를 보는게 포인트. 위 패턴과 순서도 비교해보면? 분자 : [1], [1,2], [3,2,1], [1,2,3,4] ... 분모 : [1], [2,1], [1,2,3], [4,3,2,1] ... 입력 패턴 : [1], [2,3], [4,5,6], [..
📌 활성화 함수(Activation Functions)?? 머신 러닝과 딥러닝에서, 특히 딥러닝에서 활성화 함수는 신경망의 핵심 요소 중 하나로, 모델이 복잡한 문제를 해결할 수 있도록 합니다. 활성화 함수는 신경망의 각 뉴런에 들어오는 입력 신호의 총합을 출력 신호로 변환하는데 사용합니다. 이러한 함수들은 비선형 함수로 머신러닝의 트리 기반 모델에서 분류를 한 후 나오는 출력값을 확률로 변환하는데에도 사용됩니다. 크게 시그모이드 함수(Sigmoid function), 소프트맥스 함수(Softmax functions), ReLU 함수(Rectified Linear Unit functions), Leakly ReLU를 알아보겠습니다. 이 외에도 많은 활성화 함수가 있으며 분석에 있어서 데이터의 특징이나 분..
📌 문제 📌 풀이 보기엔 어려워 보이는데 결국 나누기 문제이다. 가장 편한 풀이는 아래와 같다 T = int(input()) for t in range(T): C = int(input()) Quarter = C // 25 Dime = (C - 25*Quarter) // 10 Nickel = (C - 25*Quarter - 10*Dime) // 5 Penny = C - 25*Quarter - 10*Dime - 5*Nickel print(Quarter, Dime, Nickel, Penny) 정말 간단히, 금액에서 쿼터로 나눈 몫을 반환, 금액에서 쿼터를 빼고 이를 다임으로 나눈 몫을 반환하고 .... 이를 반복하는 것 근데 아무리 봐도 이런 접근이 아닐 것이란 생각이 들었다... 어처피 같은 걸 반복하는건데..
📌 문제 📌 풀이 거창해서 어려워 보이는데, 굉장히 쉽다. 먼저 base로 0으로 이루어진 100 x 100의 행렬을 만들고 입력받은 행과 열에 각각 +10을 해서 해당 범위 안의 값을 1로 만들면 된다. 마지막으로 모든 행렬의 1값들을 더해주면, 겹치는 부분도 어처피 1이 되니까 넓이를 구할 수 있다. 위 그림 처럼 실제로 0과 1의 세계에서 구현하면 되는것.. base = [[0 for _ in range(100)] for _ in range(100)] score = 0 num = int(input()) for i in range(num): paper = list(map(int, input().split())) for j in range(paper[1], paper[1]+10): for k in ra..
📌 문제 📌 풀이 쉬웠는데 어이없는 실수로 계속 틀린문제... 아무리 봐도 아 뭐가 틀린거야!!! 하다가... 아래 코드에서 길이를 리스트에 더하는걸로 바꿨는데, 원래는 len(max(matrix))를 사용했다. 이때 max는 문자열에서는 사전순으로 정의된다는 점 ㅜㅜㅜ 이걸 까먹고 있었다.. matrix= [] length = [] word = '' for i in range(5): row = input() length.append(len(row)) matrix.append(row) for j in range(max(length)): for k in range(5): if j < length[k]: word += matrix[k][j] print(word)
📌 문제 📌 풀이 map() 함수를 꼭 외워놔야한다. 유용하니..(애초에 숫자는 int로 들어가게 해주세요오) 행과 열의 개수를 받고 빈 리스트 2개 생성. 행의 수만큼 반복하면서 각각 행렬 2개를 받은 후, 각 행의 각 열 단계로 반복하면서 요소들을 더하면 끝 A, B = map(int, input().split()) matrix1, matrix2 = [],[] for i in range(A): row = list(map(int, input().split())) matrix1.append(row) for j in range(A): row = list(map(int, input().split())) matrix2.append(row) for row in range(A): for col in range(B..