이번주에는 머신러닝 학습 방법과 전처리, 데이터 구별 방법에 대하여 주로 학습을 하였습니다.
전처리를 진행하는 방법에 대해 익숙해졌고
아직 머신러닝 코드들에 대하여 여러번 학습했지만 아직 미숙하다.
학습한 내용의 소개 순서는
1. 데이터 구분 방법
2. 전처리 방법
3. 머신러닝 import코드 와 각 학습방법들의 특징
4. 회고
순서로 진행하겟습니다.
☑️ 데이터 구분 방법
1. 데이터 종류
1) 질적, 양적 데이터
질적 데이터
-명목척도: 순서나 크기의 개념없이 단순한 구분(혈액형, 학생번호, 전화번호 등)
-서열척도: 순서나 대소 관계가 의미있지만, 비례관계를 나타내지 않음(만족도 평가, 성적 등급 순위 등)
양적 데이터
-구간척도: 대소 관계와 함께 값들간의 타이에 의미가 있는 데이터, 0의 기준이 절대적이지 않고 임의로 정한 기준(온도, IQ 시간 등)
-비율척도: 절대적 0을 포함하고 비율비교가 가능한 데이터(키, 몸무게, 시험점수, 거리, 절대온도 등)
2) 데이터의 연속성
이산형 데이터
-뎐속적인 값이 아닌 정해진 범위 내의 특정 값으로만 표현
-값이 하나하나 개별적으로 구분되는 변수로 주로 정수값을 가지며 불연속적
-주사위눈, 시험점수, 학생 수 등
연속형 데이터
-연속적인 값을 가지며, 범위 내에서 무한히 많은 값으로 표현
-값이 연속적이며, 값 사이에 무한히 많은 세부적인 값이 존재
-키, 온도, 시간 등
2. 데이터 별 전처리 방법
-원핫인코딩(질적데이터 / 명목척도)
-라벨 인코딩(질적 데이터 / 서열척도)
-정규화MINMAXScaler: 스케일이 다른 피처 존재, 거리기반 알고리즘(k-nn, SVM), 경사하강법 사용하는 경우
-표준화Standard Scaler: 데이터의 분포가 정규분포일 때 많이 사용하며, 수치형 데이터에만 사용 가능
-피처 엔지니어링
-범주화
☑️ 전처리 방법
1. 탐지
-결측치 print(df.isna().sum())
-이상치 탐지
print(df['나이'].describe())
평균(mean)과 표준편차(std)가 큰 차이를 보이는 경우, 또는 최대값(max)이 비정상적으로 높은 경우
import matplotlib.pyplot as plt
시각화를 사용한 탐지
IQR(Interquartile Range)
-중복값 확인
df = df.duplicates().sum()
2. 제거, 대체
-결측치 제거
df_dropped_rows = df.dropna()
df_dropped_columns = df.dropna(axis=1)
-결측치 대체
df_filled = df.fillna('없음')
df['나이'] = df['나이'].fillna(df['나이'].mean())
df2['온도'] = df2['온도'].interpolate() (선형보간법)
-이상치 제거
df_without_outliers = df[(df['나이'] >= lower_bound) & (df['나이'] <= upper_bound)]
IQR방법의 lower_bound, upper_bound 사용
median_age = df['나이'].median() df['나이'] = df['나이'].apply(lambda x: median_age if x > upper_bound or x < lower_bound else x)
IQR방법의 lower_bound, upper_bound 사용
df = df[df['PurchaseAmount'] >= 0]
음수 값 제거
df = df[df['PurchaseAmount'] < 1000000]
비정상적인 큰 값 제거
-중간값 제거
df = df.drop_duplicates(subset='TransactionID')
3. 인코딩
맵핑을 활용한 인코딩
mpa(lambda(x: 0 if x == "" else 1)
4. 정규화, 표준화
# MinMaxScaler
scaler = MinMaxScaler()
df['PurchaseAmount'] = scaler.fit_transform(df[['PurchaseAmount']])
# StandardScaler
from sklearn.preprocessing import StandardScaler
numeric_cols = ['TransactionID', 'CustomerID', 'PurchaseAmount', 'CustomerAge', 'ReviewScore', 'CustomerGender', 'ProductCategory']
scaler = StandardScaler()
standard_data = scaler.fit_transform(df_numeric)
print(pd.DataFrame(standard_data, columns=numeric_cols))
5. 타입 변환
astype(str)
astype(int) 등
6 샘플링
# 데이터셋에서 50% 샘플 추출
df_sampled = df.sample(frac=0.5)
# 데이터셋에서 100개의 샘플 추출
df_sampled_n = df.sample(n=100)
☑️머신러닝 import 코드 및 학습모델 특징
지도학습
분류모델 - 로지스틱 회귀
- 변수가 이진형일 때 사용
- 확율 예측
from sklearn.linear_model import LogisticRegression
분류모델 - SVM
- 분류와 회귀 분석에 사용
- 마진을 최대화하면서 결정 초평면을 찾아 데이터 포인트를 정확하게 분류
from sklearn.svm import SVC
분류모델 - KNN
분류와 회귀 분석
학습 데이터를 기반으로 새로운 데이터 포인트의 클래스를 예측
from sklearn.neighbors import KNeighborsClassifier
분류모델 - 나이브베이즈
- 통계적 분류 기법
- 주로 텍스트 분류 문제에 사용
- 목표는 주어진 데이터 포인트가 특정 클래스에 속할 확률을 계산하여 분류
- 가우시안: 특징들이 연속적이고 정규 분포를 따른다.
from sklearn.naive_bayes import GaussianNB
- 베르누이: 특징들이 이진수(0 또는 1)로 표현되는 경우 사용
from sklearn.naive_bayes import BernoulliNB
- 티노미얼 : 특징들이 다항 분포를 따르는 경우
from sklearn.naive_bayes import MultinomialNB
분류모델 - 의사결정나무
- 의사결정 규칙을 만들고 이를 바탕으로 데이터를 분류나 회귀
from sklearn.tree import DecisionTreeClassifier
비지도 학습
군집화 모델
k-means clustering
from sklearn.cluster import KMeans
- 초기화: k개의 군집 중심을 랜덤하게 설정합니다.
- 할당 단계: 각 데이터 포인트를 가장 가까운 군집 중심에 할당합니다.
- 업데이트 단계: 각 군집의 중심을 해당 군집에 속한 데이터 포인트들의 평균으로 업데이트합니다.
- 반복: 할당 단계와 업데이트 단계를 군집 중심이 더 이상 변화하지 않을 때까지 반복합니다
계층적 군집화
- 데이터포인트를 계층 구조로 그룹화하는 방법
DBSCAN
- 밀도 기반 군집화 알고리즘
- 데이터 밀도가 높은 영역을 군집으로 간주하고, 밀도가 낮은 영역은 노이즈로 처리
from sklearn.cluster import DBSCAN
차원축소
PCA
- 고차원 데이터를 저차원으로 변환하는 차원 축소 기법
- 데이터의 분산을 최대한 보존하면서, 데이터의 주요 특징을 추출해 저차원 공간으로 변환
- 데이터의 시각화, 노이즈 제거, 계산 효율성 향상
from sklearn.decomposition import PCA
t_SNE
- 고차원 데이터를 저차원으로 변환하여 시각화하는 차원 축소 기법
- 포인트 간의 유사성을 보존하면서, 고차원 데이터를 2차원 또는 3차원 공간으로 변환
- 데이터의 구조와 패턴을 시각적으로 이해
from sklearn.manifold import TSNE
LDA
- 차원 축소와 분류를 동시에 수행
- 데이터의 클래스 간 분산을 최대화하고, 클래스 내 분산을 최소화하는 방향으로 데이터를 변환
- 분류 성능을 향상시키고, 저차원 공간에서 데이터의 구조를 시각화
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
앙상블학습
배깅과 부스팅
- 여러 개의 학습 모델을 결합하여 하나의 강력한 모델을 만드는 기법
- 학습의 주요 기법으로는 배깅(Bagging)과 부스팅(Boosting)
- 배깅이란? 여러 개의 학습 모델을 병렬로 학습, 원본 데이터셋에서 중복을 허용한 무작위 샘플을 생성, 모델 간의 상관성을 줄이고 예측 성능을 향상
from sklearn.ensemble import BaggingRegressor
- 부스팅이란? 여러 개의 약한 학습기(weak learner)를 순차적으로 학습시키고, 그 예측 결과를 결합, 이전 모델이 잘못 예측한 데이터 포인트에 가중치를 부여하여, 다음 모델이 이를 더 잘 학습
from sklearn.ensemble import GradientBoostingRegressor
랜덤 포레스트
- 여러 개의 결정 트리(Decision Tree)를 학습시키고, 그 예측 결과를 결합하여 최종 예측
- 과적합을 방지하고 예측 성능을 향상
- 데이터의 무작위 샘플을 사용하여 학습되며, 트리의 예측 결과를 평균 또는 다수결로 결합하여 최종 예측을 수행
from sklearn.ensemble import RandomForestRegressor
그래디언트 부스팅 머신(GBM)
- 여러 개의 약한 학습기(weak learner)를 순차적으로 학습시키고, 그 예측 결과를 결합하여 강한 학습기(strong learner)를 만드는 기법
- 잘못 예측한 데이터 포인트에 가중치를 부여하여, 다음 모델이 이를 더 잘 학습하도록한다.
- 과적합을 방지하고 예측 성능을 향상
from sklearn.ensemble import GradientBoostingRegressor
XGBoost
- 병렬 처리, 조기 종료, 정규화 등의 기능을 통해 성능을 극대화
- 이전 트리의 예측 오류를 보완하는 방식으로 학습됩
- 트리의 예측 결과를 가중합하여 최종 예측을 수행
import xgboost as xgb
☑️ 회고
이번주에는 조별과제를 진행하면서 머신러닝에 대해서 학습을 진행하였고
조별과제로는 발표와 자료 준비를 맡았다.
발표를 준비하기에 과제의 내용을 적절히 파악해야한다는 생각으로
스스로 과제 내용을 전체적으로 진행해보았고
데이터 파악, 전처리, 머신러닝 모델 학습 구조에 대해 자세히 파악하는 시간이였다.
다음 주는 과제 완성도를 높이는 회의를 진행하면서 데이터 파악 연습, 딥러닝 모델 연습을 주로 할거다.
조과제는 팀장으로서 생각하고 행동해야하겟지만 팀장을 처음 해보는지라 어떻게 사람들을 이끌어야하는지 모르겟다.
그래서 주로 과제를 어떻게 진행할지 다 같이 고민하는 시간을 가지기 위한 생각을 많이했다.