목차

  1. 결측값 처리
    1. 결측값 처리 방법
      1. 제거
      2. 대체
        1. 0으로 대체
        2. 각 열의 평균값으로 대체
        3. 각 열의 중간값으로 대체
        4. 각 열의 최빈값으로 대체
      3. 예측
  2. 이상값 처리
    1. 이상치란?
      1. 이상치 확인 방법
      2. 이상치 처리 방법
        1. 제거
        2. 대체
        3. 변환
  3. 중복값 제거
  4. 데이터 타입 변환
    1. 데이터 타입 변환의 필요성
      1. 정수형
      2. 문자열
      3. 부등 소수점
  5. 인코딩
    1. 인코딩이란? 
    2. 인코딩 방법
  6. 샘플링
    1. 샘플링이란? 
    2. 샘플링 방법
  7. 특징 선택 및 추출
    1. 특징 선택 및 추출이란?
    2. 특징 선택 방법
    3. 특징 추출 방법

1. 결측값 처리

1.1. 결측값 처리 방법

1.1.1. 제거

  • 정의 : 결측값이 포함된 행 또는 열을 제거
# 결측값이 포함된 행 제거
df_dropped_rows = df.dropna()

# 결측값이 포함된 열 제거
df_dropped_cols = df.dropna(axis=1)
행 제거 = df.dropna()
열 제거 = df.dropna(axis=1)

 

1.1.2. 대체

  • 정의 : 결측값을 특정 값으로 대체

1.1.2.1. 결측값을 0으로 대체

# 결측값을 0으로 대체
df_filled = df.fillna(0)
0으로 대체 = df.fillna(0)

 

1.1.2.2. 결측값을 각 열의 평균값으로 대체

# 결측값을 각 열의 평균값으로 대체
df_filled_mean = df.fillna(df.mean())
평균값 = df.fillna(df.mean())

 

1.1.2.3. 결측값을 각 열의 중간값으로 대체

# 결측값을 각 열의 중간값으로 대체
df_filled_median = df.fillna(df.median())
중간값 = df.fillna(df.median())

 

1.1.2.4. 결측값을 각 열의 최빈값으로 대체

# 결측값을 각 열의 최빈값으로 대체
df_filled_mode = df.fillna(df.mode().iloc[0])
최빈값 = df.fillna(df.mode().iloc[0])

 

1.1.3. 예측

  • 정의 : 머신러닝 모델을 사용하여 결측값을 예측
from sklearn.linear_model import LinearRegression

# 결측값이 있는 열과 없는 열 분리
df_with_na = df[df['column_with_na'].isnull()]
df_without_na = df[df['column_with_na'].notnull()]

# 회귀 모델 학습
model = LinearRegression()
model.fit(df_without_na[['feature1', 'feature2']], df_without_na['column_with_na'])

# 결측값 예측
predicted_values = model.predict(df_with_na[['feature1', 'feature2']])

# 예측된 값으로 결측값 대체
df.loc[df['column_with_na'].isnull(), 'column_with_na'] = predicted_values
결측 값이 있는 열과 없는 열 분리 df_with_na = df[df['column_with_na'].isnull()]
df_without_na = df[df['column_with_na'].notnull()]
회귀 모델 학습 model = LinearRegression()
model.fit(df_without_na[['feature1', 'feature2']], df_without_na['column_with_na'])
결측값 예측 predicted_values = model.predict(df_with_na[['feature1', 'feature2']])
예측된 값으로 결측값 대체 df.loc[df['column_with_na'].isnull(), 'column_with_na'] = predicted_values

2. 이상값 처리

2.1. 이상치란?

  • 정의
    • 데이터셋에서 비정상적으로 큰 값이나 작은 값
    • 이상치는 분석 결과에 큰 영향을 미칠 수 있으므로, 이를 적절히 처리하는 것이 중요

2.1.1. 이상치 확인 방법

자료를 분석 후 비율을 조정해야 해요

# 특정 열의 이상치 확인 (IQR 방법)
Q1 = df['column_name'].quantile(0.25)
Q3 = df['column_name'].quantile(0.75)
IQR = Q3 - Q1

# 이상치 범위 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 이상치 확인
outliers = df[(df['column_name'] < lower_bound) | (df['column_name'] > upper_bound)]
print(outliers)
이상치 확인(IQR 방법) Q1 = df['column_name'].quantile(0.25) 
Q3 = df['column_name'].quantile(0.75) 
IQR = Q3 - Q1
이상치 범위 설정 lower_bound = Q1 - 1.5 * IQR 
upper_bound = Q3 + 1.5 * IQR
이상치 확인 outliers = df[(df['column_name'] < lower_bound) | (df['column_name'] > upper_bound)] 
print(outliers)

 

2.1.2. 이상치 처리 방법

2.1.2.1. 제거

  • 정의 : 이상치를 데이터셋에서 제거
# 이상치 제거
df_no_outliers = df[(df['column_name'] >= lower_bound) & (df['column_name'] <= upper_bound)]

 

2.1.2.2. 대체

  • 정의 : 이상치를 특정 값으로 대체
# 이상치를 평균값으로 대체
mean_value = df['column_name'].mean()
df['column_name'] = df['column_name'].apply(
lambda x: mean_value if x < lower_bound or x > upper_bound else x)

 

2.1.2.3. 변환

  • 정의 : 이상치를 변환하여 데이터의 분포를 조정

3. 중복값 제거

# 중복된 행 확인
print(df.duplicated().sum())

# 중복된 행 제거
df_no_duplicates = df.drop_duplicates()
중복된 행 확인 print(df.duplicated().sum())
중복된 행 제거 = df.drop_duplicates()

4. 데이터 타입 변환

  • Pandas의 .astype() 메서드를 사용

4.1. 데이터 타입 변환의 필요성

  • 잘못된 데이터 타입은 분석 결과에 영향을 미칠 수 있음
  • 잘못된 데이터 타입은 모델 학습에 오류를 발생시킬 수 있음

 

4.1.1. 정수형

# 특정 열의 데이터 타입을 정수형으로 변환
df['column_name'] = df['column_name'].astype(int)
정수형 = df['column_name'].astype(int)

 

4.1.2. 문자열

# 특정 열의 데이터 타입을 문자열로 변환
df['column_name'] = df['column_name'].astype(str)
문자열 = df['column_name'].astype(str)

 

4.1.3. 부등 소수점

# 특정 열의 데이터 타입을 부동 소수점으로 변환
df['column_name'] = df['column_name'].astype(float)
부등 소수점 = df['column_name'].astype(float)

5. 인코딩

5.1. 인코딩이란?

  • 정의
    • 범주형 데이터를 수치형 데이터로 변환하는 과정
    • 머신러닝 모델은 수치형 데이터를 입력으로 받기 때문에 범주형 데이터를 수치형으로 변환하는 것이 필요

 

5.2. 인코딩 방법

# 범주형 데이터를 더미 변수로 변환
df_encoded = pd.get_dummies(df, columns=['category_column'])

# 결과 출력
print(df_encoded.head())

Pandasget_dummies() 메서드를 사용

범주형 데이터를 더미 변수로 변환 = pd.get_dummies(df, columns=['category_column'])

6. 샘플링

6.1. 샘플링이란?

  • 정의
    • 데이터셋의 크기를 줄이거나 늘리는 과정
    • 데이터셋의 대표성을 유지하면서 데이터의 크기를 조절하는 데 사용

 

6.2. 샘플링 방법

# 데이터셋에서 50% 샘플 추출
df_sampled = df.sample(frac=0.5)

# 데이터셋에서 100개의 샘플 추출
df_sampled_n = df.sample(n=100)

Pandassample() 메서드를 사용

퍼센트 = df.sample(frac=0.5)
개수 = df.sample(n=100)

7. 특징 선택 및 추출

7.1. 특징 선택 및 추출이란?

  • 정의
    • 모델 성능을 높이기 위해 중요한 특징을 선택하거나 새로운 특징을 추출하는 과정

 

7.2. 특징 선택 방법

from sklearn.feature_selection import SelectKBest, f_classif

# 특징 선택 (상위 5개의 특징 선택)
selector = SelectKBest(score_func=f_classif, k=5)
X_new = selector.fit_transform(X, y)

# 선택된 특징의 인덱스
selected_features = selector.get_support(indices=True)
print(selected_features)

PandasScikit-learn을 사용하여 특징 선택을 수행

 

7.3. 특징 추출 방법

# 두 열의 곱을 새로운 특징으로 추가
df['new_feature'] = df['feature1'] * df['feature2']

# 두 열의 합을 새로운 특징으로 추가
df['new_feature_sum'] = df['feature1'] + df['feature2']
두 열의 곱  = df['feature1'] * df['feature2']
두 열의 합  = df['feature1'] df['feature2']

 


목차

  1. 머신러닝이란?
    1. 머신러닝 특징
    2. 구성요소
      1. 데이터셋
      2. 특성(Feacture)
      3. 레이블(Label)
      4. 모델
      5. 학습
  2. 머신러닝의 학습 과정
    1. 데이터 수집
    2. 데이터 전처리
    3. 특징 선택
    4. 모델 선택
    5. 모델 훈련
    6. 모델 평가
    7. 모델 배포
  3. 학습 방법
    1. 지도 학습(Supervised Learning)
    2. 비지도 학습(Unsupervised Learning)
    3. 앙상블 학습(Ensemble Learning)
  4. 데이터셋 불러오기
    1. CSV 불러오기
    2. 엑셀 불러오기
    3. 기본 정보 확인
  5. 데이터 전처리(Data cleaning)
    1. 정의
    2. 장점
    3. 주요 기법 
      1. 결측치 처리(Handling Missing Data)
      2. 이상치 처리(Handing Outliers)
      3. 데이터 정규화(Normalization)
      4. 데이터 표준화(Standardization)
      5. 특성 공학(Feacture Engineering)
      6. 데이터 인코딩(Data Encoding)
      7. 데이터 분할(Data Splitting)

1. 머신러닝이란?

1.1. 정의

  • 컴퓨터가 명시적으로 프로그래밍이 되지 않아도 데이터를 통해 학습하고, 예측할 수 있도록 하는 기능
  • 대량의 데이터를 알고리즘에 입력하여 학습 과정을 통해 모델을 생성하고 예측을 수행

1.2. 특징

  • 데이터를 통해 패턴과 규칙을 스스로 학습함
  • 예측 모델을 통해 새로운 데이터에 대한 결과를 도출함
  • 프로그램이 아닌 모델이 중심임

1.3. 구성요소

1.3.1. 데이터셋

  • 정의 : 머신러닝은 데이터셋을 통해서 학습하며, 일반적으로 데이터셋은 입/출력 데이터로 구성됨
    1. 입력 데이터 : 모델이 학습할 수 있는 정보
    2. 출력 데이터(레이블) : 모델이 예측해야 하는 목푯 값

1.3.2. 특징(Feacture)

  • 정의 : 데이터에서 모델이 학습할 수 있는 개별 속성
  • 예 : 주택 가격 예측 - 주택의 크기, 위치, 방의 개수 등이 특징이 됨

1.3.3. 레이블(Label)

  • 정의
    • 예측하고자 하는 목표 변수
    • 지도학습 모델에서는 레이블이 있는 데이터셋을 이용하여 모델을 학습 시킴

1.3.4. 모델

  • 정의
    • 데이터의 특징으로부터 레이블(정답)을 예측할 수 있는 지식을 학습할 수 있는 프로그램 또는 함수
    • 입력 데이터와 출력 데이터간의 관계를 학습하여 새로운 데이터에 대한 예측 수행

1.3.5. 학습

  • 정의
    • 모델이 데이터를 통해서 패턴을 인식하고, 이를 기반으로 예측을 수행할 수 있도록 함수 내의 가중치를 조정하는 과정

2. 머신러닝의 학습 과정

2.1. 데이터 수집

  • 정의
    • 모델을 학습시키기 위한 필요 데이터를 수집하는 단계

2.2. 데이터 전처리

  • 정의
    • 결측값 처리, 이상치 제거, 정규화 등등을 하는 단계

2.3. 특징 선택

  • 정의
    • 중요 특징(feacture)을 선택하고 불필요한 피쳐를 제거하여 학습 효율을 높이는 단계

2.4. 모델 선택

  • 정의
    • 문제에 적합한 머신러닝 알고리즘을 선택하는 단계

2.5. 모델 훈련

  • 정의
    • 트레이닝 데이터셋을 사용해서 모델을 학습시키는 단계

2.6. 모델 평가

  • 정의
    • 테스트 데이터셋을 사용하여 모델 성능을 평가하는 단계

2.7. 모델 배포

  • 정의
    • 학습된 모델을 실제 환경에 배포하여 예측을 수행하는 단계

3. 학습 방법

3.1. 지도 학습(Supervised Learning)

  • 정의
    • 레이블이 있는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 회귀(Regression) : 연속적인 값을 예측하는 문제
        • 예) 주택 가격 예측, 주식 가격 예측
      2. 분류(Classification) : 이산적인 값을 예측하는 문제
        • 예) 이메일 스팸 필터링, 이미지 분류

3.2. 비지도 학습(Unsupervised Learning)

  • 정의
    • 레이블이 없는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 군집화(Clustering) : 데이터를 유사한 그룹으로 묶는 문제
        • 예) 고객 세분화, 이미지 세그멘테이션
      2. 차원 축소(Dimensionality Reduction) : 고차원 데이터를 저차원으로 변환
        • 예) PCA, t-SNE

3.3. 앙상블 학습(Ensemble Learning)

  • 정의
    • 여러개의 머신러닝 모델을 결합하여 더 나은 성능을 얻는 방법
      1. 배깅(Bagging) : 여러 모델을 독립적으로 학습시키고, 예측을 평균내거나 다수결 투표로 최종 예측
        • 예) 랜덤 포레스트
      2. 부스팅(Boosting) : 여러 모델을 순차적으로 학습시키고, 이전 모델의 오차를 보완하여 최종 예측
        • 예) 그랜디언트 부스팅, XGboost
      3. 스태킹(Stacking) : 여러 모델을 학습시키고 예측 결과를 새로운 데이터로 사용하여 메타 모델을 학습

4. 데이터셋 불러오기

4.1. CSV 불러오기

Pandas의 read_csv 함수를 사용하여 CSV 파일을 불러올 수 있다

import pandas as pd

# CSV 파일 불러오기
df = pd.read_csv('data.csv')

# 데이터 프레임의 첫 5행 출력
print(df.head())

 

4.2. 엑셀 불러오기

Pandas의 read_excel 함수를 사용하여 엑셀 파일을 불러올 수 있다

import pandas as pd

# 엑셀 파일 불러오기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 데이터 프레임의 첫 5행 출력
print(df.head())

 

4.3. 기본 정보 확인

함수 설명
print(df.shape) 데이터 프레임의 크기 (행, 열) 확인
print(df.columns) 데이터 프레임의 컬럼명 확인
print(df.dtypes) 데이터 프레임의 데이터 타입 확인
print(df.describe()) 데이터 프레임의 요약 통계량 확인
print(df.info()) 데이터 프레임의 정보 확인(null 값, 데이터 타입 등)

5. 데이터 전처리(Data cleaning)

5.1. 정의

  • 데이터 분석 및 머신러닝 모델링을 위해 데이터를 준비하는 과정
  • 데이터의 품질을 높이고, 분석 결과의 신뢰성을 확보하기 위한 필수 과정

5.2. 장점

  1. 데이터 품질 향상
    • 결측치, 이상치, 중복 데이터를 처리하여 데이터의 품질을 높임
  2. 모델 성능 향상
    • 적절한 스케일링, 정규화를 통해 모델의 학습 속도와 성능을 개선할 수 있음
  3. 데이터 일관성 확보
    • 서로 다른 출처에서 수집된 데이터를 일관된 형식으로 변환함
  4. 특성 공학
    • 유용한 특성을 생성하거나 변환하여 모델의 예측 능력을 향상함

 

5.3. 주요 기법

5.3.1. 결측치 처리(Handling Missing Data)

  • 누락된 값을 처리함
  • 삭제 : 결측치가 있는 행이나 열을 삭제
    • 데이터 손실이 발생할 수 있음
  • 대체 : 평균, 중앙값, 최빈값 등으로 결측치를 대체
  • 예측 : 다른 특성을 사용하여 결측치를 예측하고 채움

5.3.2. 이상치 처리(Handing Outliers)

  • 비정상적으로 크거나 작은 값을 처리함
  • 제거 : 이상치를 데이터셋에서 제거
  • 변환 : 이상치를 다른 값으로 변환
    • 예) 상한선이나 하한선으로 대체
  • IQR 방법 : IQR(InterQuartile Range)을 사용하여 이상치를 탐지하고 처리함

 

5.3.3. 데이터 정규화(Normalization)

  • 일정한 범위로 스케일링하는 과정. [0,1] 단위로 변환함
  • Min-Max 정규화 : 최솟값을 0, 최댓값을 1로 변환

 

5.3.4. 데이터 표준화(Standardization)

  • 평균 0, 분산 1로 변환하는 과정
  • Z-점수 표준화

 

5.3.5. 특성 공학(Feacture Engineering)

  • 새로운 유용한 특성을 생성하는 과정
  • 특성 생성 : 기준 데이터를 기반으로 새로운 특성을 생성함
    • 예) 날짜 데이터를 사용하여 요일 특성 생성
  • 특성 선택 : 모델 성능에 중요한 특성을 선택하고, 중요하지 않은 특성을 제거함

 

5.3.6. 데이터 인코딩(Data Encoding)

  • 비정형 데이터를 모델이 이해할 수 있는 형태로 변환
  • 레이블 인코딩 : 범주형 데이터를 숫자로 변환
  • 원_핫 인코딩 : 범주형 데이터를 이진 벡터로 변환

 

5.3.7. 데이터 분할(Data Splitting)

  • 데이터를 학습용(train), 검증용(validation), 테스트용(test)으로 분할함
  • 이를 통해 모델의 일반화 성능을 평가할 수 있음
  • 학습 데이터(Training Data) : 모델 학습에 사용되는 데이터
  • 검증 데이터(Validation Data) : 모델 튜닝 및 성능 검증에 사용되는 데이터
  • 테스트 데이터(Test Data) : 최종 모델 평가에 사용되는 데이터

 

'공부 > 머신러닝 공부' 카테고리의 다른 글

[머신러닝] 데이터 전처리  (0) 2024.12.23

+ Recent posts