데이터셋

머신러닝에서 데이터셋은 자료구조의 하나로서, 학습 또는 테스트를 위한 데이터를 쉽게 다룰 수 있도록 구성된 형식적인 데이터 집합입니다. 데이터셋은 일반적으로 다음과 같은 요소로 구성됩니다.

  • 데이터 포인트 (Data point): 하나의 샘플을 의미하며, 학습에 사용될 입력과 출력을 포함합니다.
  • 특성 (Feature): 데이터 포인트의 속성을 나타내며, 벡터나 행렬 등의 형태로 표현됩니다.
  • 레이블 (Label): 데이터 포인트의 정답을 의미하며, 회귀 문제의 경우 실수값, 분류 문제의 경우 정수값 또는 원-핫 인코딩된 벡터 등으로 표현됩니다.

데이터셋은 크게 두 가지 종류로 나눌 수 있습니다.

  1. 훈련 데이터셋 (Training dataset): 학습을 위한 데이터셋으로, 모델의 가중치를 업데이트하기 위해 사용됩니다. 일반적으로 전체 데이터셋의 일부를 사용합니다.
  2. 검증 데이터셋 (Validation dataset): 학습 과정에서 모델의 성능을 평가하기 위해 사용됩니다. 일반적으로 전체 데이터셋에서 훈련 데이터셋을 제외한 일부를 사용합니다.

이 외에도 테스트 데이터셋과 실시간 데이터셋 등 다양한 종류의 데이터셋이 있습니다. 이러한 데이터셋을 효율적으로 다루기 위해 머신러닝 라이브러리에서는 데이터셋을 다루기 위한 다양한 자료구조와 함수들을 제공합니다. 예를 들어, TensorFlow에서는 tf.data.Dataset 클래스를 사용하여 데이터셋을 다룰 수 있습니다.

머신러닝의 자료 구조

자료구조는 데이터를 효율적으로 저장하고, 검색하고, 수정하고, 삭제할 수 있도록 구성된 데이터 요소들의 집합과 그들 사이의 관계, 그리고 그에 적용 가능한 함수나 명령어들을 의미합니다. 즉, 프로그래밍에서 사용되는 데이터 요소들의 타입, 크기, 구성 등을 조직적으로 나열한 것입니다. 이를 통해 데이터를 관리하고 연산을 수행하는 데 있어서 시간과 공간의 효율성을 높일 수 있습니다. 머신러닝에서도 다양한 자료구조를 사용하여 데이터를 다루고, 분석하며, 모델을 학습하고 예측합니다.

자료구조는 우리 일상생활에서도 많이 사용되는 개념입니다. 예를 들어, 우리가 냉장고에 음식을 넣을 때, 그 음식들을 보관하기 위해 냉장고 안의 선반에 적절하게 정리하는 것이 자료구조를 적용하는 것과 유사합니다. 음식들은 각각의 종류, 유통기한, 크기 등에 따라 구분하여 정리하게 되며, 이를 통해 냉장고 안에서 음식을 찾고 꺼내는 것이 훨씬 더 효율적이고 쉬워지게 됩니다.

또 다른 예로, 우리가 책을 읽을 때, 책에 있는 내용을 이해하기 쉽게 만들기 위해 각각의 단락과 문장을 적절하게 구성하게 됩니다. 이러한 구성 방식은 자료구조에서 말하는 ‘리스트’나 ‘트리’와 유사합니다. 각각의 단락과 문장은 서로 연결되어 있으며, 이를 통해 책의 내용을 효과적으로 전달하고 읽는 사람들이 이해하기 쉽도록 하는 것입니다.
또 자료구조에 적용 가능한 함수나 명령어는 데이터를 처리하거나 조작하는 기능을 제공합니다. 예를 들어, 일상생활에서 사용하는 전화번호부를 생각해보면, 전화번호부는 이름과 전화번호로 구성된 데이터 요소들의 집합이며, 이 데이터 요소들은 검색, 수정, 삭제 등의 작업이 가능합니다.

여기서 전화번호부를 자료구조로 생각하면, 전화번호부에서 이름으로 전화번호를 검색하는 기능은 검색 함수로 구현할 수 있습니다. 또한, 새로운 전화번호를 추가하는 기능은 추가 함수로 구현할 수 있습니다. 그리고, 특정 전화번호를 삭제하는 기능은 삭제 함수로 구현할 수 있습니다. 이렇게 자료구조에 적용 가능한 함수나 명령어는 데이터 요소들을 보다 효율적으로 처리하고, 조작할 수 있도록 도와줍니다.

 

머신러닝에서 사용되는 자료 구조는 다음과 같습니다.

  1. 벡터 (Vector)
  2. 행렬 (Matrix)
  3. 텐서 (Tensor)
  4. 리스트 (List)
  5. 배열 (Array)
  6. 데이터프레임 (Dataframe)
  7. 시리즈 (Series)
  8. 그래프 (Graph)
  9. 힙 (Heap)
  10. 큐 (Queue)
  11. 스택 (Stack)
  12. 해시 테이블 (Hash Table)
  13. 트리 (Tree)
  14. 그래프 (Graph)
  15. 맵 (Map)
  16. 세트 (Set)
  17. 덱 (Deque)
  18. 딕셔너리 (Dictionary)
  19. 문자열 (String)
  20. 파일 (File)
  21. 스칼라 (Scalar)
  22. 데이터셋

머신러닝에서 사용되는 자료 구조로는 주로 이러한 것들이 있지만, 다양한 라이브러리와 프레임워크를 사용하면서 추가적인 자료 구조를 사용하기도 합니다. 따라서 상황에 따라서는 다른 자료 구조도 사용될 수 있습니다.

벡터화(Vectorization)

벡터(Vector)란 크기와 방향을 갖는 양을 나타내는 수학적 개념으로, 일반적으로 숫자들의 배열 형태로 나타내집니다.

텍스트와, 이미지 같은 비정형 데이터는 일정한 형식이 없어서 그대로 사용하기 어렵습니다. 예를 들어, 텍스트 데이터는 단어와 문장 등으로 이루어져 있으며, 이미지 데이터는 픽셀 값으로 이루어져 있습니다. 이러한 비정형 데이터를 다루기 위해서는 숫자로 변환하는 과정이 필요합니다. 벡터는 이러한 변환 과정에서 매우 유용한 자료구조입니다.

벡터는 크기와 방향을 가진 숫자 배열로, 특정한 방향으로 가리키며, 크기는 해당 방향으로의 크기를 나타냅니다. 벡터를 사용하면 데이터를 수학적으로 다루기 용이해지며, 비교 및 분석이 쉬워집니다.

반면, 자연수와 같은 다른 숫자를 사용하면 비교나 분석이 어렵습니다. 예를 들어, 자연수로는 ‘고양이’와 ‘개’와 같은 단어를 비교하는 것이 어렵지만, 벡터화하면 이들을 수학적으로 비교할 수 있습니다. 따라서 비정형 데이터를 다룰 때는 벡터를 사용하는 것이 일반적입니다.

그냥 자연수 같은 숫자대신 벡터화 하는것이 어떤 장점이 있는 아직 이해가 안되시는 분들을 위해 조금더 설명해 보겠습니다.

자연수로 ‘고양이’와 ‘개’와 같은 단어를 비교한다고 가정해봅시다. 이때, ‘고양이’를 1, ‘개’를 2라는 자연수로 부여한다면, 이들은 서로 다른 값을 가지므로 ‘고양이’와 ‘개’가 서로 다른 단어임을 구별할 수 있을 것입니다. 그러나 이 방법으로는 단어 간의 관계나 유사도를 파악하는 것이 어렵습니다.

반면에 벡터로 ‘고양이’와 ‘개’와 같은 단어를 비교하는 것은 더욱 정교한 비교가 가능합니다. 예를 들어, ‘고양이’와 ‘개’라는 단어가 벡터 [0.2, 0.7, 0.1, 0.3]와 [0.8, 0.1, 0.9, 0.5]와 같은 형태로 표현된다고 가정해봅시다. 이때 벡터의 각 차원은 다른 의미를 가지며, 단어의 특성을 나타냅니다. 이렇게 벡터로 표현된 단어는 서로 유사한 특성을 가지는 단어들은 벡터 공간에서 가까이 위치하게 되며, 이를 기반으로 단어 간의 관계나 유사도를 파악할 수 있습니다. 예를 들어, 벡터로 표현된 단어 간의 유클리드 거리를 계산하면 두 단어 간의 거리를 계산할 수 있습니다. 또한, 벡터의 내적을 계산하여 단어 간의 유사도를 파악할 수도 있습니다. 이러한 방법으로 단어 간의 관계나 유사도를 파악하는 것이 가능해지며, 이를 기반으로 자연어 처리나 텍스트 분석 등 다양한 분야에서 유용하게 활용됩니다.

이렇게 머신러닝에서는 문장과 같은 비정형 데이터를 다루기 위해, 문자열을 숫자 배열 형태인 벡터로 변환하는 작업을 수행합니다. 이를 벡터화(Vectorization)라고 합니다.

예를 들어, “나는 고양이를 좋아합니다”라는 문장을 벡터화한다면, 단어들을 고유한 인덱스로 매핑한 뒤 해당 인덱스의 위치에 횟수 정보를 저장하는 방법을 사용할 수 있습니다. 따라서 “나는”은 인덱스 0, “고양이를”는 인덱스 1, “좋아합니다”는 인덱스 2와 매핑될 수 있습니다. 이렇게 되면, “나는 고양이를 좋아합니다”는 [1, 1, 1, 0, 0, …]과 같은 숫자 배열 형태로 변환됩니다. 이 숫자 배열은 기계학습 모델에서 처리할 수 있는 형태가 되며, 이를 기반으로 문장의 의미를 분석하고 예측할 수 있습니다.