데이터사이언스

    [백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬

    백준 24313 문제에 대해 풀어보겠습니다. 이 문제는 알고리즘 수행 시간에 관한 문제로 "점근적 표기 (asymptotic notation)"에 관해 알고 있는지를 묻고 있습니다. Background: 점근적 표기 점근적 표기에 대해 간략히 설명을 하자면, Big-O를 계산할 때 입력값의 크기에 따라 함수가 얼마나 빨리 커지는지 알아볼 때 중요하지 않은 항과 상수 계수를 제거하면서 이해를 방해하는 불필요한 부분을 없앤 표기법이라고 볼 수 있습니다. 즉, 간략한 예로 $ y = 0.0006n^3 - 1000 $라고 했을 때, $O(y)=n^3$ 가 되는 반면에, $ x = 1000n^2 + 1000 $의 Big O는 $O(x)=n^2$ 가 되기 마련입니다. 따라서 y의 수행시간이 x보다 더 크다고 할 수..

    [SQL] 검색 - 목록 검색 연산자와 중첩 질의 Nested Query (2)

    SQL에서 목록 검색 연산자라고 하면 IN과 NOT IN이 있다. IN 연산자는 일반적으로 주 질의의 WHERE 절에서 하나의 컬럼 값이 하위 질의가 반환한 결과 목록에 포함되는지 확인을 하는 역할을 한다. 지난 첫번째 중첩질의 포스팅에서도 다뤘지만, 하위 질의는 테이블(뷰) 형태를 반환할 수 있기 때문에 두개 이상의 값을 취할 수 있다. 주 질의는 WHERE 절의 컬럼 값이 하위 질의의 결과 목록에 포함되면 True를 반환한다고 이해하면 된다. 예시를 들어보자. 다음과 같은 3개의 테이블(emplyee, department, dependent) 이 존재한다고 가정해보자. 예제 1) 관리자인 사원의 정보를 검색 중첩질의를 활용해 이 문제를 해결해보자면 다음과 같이 SQL을 만들어서 원하는 답을 구할 수..

    [python] 반복자(iterator)와 제너레이터(generator)

    반복자(iterator)를 사용하는 이유 파이썬을 사용하다보면 어느 순간 심심치 않게 iter() 또는 next() 등을 목격했으리라 생각한다. 아마 파이썬으로 처음 프로그래밍을 공부했다면 (필자와 같은 비전공자) "결국에는 for문을 활용해서 사용하는 거 같은데.. 쉽게 그냥 list에 담아두고 사용하면 되지 왜 번거롭게 iterator를 만들 당최 왜 사용할까?" 라는 생각이 들 수도 있다. iterator를 사용하는데 여러 이유가 있겠지만, 기본적으로 시간과 비용 측면에서 매우 효율적이기 때문이다. 가장 직관적인 예제는 빅데이터를 활용한 딥러닝 모델을 구현할 때인데, 예를 들면 데이터 100만개를 학습한다고 가정해보자. 100만개를 시작부터 불러놓고 학습을 하는 것과 iterator가 필요한 데이터..

    [python] 파이썬 class의 __call__ 함수 (매직메소드)

    파이썬을 다루다보면 __call__함수에 직면하는 경우가 생깁니다. 저와 같은 데이터 사이언티스트의 경우에는 __call__함수는 Tensorflow의 def call() 메서드나 PyTorch의 def forward() 메서드가 대표적이라고 할 수 있는데요. 인스턴스를 생성하고 자동으로 클래스의 객체도 호출할 수 있게 만드는 기능입니다. 아래처럼 리스트를 받아 난수 10개를 뿌려주는 난수생성기 클래스로 표현되었다고 생각해봅시다. 인스턴스 메서드 구현 아래처럼 pick 메서드를 활용할 때, 출력물이 생성되고, 10개의 난수를 담은 리스트가 리턴되는 것을 확인할 수 있습니다. import random class RandomNumberReturn: def __init__(self): self.numbers ..

    [python] 클래스 메서드(class method)와 정적 메서드(static method)

    1. 클래스 메서드 (Class Method) 아래의 코드처럼 일반적으로 클래스 내에서 함수를 정의하고 사용하는 메서드는 객체에 소속되는 인스턴스 메서드이다. class Human: def __init__(self, age, name): self.age = age self.name = name def intro(self): print(str(self.age) + "살 " + self.name + "입니다.") park = Human(13, "박진명") park.intro() Human 클래스의 intro 메서드는 첫 번째 인수 self를 받아 이 객체에 대한 작업을 수행한다. 따라서, park 객체에 대해 호출되며, 해당 인스턴스의 나이와 이름을 조사하여 출력한다. 즉 park.intro() 메서드에서 ..

    [PyTorch] 파이토치를 활용한 선형회귀 구현

    (본 포스팅은 PyTorch로 시작하는 딥 러닝 입문 교재를 참고하여 작성하였습니다.) 선형회귀를 구현하기에 앞서 아래 지식이 선행되면 이해하기 더 쉽습니다 :) 가설 (Hypothesis) 손실 함수 (= 목적 함수 = 비용 함수) ; loss function = objective function = cost function 경사 하강법 (Gradient Descent) 공부시간과 시험 성적에 대한 데이터가 아래 테이블처럼 나와있다고 가정해보겠습니다. Study Hours (x) Result (y) 1 20 2 40 3 60 4 ? 1시간 공부 --> 20점 2시간 공부 --> 40점 3시간 공부 --> 60점 4시간 공부 --> ??점 선형회귀를 이용하여 시험 성적을 예측한다면, 아래의 패턴을 학습하..

    [Multi-modal] 논문 리뷰 FashionVLP

    이번에 소개할 논문은 Fashion VLP라는 논문입니다. FashionVLP는 '시각-언어 상호작용 (Vision-Language Interaction)'을 이용하여 패션 관련 작업을 수행하는 비전 언어 모델입니다. 이 논문에서는 패션 이미지에 대한 캡션 생성, 이미지 검색 및 다른 언어 모델과의 비교 실험 등에 대해 다루고 있습니다. 또한, FashionVLP는 BERT 기반의 언어 모델과 ViT 기반의 비전 모델을 결합하여 학습되며, 다양한 패션 관련 작업에서 우수한 성능을 보여줍니다. 이러한 결과는 FashionVLP가 다양한 패션 관련 응용 분야에서 유용하게 사용될 수 있다는 가능성을 제시합니다. Fashion VLP - 논문 제목: FashionVLP: Vision Language Transf..

    [tensorflow] 함수형 API 활용한 CNN 예시

    Functional API 특징 텐서플로우에서 제공하는 가장 직관적인 Sequential 모델은 쉽고 빠르게 레이어를 쌓아 딥러닝 모델을 만들 수 있습니다. 여기서 Sequential 모델은 네트워크 입력과 출력이 하나라가 가정합니다. 그리고 많은 경우에서 이 가정이 적절합니다. 하지만 이런 가정이 맞지 않는 경우가 발생할 수 있습니다. 예를 들면 개별 입력을 여러 개 필요로 하는 네트워크이거나 여러 개를 출력하는 네트워크의 경우에는 단순히 선형적으로 층을 쌓는 sequential 모델로는 구현할 수 없습니다. 이런 경우 함수형 API를 고려합니다. 함수형 API는 다양한 경우에서 활용할 수 있습니다. 아래의 그림처럼 소셜 미디어 포스팅을 통해 나이를 예측하고, 수입을 예측하고, 성별을 예측하는 하나의 ..