기계 학습 모델의 효율적인 데이터 예처리.
효율적인 데이터 사전 처리
대부분의 원시 데이터 집합은 어떤 유형의 패턴 식별도 할 수 없다.이런 데이터 집합에서 기계 학습 모델은 매우 효과가 없을 것이다.
기계 학습 알고리즘의 질은 데이터 집합의 질에 달려 있다.가장 선진적인 알고리즘이라도 나쁜 데이터에서는 정상적으로 작동할 수 없다.데이터는 몇 가지 절차를 거쳐야만 사용할 수 있다.
본문에서 나는 데이터의 사전 처리 조작을 간소화하려고 노력할 것이다.
데이터가 기계 학습 모델에 사용될 준비가 되기 전에 프로세스 개발자들은 보통 이 점을 따른다.
단계 1: 머신 러닝 라이브러리 가져오기
프로그래밍 중의 많은 것들이 매번 현저하게 귀속될 필요가 없다.그것들은 간단하게 호출할 수 있는 함수들이 있다.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
이 라이브러리/모듈을 인용하기 위해 'as' 키를 사용했습니다.(가명)
2단계: 데이터 세트 가져오기
dataset = pd.read_csv("Data.csv")
여기서 pandas 방법(read csv)을 사용하면 csv 파일을 가져올 수 있습니다.
기계 학습 용어에서 X는 특징 매트릭스, y는 라벨 매트릭스(출력)를 나타낸다.
다음 몇 줄에서 우리는 데이터 집합의 일부분을 특징 매트릭스와 라벨 매트릭스에 분배할 것이다.
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
우리는 데이터 프레임에서iloc 방법을 사용하여 값을 추출했다.
iloc 메서드는 다음과 같이 사용할 수 있습니다.
df.iloc[,].
**참고: *Python의: 모든 항목을 선택하고, Python의: - 1 마지막 항목을 제외한 모든 항목을 선택합니다.
예를 들어 X에서 우리는 데이터가 마지막 줄을 제외한 모든 줄과 열을 분배했다.
이거.메서드는 데이터 프레임의 Numpy 표현 형식을 반환합니다.
3단계: 손실된 데이터 찾기
당신이 가지고 있는 데이터 집합이 깨끗하다는 것을 보장할 수 없습니다.많은 원시 데이터의 집중은 모두 부족한 값을 가지고 있는데, 이것은 기계 학습 모델에 해롭다.
데이터 세트에 누락된 항목의 전체 행을 삭제할 수 있지만, 모든 유형의 유용한 데이터 항목을 삭제할 수도 있습니다.
몇 가지 방법으로 이 문제를 해결할 수 있다.
여기에는 두 가지가 있다.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv("Data.csv")
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
그러나 데이터 집합에 비교적 큰 이상값이 존재하면 평균값은 무용지물이 될 것이다. 이상값의 값은 평균값을 왜곡할 수 있기 때문에 중치를 선택한다.
sklearn의 SimpleImputer 클래스를 사용할 수 있습니다.이 임무는 완수하기 쉽다.
from sklearn.impute import SimpleImputer
# Creating an object from SimpleImputer class.
imputer = SimpleImputer(missing_values=np.nan, strategy="mean")
SimpleImputer는imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
또한 다음과 같은 두 행을 한 행에서 완료할 수 있습니다.X[:, 1:3] = imputer.fit_transform(X[:, 1:3])
4단계: 분류 데이터 인코딩
데이터가 집중되면, 우리는 숫자가 아닌 항목, 예를 들어 텍스트를 만날 수 있다.비록 우리는 텍스트의 상하문을 계산할 수 있지만 불행하게도, 알고리즘은 숫자에만 의존하기 때문에 계산할 수 없다.이 문제를 극복하기 위해서 우리는 데이터에 대해 인코딩을 진행한다.
첫 번째 열에서 모든 항목은 텍스트 형식입니다.이것은 분류 데이터의 한 예다.
그렇다면 어떻게 분류 데이터를 디지털 데이터로 바꿉니까?다음과 같은 두 가지 방법이 있습니다.
피쳐 인코딩(인수)
만약 우리가 분류 데이터에 정수 인코딩을 사용한다면, 0, 1, 2 등 값은 이 텍스트 항목에 인코딩될 것이다.이것은 당연히 이해할 수 있는 알고리즘이지만 함정이 하나 있다.예를 들어 미국이 0, 중국이 1, 일본이 2로 분배된다면 우리는 일본이 중국이나 미국보다 크다고 간접적으로 말하지 않겠는가?그러나 이것은 우리의 의도가 아니라는 것이 분명하다.그래서 여기에는 적용되지 않는다.
반대로, 우리는 반드시 열 인코딩을 사용해야 한다.
우리도 수입할 수 있다.우리는 어쩔 수 없이 두 종류를 사용할 것이다.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
첫 번째 단계는 ColumnTransformer 클래스의 객체를 작성하는 것입니다.ct = ColumnTransformer(transformers=[("encoder", OneHotEncoder(), [0])] , remainder="passthrough")
첫 번째 논점에서 우리는 반드시 세 가지 일을 구체적으로 설명해야 한다.이제 우리는 적응하고 변화해야 한다**
X = ct.fit_transform(X)
문제가 있습니다.ct.fit transform (X) 은 NumPy 그룹을 되돌려주지 않습니다. 기계 학습 모델이 NumPy 그룹 행렬을 원하기 때문에 NumPy 그룹으로 만들어야 합니다.X = np.array(ct.fit_transform(X))
태그 인코딩(변수에 따라)
레이블에 예, 아니오 등의 바이너리 값이 포함된 경우 정수 인코딩을 선택합니다.
문자열을 1 또는 0으로 변환합니다.
이를 위해, 우리는 반드시 다른 종류를 도입해야 한다.
from sklearn.preprocessing import LabelEncoder
이 클래스의 대상을 만들어야 합니다. 만들면fit transform 방법을 적용할 수 있습니다.le = LabelEncoder()
y = le.fit_transform(y)
NumPy 벡터는 필수 변수가 아니므로 배열로 변환할 필요가 없습니다.5단계: 데이터 세트를 트레이닝 세트와 테스트 세트로 분할합니다.
전체 데이터 집합은 현재 훈련 집합과 테스트 집합으로 나눌 것이다.
그런데 우리는 왜 데이터를 분할해야 합니까?
데이터를 훈련시키는 목적은 데이터에서 모델을 배우는 것이다.이 모델은 훈련이 집중된 모든 모델/관련성을 찾아낼 것이다.
훈련 집합은 모형 훈련에 사용되고 매개 변수 조정에도 사용된다.
테스트 집합의 목적은 모델이 훈련되지 않은 데이터에서의 표현에 주의하는 것이다.이것은 모델 성능의 추정치를 얻는 데 쓰인다.
테스트 집합은 모델 훈련에도 사용되지 않고 매개 변수 조정에도 사용되지 않는다.
가장 이상적인 분할 방법은 전체 데이터 집합의 80%를 훈련 집합에 분배하고 나머지 20%는 테스트 집합에 분배하는 것이다.
이 작업을 수행하려면 모델 selection이라는 Scikit 라이브러리에서 test train split을 가져와야 합니다.
from sklearn.model_selection import train_test_split
이렇게 하려면 다음과 같은 4개의 변수를 만들어야 합니다.X 조련: 특징 행렬의 조련 부분
X 테스트: 테스트 특징 행렬의 일부분
Y train:
X 열차 그룹, 따라서 그것들도 같은 지수를 가지고 있다
Y 검사: X 검사 집합과 대응하는 부분의 변수를 테스트하기 때문에 그것들도 같은 지수를 가지고 있다.
상술한 네 가지 변수는 모두 열차 시험 분할에 분배될 것이다.
열차 시험 분할의 몇 가지 매개 변수:
테스트 size: 0.2를 통과하면 데이터 집합의 20%를 테스트 집합에 분배하고 나머지 80%는 훈련 집합에 분배합니다.
X 시퀀스, X 테스트, y 시퀀스, y 테스트=시퀀스 테스트 분할(X, y, 테스트 크기=0.2)
6단계: 피쳐 배율 조정
이 단계는 많은 기계 학습 모형에 있어서 선택할 수 있는 것이다.
우리 왜 이러는 거야?
이렇게 하는 것은 일부 기능이 다른 기능에 의해 주도되는 것을 피하기 위해서이다.
우리는 자변량(특징)의 범위를 표준화할 것이다.
만약에 데이터 집중에 큰 값과 아주 작은 값이 있다면 기계 학습 알고리즘은 매우 작은 값을 존재하지 않는 것으로 간주할 수 있다. 왜냐하면 데이터 집중이 비교적 큰 값에 의해 지배되기 때문이다.
비록 규모가 작더라도 가치 있는 정보를 잃고 싶지 않다.
이것이 바로 우리가 모든 변수를 같은 척도로 바꿔야 하는 이유다.
두 가지 가장 현저한 방법으로 데이터를 평가할 수 있다.
표준화하면 피쳐의 모든 값이 [-3,3] 범위에 포함됩니다.
표준화하면 피쳐의 모든 값이 [0,1] 범위에 포함됩니다.
그럼 어떤 걸로 할까요?
응, 대부분의 특징이 정적 분포일 때 표준화를 사용하는 것을 권장한다.이것은 특정 상황에서만 매우 유용하다.
표준화는 일종의 보편적인 상황인 것 같다.그것은 줄곧 효과가 있다.
그럼 표준화를 시작합시다.이렇게 하려면 Scikit 라이브러리에서 StandardScaler 클래스를 가져와야 합니다.
from sklearn.preprocessing import StandardScaler
#creating an object of that class
sc = StandardScaler()
이 과정은 현재 직관적이고 직접적이다.우리는 X 열차에 적응하고 개조해야 한다.
StandardScaler는 트레이닝 세트를 먼저 적용하고 변환해야 하지만 테스트 세트만 변환해야 합니다.이렇게 하는 것은 테스트 집합의 분포에 관한 정보가 모델에 누설되는 것을 방지하기 위해서이다.
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
사용한 모델이나 데이터 집합에 따라 상술한 모든 절차를 완성할 필요가 없을 수도 있습니다.됐다!상술한 절차는 데이터를 어떠한 기계 학습 모델로 전송하기 전에 데이터를 미리 처리하는 전체적인 구조를 구성한다.
이것이 바로 원시 데이터 집합을 유용한 데이터 집합으로 어떻게 전환하는 방법이다.
Reference
이 문제에 관하여(기계 학습 모델의 효율적인 데이터 예처리.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/professorlogicx/efficient-data-preprocessing-for-machine-learning-models-37lf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)