03.09 (목)


Coding Test Study

이진 탐색 알고리즘에 대해서 학습한 후 코드 리뷰를 하는 시간을 가졌다.

이진 탐색은 시간 복잡도가 O(log n)의 알고리즘이며, 이진 탐색 트리(BST)와 유사한 점이 많다.
하지만 이진 탐색 트리가 구조를 저장하고 탐색하는 자료구조라면 이진검색은 정렬된 배열에서 값을 찾아내는 알고리즘 자체를 의미한다.

이진 탐색 문제를 풀고 코드리뷰를 하는 방식으로 진행하였고 추가적으로는 이진 검색 알고리즘 버그에 대해 간단한 tech talk을 진행하였다.

이진 탐색 알고리즘 버그

mid = (left + right) // 2

위의 코드의 경우처럼 보통 left와 right를 더하고 결과를 반으로 나눠 가운데를 계산한다.
수학적으로는 문제가 없지만 컴퓨터의 자료형에는 한계가 있으므로 문제를 일으킬 수 있다.
예를 들어 두 개의 값의 합이 int일 경우 2^31 - 1을 넘어간다면 C, java에서는 의도하지 않는 결과나 오버플로를 발생시킨다.

mid = left + (right - left) // 2

위의 코드의 경우에는 같은 같을 반환하면서 더한 값은 항상 right보다 작으므로 오버플로의 위험이 없다.
파이썬의 경우 임의 정밀도 정수형을 지원하므로 해당 사항이 없지만, 자료형이 엄격한 언어에서는 문제를 발생 시킬 수 있다.

오늘의 회고

AI 수학에 대해 어려움을 겪고있다. 예를 들어 경사하강법의 알고리즘의 계산식 같은 부분이다.
하지만 실제로 개발 환경에서는 직접 계산하는 일이 거의 없고 라이브러리가 지원한다.
계산식을 완벽하게 이해하는 것도 좋지만 실제로 사용해보면서 어떻게 영향을 주는지 공부하는 것도 중요하다고 느꼈고,
AI 수학에서 수학에만 빠져 AI를 놓치는 일이 없도록 잘 조율해야겠다고 생각하게 되는 하루였다.

03.10 (금)


Dacon 준비

팀원들과의 피어세션에서 대회를 함께 하기로하고 우선적으로 Dacon 플랫폼에 익숙해지기 위해 간단한 연습 대회를 선정하였습니다

Link : 와인 품질(Quality) 분류 경진대회

일단 간단하게 데이터 파악을 목표로 하였기 때문에 위해 간단하게 결측값 확인을 한 후에 Sicikit-Learn의 RobustScaler 스케일러를 사용하여 정규화를 진행한 후 별도의 파라미터 수정 없이 RandomForestClassifier 모델을 사용하여 예측 모델을 생성했습니다.

데이터의 결측치 여부만 확인하고 학습을 시켰기 때문에 이상치의 영향이 적은 RobustScaler로 전처리하였습니다.

리더보드에서는 상위 25% 정도의 정확도를 보였지만, 주말 동안 어떻게 해야 발전 시킬 수 있을 지 생각해보아야 할 것 같습니다.

오늘의 회고

AI Math가 중심이 되는 하루였습니다.
경사하강법이나 확률론, 통계확과 같은 개념들도 중요하지만 우선 순위를 매긴다면 벡터와 행렬 개념은 확실히 학습하는 것이 중요하다는 것을 알 수 있었습니다.
예를 들어 합성곱 신경망(CNN)의 합성곱 연산이 행렬연산이기 때문입니다.
주말 동안 벡터와 행렬 개념은 확실히 학습해야겠다고 계획하게 되었습니다.

댓글남기기