머신러닝을 위해 NumPy 배열을 인덱싱, 슬라이스 및 재구성하는 방법

머신러닝 데이터는 배열로 표시됩니다.

파이썬에서 데이터는 거의 보편적으로 NumPy 배열로 표현됩니다.

Python을 처음 사용하는 경우 네거티브 인덱싱 및 배열 슬라이싱과 같은 데이터에 액세스하는 몇 가지 Python 방법에 혼란스러울 수 있습니다.

이 자습서에서는 NumPy 배열(array)에서 데이터를 올바르게 조작하고 액세스하는 방법을 배웁니다.

이 자습서를 완료하면 다음을 알 수 있습니다.

  • 목록 데이터를 NumPy 배열로 변환하는 방법.
  • Pythonic 인덱싱 및 슬라이싱을 사용하여 데이터에 액세스하는 방법.
  • 일부 머신러닝 API의 기대치를 충족하도록 데이터 크기를 조정하는 방법.

튜토리얼 개요

이 튜토리얼은 다음과 같이 네 부분으로 나뉩니다. 

  1. 목록에서 배열로
  2. 배열 인덱싱
  3. 배열 슬라이싱
  4. 배열 재구성

1. 목록에서 배열로

일반적으로 Pandas 또는 NumPy 함수를 사용하여 파일에서 데이터를 로드하는 것이 좋습니다.

예를 들어 다음 게시물을 참조하십시오.

이 섹션에서는 다른 방법으로 데이터를 로드하거나 생성했으며 이제 Python 목록을 사용하여 표시되었다고 가정합니다.

목록의 데이터를 NumPy 배열로 변환하는 방법을 살펴보겠습니다.


배열에 대한 1차원 목록

데이터를 로드하거나 데이터를 생성하여 목록으로 액세스할 수 있습니다.

array() NumPy 함수를 호출하여 1차원 데이터 목록을 배열로 변환할 수 있습니다.

예제를 실행하면 1차원 목록이 NumPy 배열로 변환됩니다.


배열할 목록의 2차원 목록

머신러닝에서는 2차원 데이터가 있을 가능성이 더 큽니다.

이는 각 행이 새 관측치를 나타내고 각 열이 새 피쳐를 나타내는 데이터 테이블입니다.

데이터를 생성했거나 사용자 지정 코드를 사용하여 로드하여 목록이 생겼을 수 있습니다. 각 목록은 새 관측치를 나타냅니다.

array()함수를 호출하여 위와 같은 방법으로 목록 목록을 NumPy 배열로 변환 할 수 있습니다.

예제를 실행하면 데이터가 성공적으로 변환된 것을 알 수 있습니다.


2. 배열 인덱싱

데이터가 NumPy 배열을 사용하여 표현되면 인덱싱을 사용하여 데이터에 액세스할 수 있습니다.

인덱싱을 통해 데이터에 액세스하는 몇 가지 예를 살펴보겠습니다.

1차원 인덱싱

일반적으로 인덱싱은 Java, C# 및 C++와 같은 다른 프로그래밍 언어에 대한 경험에서 기대하는 것처럼 작동합니다.

예를 들어, 검색할 값에 대한 0 오프셋 인덱스를 지정하는 대괄호 연산자 []를 사용하여 요소에 액세스할 수 있습니다.

예제를 실행하면 배열의 첫 번째 값과 마지막 값이 인쇄됩니다.

배열의 경계에 비해 너무 큰 정수를 지정하면 오류가 발생합니다.

예제를 실행하면 다음 오류가 출력됩니다.

한 가지 중요한 차이점은 음수 인덱스를 사용하여 배열 끝에서 오프셋된 값을 검색할 수 있다는 것입니다.

예를 들어 인덱스 -1은 배열의 마지막 항목을 나타냅니다. 인덱스 -2는 현재 예제의 첫 번째 항목에 대해 -5까지 두 번째 마지막 항목을 반환합니다.

예제를 실행하면 배열의 마지막 항목과 첫 번째 항목이 인쇄됩니다.


2차원 인덱싱

2차원 데이터 인덱싱은 각 차원의 인덱스를 구분하는 데 쉼표를 사용한다는 점을 제외하면 1차원 데이터를 인덱싱하는 것과 비슷합니다.

이는 각 차원에 대해 별도의 대괄호 연산자가 사용되는 C 기반 언어와 다릅니다.

예를 들어 다음과 같이 첫 번째 행과 첫 번째 열에 액세스 할 수 있습니다.

예제를 실행하면 데이터 집합의 첫 번째 항목이 인쇄됩니다.

첫 번째 행의 모든 항목에 관심이 있는 경우 다음과 같이 두 번째 차원 인덱스를 비워 둘 수 있습니다.

그러면 데이터의 첫 번째 행이 인쇄됩니다.


3. 어레이 슬라이싱

지금까지는 좋았습니다. 배열을 만들고 인덱싱하는 것은 익숙해 보입니다.

이제 배열 슬라이싱에 대해 설명했으며 이것은 Python 및 NumPy 배열 초보자에게 문제를 일으키는 기능 중 하나입니다.

목록 및 NumPy 배열과 같은 구조체를 슬라이스할 수 있습니다. 이는 구조체의 하위 시퀀스를 인덱싱하고 검색할 수 있음을 의미합니다.

이는 입력 변수와 출력 변수를 지정하거나 테스트 행에서 학습 행을 분할할 때 머신러닝에서 가장 유용합니다.

조각화는 콜론 연산자 ‘:’를 사용하여 열 앞뒤에 각각 ‘from‘ 및 ‘to‘ 인덱스를 사용하여 지정합니다. 조각은 ‘from’ 인덱스에서 확장되고 ‘to’ 인덱스 앞에서 한 항목을 끝냅니다.

몇 가지 예를 살펴보겠습니다.


1차원 슬라이싱

인덱스 없이 조각 ‘:’을 지정하여 배열 차원의 모든 데이터에 액세스할 수 있습니다.

예제를 실행하면 배열의 모든 요소가 인쇄됩니다.

배열의 첫 번째 항목은 인덱스 0에서 시작하여 인덱스 1(‘to’ 인덱스 앞의 한 항목)에서 끝나는 슬라이스를 지정하여 슬라이스할 수 있습니다.

예제를 실행하면 첫 번째 요소가 있는 하위 배열이 반환됩니다.

음수 인덱스를 조각으로 사용할 수도 있습니다. 예를 들어 슬라이스를 -2(두 번째 마지막 항목)에서 시작하고 ‘to’ 인덱스를 지정하지 않음으로써 목록의 마지막 두 항목을 슬라이스할 수 있습니다. 그러면 슬라이스가 차원의 끝으로 이동합니다.

예제를 실행하면 마지막 두 항목만 있는 하위 배열이 반환됩니다.


2차원 슬라이싱

머신러닝에서 가장 많이 사용할 가능성이 높은 2차원 조각화의 두 가지 예를 살펴보겠습니다.

입력 및 출력 기능 분할

로드된 데이터를 입력 변수(X)와 출력 변수(y)로 분할하는 것이 일반적입니다.

모든 행과 모든 열을 마지막 열 앞까지 슬라이스 한 다음 마지막 열을 별도로 인덱싱하여 이를 수행 할 수 있습니다.

입력 기능의 경우 행 인덱스에 ‘:’를 지정하고 열 인덱스에 :-1을 지정하여 마지막 행을 제외한 모든 행과 모든 열을 선택할 수 있습니다.

출력 열의 경우 ‘:’를 사용하여 모든 행을 다시 선택하고 -1 인덱스를 지정하여 마지막 열만 인덱싱할 수 있습니다.

이 모든 것을 종합하면 다음과 같이 3열 2D 데이터 세트를 입력 데이터와 출력 데이터로 분리할 수 있습니다.

예제를 실행하면 분리된 X 및 y 요소가 인쇄됩니다. X는 2차원 배열이고 y는 1차원 배열입니다.


기차 열과 테스트 행 분할

로드된 데이터 세트를 별도의 학습 집합과 테스트 집합으로 분할하는 것이 일반적입니다.

일부 부분은 모델을 학습하는 데 사용되고 나머지 부분은 학습된 모델의 기술을 예측하는 데 사용되는 행의 분할입니다.

여기에는 두 번째 차원 인덱스에 ‘:’를 지정하여 모든 열을 조각화하는 작업이 포함됩니다. 학습 데이터 세트는 처음부터 분할 지점까지의 모든 행입니다.

테스트 데이터 집합은 분할 지점에서 차원의 끝까지 모든 행입니다.

이 모든 것을 합치면 인위적인 분할점 2에서 데이터 세트를 분할할 수 있습니다.

예제를 실행하면 학습할 처음 두 행과 테스트 세트의 마지막 행이 선택됩니다.


4. 배열 재구성

데이터를 조각화한 후 재구성해야 할 수 있습니다.

예를 들어 scikit-learn과 같은 일부 라이브러리에서는 출력 변수(y)의 1차원 배열을 각 행에 대한 하나의 열과 결과가 있는 2차원 배열로 구성해야 할 수 있습니다.

Keras의 장단기 기억 순환 신경망과 같은 일부 알고리즘에서는 입력값을 샘플, 타임스텝 및 특징으로 구성된 3차원 배열로 지정해야 합니다.

데이터가 특정 Python 라이브러리의 기대치를 충족하도록 NumPy 배열의 모양을 변경하는 방법을 아는 것이 중요합니다. 이 두 가지 예를 살펴보겠습니다.


데이터 셰이프

NumPy 배열에는 배열의 각 차원 길이의 튜플을 반환하는 모양 특성이 있습니다.

예를 들어:

예제를 실행하면 1차원에 대한 튜플이 인쇄됩니다.

길이가 두 개인 튜플이 2차원 배열에 대해 반환됩니다.

예제를 실행하면 행과 열의 개수가 포함된 튜플이 반환됩니다.

배열 차원의 크기를 shape 차원에서 사용할 수 있습니다(예: 매개 변수 지정).

튜플의 요소는 배열처럼 액세스 할 수 있으며 행 수에 대한 0 번째 인덱스와 열 수에 대한 1st 인덱스가 있습니다. 예를 들어:

예제를 실행하면 각 차원의 특정 크기에 액세스합니다.


1D를 2D 배열로 재구성

1차원 배열을 하나의 열과 여러 행이 있는 2차원 배열로 모양을 변경해야 하는 것이 일반적입니다.

NumPy는 데이터의 모양을 바꾸는 데 사용할 수 있는 NumPy 배열 객체에 대해 reshape() 함수를 제공합니다.

reshape()함수는 배열의 새 모양을 지정하는 단일 인수를 사용합니다. 1차원 배열을 하나의 열이 있는 2차원 배열로 재구성하는 경우 튜플은 배열의 모양이 첫 번째 차원(data.shape[0])이고 두 번째 차원의 경우 1이 됩니다.

이 모든 것을 종합하면 다음과 같은 작업 예제를 얻을 수 있습니다.

예제를 실행하면 1차원 배열의 모양이 인쇄되고 배열의 모양이 1개의 열로 5개 행으로 변경된 다음 이 새 모양이 인쇄됩니다.


2D를 3D 배열로 재구성

각 행이 시퀀스를 나타내는 2차원 데이터를 하나 이상의 시간 스텝과 하나 이상의 특징의 여러 샘플을 예상하는 알고리즘에 대해 3차원 배열로 재구성해야 하는 것이 일반적입니다.

좋은 예는 Keras 딥 러닝 라이브러리의 LSTM 순환 신경망 모델입니다.

reshape 함수는 새 차원을 지정하여 직접 사용할 수 있습니다. 이는 각 시퀀스에 각 시간 스텝에서 하나의 관찰(특징)이 있는 여러 시간 스텝이 있는 예에서 명확합니다.

배열의 shape 속성에있는 크기를 사용하여 샘플 (행)과 열 (시간 단계)의 수를 지정하고 기능 수를 1로 고정 할 수 있습니다.

이 모든 것을 종합하면 다음과 같은 작업 예제를 얻을 수 있습니다.

예제를 실행하면 먼저 2D 배열의 각 차원 크기가 인쇄되고 배열의 모양이 변경된 다음 새 3D 배열의 모양이 요약됩니다.


추가 정보

이 섹션에서는 더 자세히 알아보려는 경우 주제에 대한 더 많은 리소스를 제공합니다.


요약

이 자습서에서는 Python을 사용하여 NumPy 배열의 데이터에 액세스하고 모양을 변경하는 방법을 발견했습니다.

특히 다음 내용을 배웠습니다.

  • 목록 데이터를 NumPy 배열로 변환하는 방법.
  • Pythonic 인덱싱 및 슬라이싱을 사용하여 데이터에 액세스하는 방법.
  • 일부 머신러닝 API의 기대치를 충족하도록 데이터 크기를 조정하는 방법.

네피리티
No Comments

Sorry, the comment form is closed at this time.