CS🏅 14

[직접 구현하는 머신러닝] K- 평균 (K-Means)

오늘은 K-평균 알고리즘 (K-Means)를 Python으로 직접 구현해 보겠다 필요한 라이브러리는 Numpy 하나이다 K-Means 알고리즘의 과정을 순서대로 나타내면 아래와 같다 1. 데이터 공간에서 임의의 k개 중심점을 초기화 한다 (랜덤 선택), 여기서 중심은 클래스 또는 범주에 해당한다. 즉, 이 중심점을 기준으로 해당 데이터의 클래스가 결정되는 것이다. 이때, k는 하이퍼 파라미터로 직접 지정해주어야한다. 2. 각 데이터 관측치와 각 중심 사이의 유클리드 거리를 계산한다. - 모든 데이터와 각 중심점 사이의 각각 거리를 구하는 것 3. 각 데이터 관측치를 가장 가까운 중심의 그룹에 할당한다 - 즉, k=3이라고 가정을 한다면 1점과 data들의 거리 2점과 data들의 거리, 3점과 데이터의 ..

[궁금한건 못참아]라이브러리 vs. 직접구현

피어슨 상관계수와 코사인 유사도에 글을 정리하던 중 이미 해당 공식들은 numpy나 scipy에 존재했다 피어슨 상관계수? [머신러닝+선형대수] 상관관계와 코사인 유사도 통계와 머신러닝에서 가장 근본적이면서 중요한 분석 방법은 상관관계를 분석하는 것이다 상관관계를 살펴보기 위해서는 상관계수를 구하는 방법이 있다 상관계수는 -1 부터 +1까지의 범위로 eumgill98.tistory.com 이때 갑자기 의문점이 하나 생겼다 과연 직접 구현함 함수와 라이브러리에 있는 함수의 속도 차이가 존재할까? 오늘은 이런 의문점을 해결하기 위해서 간단한 실험을 진행해 보았다 실험 설계 오늘 비교할 공식 재료 : `피어슨 상관계수` 비교할 대상 (1) 직접 구현한 피어슨 상관계수 함수 (2) Numpy의 np.corrco..

[궁금한건 못참아] 다양한 이미지 포맷.. 보이지 않는 너머에 대해

대학시절 미디어 커뮤니케이션학을 전공하면서 카메라의 발명은 예술작품의 `아우라`의 소멸을 만들어 냈다는 내용을 공부한 적이있다. 카메라만 있으면 누구나 원하는 자신의 얼굴 또는 지인의 얼굴 그리고 배경사진까지 하나의 예술작품으로 간직할 수 있는 시대가 만들어 진것이다. 최근 디지털로 넘어오면서 이러한 `아우라`는 완전히 사라진 것 처럼 보인다 물론 NFT 같이 디지털에서 `아우라`를 소생시키려는 시도들은 있지만 이제 누구나 원한다면 인터넷 상에서 자신이 원하는 예술작품, 사진, 그림 등을 Ctrl + C 와 Ctrl + V 만으로 소유할 수 있는 시대가 되었다. 그러나 우리는 이러한 행위에서 무심결에 넘어가는 부분이 있다. 바로 이미지 파일 포맷이다 `JPG, PNG, ...` 등 다양한 방식의 이미지 ..

[Einops] 차원관리의 새로운 차원

Deeplearning code를 작성하다 보면 항상 tensor의 차원을 관리하는 것에서 어려움을 마주친다. 물론 Pytorch나 Numpy를 활용해서 차원을 관리할 수 있지만 문제는 `직관적`이지 않다는 것이다. 실제로 4차원 이상부터는 사람이 상상하기 힘들다.. 이렇게 어려운 차원관리를 효율적으로 할 수 있는 라이브러리가 있다. 바로 `Einops`이다. 이 라이브러리를 처음 발견한 코드는 ViT를 Pytorch로 구현한 코드였다 처음 이 코드를 보았을때, 기존 Python의 문법에서 본적이 없는 하이퍼 파라미터의 형태를 갖고 있어서 조금은 혼란스러웠다. out = torch.matmul(attn, v) out = rearrange(out, 'b h n d -> b n (h d)') return s..

GIL

요즘 프로그램을 코딩하면서 가장 먼저 우선시하려고 노력하는 부분이 내가 작성한 프로그램의 처리속도가 과연 효율적인지? 또는 더 빠른 방법으로 처리할 수는 없는지 이다. 이러한 고민을 하다보면 Multi - Processing or Multi-threading을 마주 칠수 밖에 없고 CS 지식이 부족하면 조금 이해하기 어렵기 때문에 추가적인 공부를 하고 있다 공부를 하다보면 파이썬은 GIL이 있다라는 말을 자주 마주치게 되었다 따라서 이번 시간에는 이러한 GIL에 대해서 정리하고 다양한 정리를 해보려고 한다 1. 그래서 GIL이 뭔데? 우선 GIL을 이해하기전에 Python의 인터프리터를 이해 해야한다. Python의 인터프리터란, 인터프리터 언어를 생각하면 쉽게 이해할 수 있는데 내가 작성한 파이썬 코드..

Cloud

목차 1. 우리는 왜 Cloud 시스템을 사용하는가? 2. Cloud 시스템의 종류와 제품들 3. Google Cloud 서비스 실습 1. 우리는 왜 Cloud 시스템을 사용하는가? 최근 Cloud 서비스가 범람하고 있다 간단한 예시로는 구글 Cloud 서비스나 AWS의 서비스등이 있다 대부분 서비스를 프로덕트하는 회사에서는 클라우드 시스템을 적극적으로 활용한다 왜 일까? 간단하게 말하자면 서비스 프로덕 과정에서 개발 및 배포에 필요한 설비 비용을 절감할 수 있고, 트랙픽에 따라서 유동성 있게 설비를 활용할 수 있기 때문이다 예를 들어서 우리가 인공지능 서비스를 하나 만들었다고 가정해보자 이제 이 놀라운 서비스를 사용자들에게 배포할 시기가 왔다 어떻게 배포해야할까? 가장 간단하게 생각할 수 있는 접근법은..

[파이썬 - 알쓸신잡] 왜 Dict는 List 보다 빠를까?

항상 코테 문제를 풀거나 시스템을 구성할때 고려되어야할 중요한 포인트가 있다 바로 `시간 복잡도`이다 가끔 쉬워보이는 문제도 시간복잡도와 마주치게 되면 꽤 어려워진다 오늘은 이런 시간복잡도에 대한 이야기를 나눠보려고 한다 속도의 한계를 보여주지! 그렇다면 시간 복잡도가 가장빠른 경우는 어떠한 상황일까 당연히 O(1)인 상황이다 모든 결과가 한번에 처리되고 출력되는 속도이다 우리가 처리해야하는 데이터의 길이가 n이는 n+1이든 m이든 상관없이 O(1)이면 매우 빠르다 아직 이해가 되지 않을 수 있다 예시를 들어서 이해해보자 대표적으로 우리가 n개의 배열을 하나씩 print 하게 되면 얼마의 시간 복잡도가 걸릴까? 당연히 O(1)이면 매우 최적이겠지만 O(n) 만큼의 시간 복잡도가 소요된다 즉, 하나를 출력..

[Python] Typing 2편

참고한 자료 파이썬 Typing 파헤치기 - 심화편 지난 글 '파이썬 Typing 파헤치기 - 기초편'에서는 Typing의 기본적인 내용과 8개의 타입에 대해 다루어봤습니다. 이번 포스트에서는 조금 더 심화된 타입들에 대해 다뤄보도록 하겠습니다. 심화 타 sjquant.tistory.com 지난 글 [Python] Typing 1편 참고자료 파이썬 Typing 파헤치기 - 기초편 동적 언어에서의 타입 검사 파이썬은 동적 언어로 잘 알려진 언어입니다. 즉, 변수의 타입을 일일이 명시하지 않아도 되고, 특정 변수의 타입이 중간에 eumgill98.tistory.com 우리는 지난 시간에 Python의 Typing기능의 간단한 기초를 알아보았다 이번 시간에는 조금더 심화 과정의 Typing을 알아볼려고 한다 ..