본문 바로가기

분류 전체보기

(120)
Eigendecomposition의 기하학적 이해 개요 Eigendecompostion이 뭔지 조금 살펴보고 Eigendecompostion을 기하학적으로 이해해보자. Eigendecompostion? 선형 변환과 함께 이해하자. Linear transformatioin 즉, 선형 변환 A를 고윳값으로 분해를 해볼 수 있다는 것이 바로 eigendecompostion이 의미하는 바이다. 일단 선형 변환의 의미를 잘 알아야 기하학적 해석에서도 이해를 할 수 있을 것 같다. 나는 선형 변환과 change of basis를 제대로 이해하지 못한 상태에서 eigendecompostion에 대해 설명을 들었다. 이해하기가 개인적으로 너무 어려웠다. 사실 지금도 제대로 이해했는지 확실하지는 않다... 가볍게 선형 변환을 짚고 넘어가보자면, Ax=b꼴이 있다고 가정..
인싸가 되고 싶은 민수 문제 제한 사항 문제를 보고 든 생각 이 문제를 풀기 전 별 하나짜리 문제에서도 좀 헤맸다는 느낌이 들었다. 아무래도 문제 풀기를 약 2주만에 해서 그런지 문제를 푸는 감이 없어진 것 같다. 물론 원래도 그렇게 있지는 않았지만. 솔직히 그렇게 어려울 거라고 생각이 들지 않았다. 그냥 구현 문제 같았다. 참 이상하게 약수를 어떻게 구할지 생각이 나지를 않았다. 심지어는 혼자서 "약수가 뭐였지" 이랬던 것 같기도 하다. 왜 이럴까^^... 나의 아이디어 마음에 들지 않았지만 이중 for문을 이용했다. 첫 번째 for는 약수를 찾을 정수를 읽을 용도로 두 번째 for는 각 정수의 약수를 찾을 용도로 그리고 약수는 모두 해시테이블에 담았다. 마지막에는 테이블을 정렬한 다음 출력을 시켰다. 결과 table = d..
약수 찾기 알고리즘 개요 흔히 기본적인 알고리즘이라고 불리는 약수 찾이 알고리즘을 파이썬을 이용해 살펴보자. 나는 이 기본적인 알고리즘조차 구현해내지 못했다...^^ 약수 찾기 알고리즘 바로 본론으로 들어가겠다. 보통 약수 찾기는 이렇게 구현할 수 있다. 나는 생각 못했지만. a = 9 b = 10 for num in range(a, b + 1): for i in range(1, num + 1): if num % i == 0: print(i) 9와 10의 약수를 구해주는 코드이다. 난 왜 이것도 생각 못했지. 예전에 쓴 적은 있는 것 같은데... 더 효율적인 방식으로 들어가보자! a = 9 b = 10 for num in range(a, b + 1): for i in range(1, int(num**(1/2))+1): if..
Gram-schmidt process를 알아보자. 개요 Gram-schmidt가 뭔지 알아보자. 그리고 Gram-schmidt가 진행되는 과정을 살펴보자. 과정을 살펴보고 마지막엔 Gram-schmidt를 통해 얻은 벡터에 대해 알아보자. Gram-schmidt란 뭘까? 우리는 Ax=b의 해가 존재하지 않을 때 Least square로 최적의 솔루션을 얻을 수 있는 수식인 x = (A^TA)^-1A^Tb를 얻었다. 이 과정에서 우리는 무엇을 알 수 있었나? 뭔가 최적의 해를 구하려면 b와 최대한 가까운 지점을 찾아야 한다는 사실을 알았다. 위에서의 x를 이용하면 b = Ax로 최적의 b hat 지점을 찾을 수 있었으니까. 여기까지는 Least square의 내용이었다. Gram-schmidt와 무관하기는 하다. 그래도 Least square에서 gram..
onto와 one-to-one 개요 Ax즉, linear transformation을 할 때, n차원 벡터를 n차원 벡터로 mapping 시키는 혹은 n차원 벡터를 m차원 벡터로 mapping 시키는 함수가 onto 혹은 one-to-one이란 게 무슨 말일까? onto와 one-to-one에 대해 알아보자. Onto란? 왼쪽 domain과 co-domain 그림이 onto로 mapping되는 모습이다. 오른쪽 domain과 co-domain 그림은 onto로 mapping되는 모습이 아니다. onto mapping이라고 표현하려면 공역이 치역과 같아야 한다. 즉, 정의역이 하나의 공역도 남김 없이 모든 공역을 mapping하고 있어야 한다. 그러면 onto로 mapping하고 있다고 말할 수 있다. 바로 예제 문제를 보자. Q. 이..
Orthogonal projection을 위한 점을 찾는 수식 개요 Gram-schmidt process의 부분이라고 할 수 있는 orthogonal projection을 하기 위해서 사영을 할 점을 얻어낼 수 있는 수식에 대해 알아보자. Orthogonal projection을 위한 수식 사영을 위한 수식은 2가지가 있다. 그 2가지의 식은 이렇게 나뉜다. 1. 벡터가 unit 벡터일 때 2. 벡터가 unit 벡터가 아닐 때 unit 벡터일 때는, 수식 표현이 간단하다. 지금까지의 유도 과정 시작해보자. least square를 이용하여 b - Ax를 가장 작은 값으로 만들어주는 x hat을 찾는 게 우리의 시작이었다. 그 x hat을 넣어 A에 통과시켰을 때 얻을 수 있는 값이 바로 b hat이었다. 설명을 쉽게 하기 위해서 그림을 보자. 일단 Col A부터 짚..
cosΘ = np.dot(a, b) = ||a|| * ||b|| * cosΘ Gram-schmidt process를 위한 y hat을 얻어내는 수식을 유도하는 과정에서 cosΘ가 다른 식으로 표현될 수 있다고 말씀을 하셨는데 잘 모르는 부분이었어서 한번 들었을 때에는 흐름을 놓쳐버렸다. 멘토님께 설명을 듣고 보니, 원래 증명이 필요한 식인데 안다고 생각하고 넘어가신 거라고 하셨다. 위 그림은 cosΘ = np.dot(a, b)에서 np.dot(a, b)가 ||a|| * ||b|| * cosΘ와 같음을 증명하는 것이다. 외워두자.
determinant 역행렬이 존재하는지 판단하기 위해서 사용했던 det() 이 det은 determinant의 줄임말이다. determinant는 linear transformation을 위해 A에 입력벡터를 통과시켰을 때 얼마나 변화했는지의 정도를 나타내준다. 크게 두 가지를 보면 된다. 1. 어떠한 input이 matrix A를 통과하게 되면 부피(volume)이 얼마나 변하는가? 2. 어떠한 input이 matrix A를 통과하게 되면 방향(orientation)이 변하는가? 첫째로, 부피 차원에서 살펴보자. [1, 0], [0, 1]이라는 벡터 i, j로 만들어진 그래프가 있다고 하자. 이 벡터를 [[2, 0], [0, 2]]라는 matrix A에 통과시켜보도록 하겠다. 그럼 아래와 같이 벡터가 변하게 된다. mat..
다중집합 개요 다중집합이란 뭘까? 집합은 알겠는데, 앞에 다중이라는 말이 붙으니 순식간에 의미를 파악할 수 없게 됐다. 의미를 한번 알아보자. 도움이 된 블로그 https://velog.io/@munang/개념정리-파이썬-다중-집합 [개념정리] 파이썬 다중 집합의 교집합, 합집합 코테 연습할때마다 잊을만 하면 나오는 다중집합이다. 굳이 몰라도 되지만, 모른채 쓰려면 머지소트를 구현해야 하는 굉장한 번거로움이 있기때문에 알아두는게 좋을 것 같아서 포스팅 한다. 1. velog.io 내가 정리하는 것보다 이곳에서 의미를 확인하는 게 좋을 것 같아서 덩그러니 링크만을 남겨두려고 한다. 워낙에 정리를 잘해두셔서 이해가 쉽게 되었다.
뉴스 클러스터링 문제 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게 되었다. 개발의 방향을 잡기 위해 튜브는 우선 최근 화제가 되고 있는 "카카오 신입 개발자 공채" 관련 기사를 검색해보았다. 카카오 첫 공채..'블라인드' 방식 채용 카카오, 합병 후 첫 공채.. 블라인드 전형으로 개발자 채용 카카오, 블라인드 전형으로 신입 개발자 공채 카카오 공채, 신입 개발자 코딩 능력만 본다 카카오, 신입 공채.. "코딩 실력만 본다" 카카오 "코딩 능력만으로 2018 신입 개발자 뽑는다" 기사의 제목을 기준으로 "블라인..