Python을 사용한 AI – 데이터 준비

우리는 이미 감독 및 비지도 기계 학습 알고리즘을 연구했습니다. 이러한 알고리즘은 훈련 프로세스를 시작하기 위해 형식화 된 데이터가 필요합니다. ML 알고리즘에 대한 입력으로 제공 될 수 있도록 특정 방식으로 데이터를 준비하거나 형식화해야합니다.

이 장에서는 기계 학습 알고리즘을위한 데이터 준비에 중점을 둡니다.

데이터 전처리

일상 생활에서 우리는 많은 데이터를 다루지 만이 데이터는 원시 형식입니다. 데이터를 머신 러닝 알고리즘의 입력으로 제공하려면 데이터를 의미있는 데이터로 변환해야합니다. 데이터 전처리가 등장하는 곳입니다. 즉, 머신 러닝 알고리즘에 데이터를 제공하기 전에 데이터를 전처리해야한다고 말할 수 있습니다.

데이터 전처리 단계

Python에서 데이터를 전처리하려면 다음 단계를 따르십시오.

Step 1 − Importing the useful packages − 만약 우리가 파이썬을 사용한다면 이것은 데이터를 특정 형식으로 변환하는 첫 번째 단계, 즉 전처리가 될 것입니다. 다음과 같이 할 수 있습니다-

import numpy as np
import sklearn.preprocessing

여기에서는 다음 두 패키지를 사용했습니다.

  • NumPy − 기본적으로 NumPy는 작은 다차원 배열에 대해 너무 많은 속도를 희생하지 않고 임의 레코드의 큰 다차원 배열을 효율적으로 조작하도록 설계된 범용 배열 처리 패키지입니다.

  • Sklearn.preprocessing −이 패키지는 원시 특징 벡터를 기계 학습 알고리즘에 더 적합한 표현으로 변경하기위한 많은 공통 유틸리티 함수 및 변환기 클래스를 제공합니다.

Step 2 − Defining sample data − 패키지를 가져온 후 해당 데이터에 전처리 기술을 적용 할 수 있도록 몇 가지 샘플 데이터를 정의해야합니다. 이제 다음 샘플 데이터를 정의합니다.

input_data = np.array([2.1, -1.9, 5.5],
                      [-1.5, 2.4, 3.5],
                      [0.5, -7.9, 5.6],
                      [5.9, 2.3, -5.8])

Step3 − Applying preprocessing technique −이 단계에서는 전처리 기술을 적용해야합니다.

다음 섹션에서는 데이터 전처리 기술에 대해 설명합니다.

데이터 전처리 기법

데이터 전처리 기술은 아래에 설명되어 있습니다.

이진화

이것은 숫자 값을 부울 값으로 변환해야 할 때 사용되는 전처리 기술입니다. 다음과 같은 방식으로 0.5를 임계 값으로 사용하여 입력 데이터를 이진화하는 내장 방법을 사용할 수 있습니다.

data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)

이제 위 코드를 실행하면 다음과 같은 출력이 표시됩니다. 0.5 (임계 값) 이상의 모든 값은 1로 변환되고 0.5 미만의 모든 값은 0으로 변환됩니다.

Binarized data

[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]

평균 제거

기계 학습에 사용되는 또 다른 매우 일반적인 전처리 기술입니다. 기본적으로 모든 특징이 0에 집중되도록 특징 벡터에서 평균을 제거하는 데 사용됩니다. 특성 벡터의 특성에서 편향을 제거 할 수도 있습니다. 샘플 데이터에 평균 제거 전처리 기술을 적용하기 위해 아래 표시된 Python 코드를 작성할 수 있습니다. 코드는 입력 데이터의 평균 및 표준 편차를 표시합니다-

print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.

Mean = [ 1.75       -1.275       2.2]
Std deviation = [ 2.71431391  4.20022321  4.69414529]

이제 아래 코드는 입력 데이터의 평균 및 표준 편차를 제거합니다.

data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.

Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Std deviation = [ 1.             1.             1.]

스케일링

특징 벡터의 크기를 조정하는 데 사용되는 또 다른 데이터 전처리 기술입니다. 모든 특성의 값이 많은 임의 값 사이에서 다를 수 있으므로 특성 벡터의 크기 조정이 필요합니다. 즉, 기능이 종합적으로 크거나 작게되는 것을 원하지 않기 때문에 확장이 중요하다고 말할 수 있습니다. 다음 Python 코드의 도움으로 입력 데이터, 즉 특징 벡터의 스케일링을 수행 할 수 있습니다.

# Min max scaling

data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.

Min max scaled data

[ [ 0.48648649  0.58252427   0.99122807]
[   0.          1.           0.81578947]
[   0.27027027  0.           1.        ]
[   1.          0. 99029126  0.        ]]

표준화

특징 벡터를 수정하는 데 사용되는 또 다른 데이터 전처리 기술입니다. 이러한 종류의 수정은 공통 척도에서 특징 벡터를 측정하는 데 필요합니다. 다음은 머신 러닝에서 사용할 수있는 두 가지 유형의 정규화입니다.

L1 Normalization

또한 Least Absolute Deviations. 이러한 종류의 정규화는 절대 값의 합이 항상 각 행에서 최대 1이되도록 값을 수정합니다. 다음 Python 코드를 사용하여 입력 데이터에 구현할 수 있습니다.

# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)

위의 코드 줄은 다음 출력 & miuns;

L1 normalized data:
[[ 0.22105263  -0.2          0.57894737]
[ -0.2027027    0.32432432   0.47297297]
[  0.03571429  -0.56428571   0.4       ]
[  0.42142857   0.16428571  -0.41428571]]

L2 Normalization

또한 least squares. 이러한 종류의 정규화는 제곱의 합이 항상 각 행에서 최대 1이되도록 값을 수정합니다. 다음 Python 코드를 사용하여 입력 데이터에 구현할 수 있습니다.

# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)

위의 코드 줄은 다음 출력을 생성합니다.

L2 normalized data:
[[ 0.33946114  -0.30713151   0.88906489]
[ -0.33325106   0.53320169   0.7775858 ]
[  0.05156558  -0.81473612   0.57753446]
[  0.68706914   0.26784051  -0.6754239 ]]

데이터에 레이블 지정

머신 러닝 알고리즘에는 특정 형식의 데이터가 필요하다는 것을 이미 알고 있습니다. 또 다른 중요한 요구 사항은 데이터를 기계 학습 알고리즘의 입력으로 보내기 전에 데이터에 레이블을 올바르게 지정해야한다는 것입니다. 예를 들어 분류에 대해 이야기하면 데이터에 많은 레이블이 있습니다. 이러한 라벨은 단어, 숫자 등의 형태입니다. 머신 러닝 관련 기능sklearn데이터에 숫자 레이블이 있어야합니다. 따라서 데이터가 다른 형식이면 숫자로 변환해야합니다. 단어 레이블을 숫자 형식으로 변환하는이 프로세스를 레이블 인코딩이라고합니다.

라벨 인코딩 단계

Python에서 데이터 레이블을 인코딩하려면 다음 단계를 따르십시오.

Step1 − Importing the useful packages

Python을 사용하는 경우 데이터를 특정 형식, 즉 전처리로 변환하는 첫 번째 단계가됩니다. 다음과 같이 할 수 있습니다-

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

패키지를 가져온 후 레이블 인코더를 만들고 학습 할 수 있도록 몇 가지 샘플 레이블을 정의해야합니다. 이제 다음 샘플 레이블을 정의합니다.

# Sample input labels
input_labels = ['red','black','red','green','black','yellow','white']

Step 3 − Creating & training of label encoder object

이 단계에서는 레이블 인코더를 만들고 훈련시켜야합니다. 다음 Python 코드는이를 수행하는 데 도움이됩니다.

# Creating the label encoder
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

다음은 위의 Python 코드를 실행 한 후의 출력입니다.

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

이 단계는 무작위 순서 목록을 인코딩하여 성능을 확인하는 데 사용할 수 있습니다. 다음과 같은 Python 코드를 작성하여 동일한 작업을 수행 할 수 있습니다.

# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)

레이블은 다음과 같이 인쇄됩니다.

Labels = ['green', 'red', 'black']

이제 인코딩 된 값 목록을 얻을 수 있습니다. 즉, 다음과 같이 숫자로 변환 된 단어 레이블입니다.

print("Encoded values =", list(encoded_values))

인코딩 된 값은 다음과 같이 인쇄됩니다.

Encoded values = [1, 2, 0]

Step 5 − Checking the performance by decoding a random set of numbers −

이 단계는 임의의 숫자 집합을 디코딩하여 성능을 확인하는 데 사용할 수 있습니다. 다음과 같은 Python 코드를 작성하여 동일한 작업을 수행 할 수 있습니다.

# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)

이제 인코딩 된 값은 다음과 같이 인쇄됩니다.

Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))

이제 디코딩 된 값은 다음과 같이 인쇄됩니다.

Decoded labels = ['white', 'black', 'yellow', 'green']

레이블이있는 v / s 레이블이없는 데이터

레이블이없는 데이터는 주로 세계에서 쉽게 얻을 수있는 자연 또는 인간이 만든 개체의 샘플로 구성됩니다. 여기에는 오디오, 비디오, 사진, 뉴스 기사 등이 포함됩니다.

반면에 레이블이 지정된 데이터는 레이블이 지정되지 않은 데이터 집합을 가져 와서 레이블이 지정되지 않은 데이터의 각 부분을 의미있는 일부 태그 또는 레이블 또는 클래스로 보강합니다. 예를 들어, 사진이있는 경우 사진의 내용에 따라 레이블을 붙일 수 있습니다. 즉, 소년이나 소녀, 동물 또는 기타 사진입니다. 데이터에 레이블을 지정하려면 지정된 레이블이 지정되지 않은 데이터에 대한 인간의 전문 지식이나 판단이 필요합니다.

레이블이 지정되지 않은 데이터가 풍부하고 쉽게 얻을 수있는 시나리오가 많이 있지만 레이블이 지정된 데이터에는 주석을 달려면 사람 / 전문가가 필요한 경우가 많습니다. 준지도 학습은 레이블이 지정된 데이터와 레이블이없는 데이터를 결합하여 더 나은 모델을 구축하려고합니다.