CS🏅/파이썬 🖤 10

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

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

GIL

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

[파이썬 - 알쓸신잡] 왜 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을 알아볼려고 한다 ..

[Python] Typing 1편

참고자료 파이썬 Typing 파헤치기 - 기초편 동적 언어에서의 타입 검사 파이썬은 동적 언어로 잘 알려진 언어입니다. 즉, 변수의 타입을 일일이 명시하지 않아도 되고, 특정 변수의 타입이 중간에 바뀌어도 됩니다. 파이썬과 같은 동적 언 sjquant.tistory.com 요즘 오픈 소스를 살펴보면서 공부하는 습관을 기르고 있다 오픈 소스를 살펴보면 Typing을 hint로 주는 경우가 있는 이부분은 처음 보고 어색한 부분이었기 때문에 추가적을 공부를 하였다 그럼 이제부터 공부한 내용을 기반으로 Python 의 Typing에 대해서 정리해보겠다 1. 동적언어의 Typing? Python은 많은 사람들이 알고 있들이 동적언어이다. 동적언어의 가장큰 장점은 굳이 변수의 타입을 일일이 명시할 필요가 없다는 것..

[Python] Iterator vs. Generator

파이토치를 하다보면 특히, DataLoader 다루다보면 Generator 라는 것을 만나게 된다 처음 마주치면 어떠한 개념인지 살짝 애매할 수 있기 때문에 이번에 개념을 한번 글로 정리해보려고 한다 Iterator vs. Generator Iterator 먼저 Iterator를 알아보자 iterate는 반복하다라는 의미이다 파이썬의 경우 list, dict, 문자열이 iterable 객체이다. 이를 이해하기 쉽게 예를 들어서 설명하면 x = [1 , 2, 3] list인 경우 순차적으로 값을 뽑기 위해서 for문을 활용할 것이다 fro i in [1,2,3]: print(i) >>> 1 2 3 그렇다면 for문을 활용하지 않고 각 값을 순차적으로 뽑을 수 있는 방법은 없을까? 바로 iter()를 활용하..

[Python] 파이썬 데코레이터

데코레이터 decorator 데이터 분석을 하다보면 특히, Pytorch를 활용하다 보면 @[메소드명]을 클래스나 메소드 위에 작성한 예시를 자주보게 될것이다. 이러한 것을 데코레이터 decorator방식이라고 하는데 왜 사용하는 것일까? 바로 메소드를 수정하지 않고 특정 동작을 이용할 수 있기 때문이다. 언제나 그렇듯 간단한 예시로 살펴보자 def Hi(): print('Hi !') >>> Hi() Hi ! Hi !를 출력해주는 간단한 메소드를 작성해 보았다 그런데 우리 서비스는 이용자가 들어올때마다 >>>이용자 이름 >>>Hi ! >>>선택한 서비스 순서로 출력하는 메소드를 구성하고 싶다 이미 우리에게 Hi !를 출력하는 메소드가 있기 때문에 이를 이용해서 새로운 메소드를 작성해 보자 def serv..

[Python] 간단한 class 정리 및 객체지향 프로그래밍

참고자료 : https://wikidocs.net/16071 41. class 정리 - 클래스 기본적인 사용 ## 1. 클래스 개요 - 클래스는 객체의 구조와 행동을 정의합니다. - 객체의 클래스는 초기화를 통해 제어합니다. - 클래스는 복잡한 문제를 다루기 쉽도록 만듭니다. ##… wikidocs.net 1. 객체지향 프로그래밍 C, C++, Java 그리고 Python은 대표적인 객체지향 프로그래밍 (Object-Oriented Programming, OOP) 언어이다 여기서 '객체지향'을 이해할 필요가 있다. 쉽게 설명하자면 하나의 프로그램을 구성하기 위해서 다양한 객체를 이용해서 구성한다는 것이다. 우리가 코딩을 하면서 마주치는 상황중에서 이전에 썼던 for문이나 구조가 뒤에서 다시한번 사용되는 ..