1. 어떤것들을 공부했는지

이번주는 AI모델활용, 머신러닝, Python, LLM&RAG 강의를 듣고 GITHUB를 활용한 포트폴리오 작성 및 복습하는 시간이였습니다.

원래의 목표로는 머신러닝 결과를 해석을 가장 중요시했지만 중간에 LLM&RAG 강의를 새롭게 듣게 되어 강의 완강을 최우선 목표로 목표를 수정하게 되었습니다.

LLM&RAG 강의를 완강 하였고

머신러닝의 PCA, k-means-clustering, DBSCAN, 계층적 군집화에 대한 복습을 마무리했습니다.

LDA, t-SEN의 결과해석은 아직 마무리 하지 못했지만 틈이 나는대로 진행할 예정입니다.

포트폴리오 또한 새로운 강의 수강 및 머신러닝 복습, 트러블 이슈 등으로 많이 진행하지 못한 상황으로 빠르게 정리하고 싶습니다.

2. 학습하며 가진 생각들

1) 머신러닝

  • 결과에 대한 해석을 위해선 수학개념을 이해하는게 중요해 보임
  • 왜 사용하는지? 어떻게 결과를 해석하는지 찾고 학습하는 과정이 매우 어려움
  • 코드의 파라미터 등의 기능은 어느정도 숙지했다고 생각함

2) 파이썬

  • 수준별 학습 반에서 진행하는 강의 및 과제로 학습 중
  • 과제를 혼자 풀어보고 다른 해석 및 튜터님의 풀이 방법 등을 보며 공부
  • 다양한 방법이 존재하는 것이 신기하고 실제 현장에서 주로 쓰는 방법이나 그라운드 룰 등에 대한 이야기가 신기했음
  • 많은 질문이 생각나지만 혼자 학습해보고 해결이 안되는 부분을 질문해서 학습 시간이 더 오래걸리나 싶은 생각이 들지만 이게 가장 좋은 학습 방법 같음

3) AI모델활용

  • 아직 API키 활용을 제대로 못하겟음
  • 항상 만나지만 아직 해결 못한 환경변수 설정 튜터님에게 질문해야할 것으로 보임
  • 신기하고 재미있어 보이지만 코드를 다 공부하기에 학습시간이 오래걸릴 것 같음

4) LLM&RAG

  • 1~4주차 강의는 쉽고 반복되는 내용으로 빠르게 이해가 가능했음
  • 5주차 강의 또한 반복되는 내용에 조금씩 내용이 깊어지고있다 생각함
  • 5주차 마지막 강의는 여러번 재수강이 필요해 보임
  • 내가 할 수 있을까? 라는 생각이 들기 시작함

5) 포트폴리오

  • GITHUB의 웹싸이트 만들기 까지 했지만 꾸미는 방법은 진행하지 못한 상태
  • 언젠간 해야지하면서 다른 학습에 시간을 다 사용해버려 진행이 너무 느림

3. 다음 주 목표

  • 머신러닝 t-SEN, LDA 결과 완벽히 해석
  • 환경변수 설정에 대한 내용 질문 및 찾아보기
  • LLM&RAG 필기한 내용을 주로 복습하고 개인과제가 나오면 집중 복습
  • 파이썬 강의에서 나오는 내용은 꾸준히 복습하고 다음주 주말에 문제 한번씩 다시 풀어볼 것

'WIL' 카테고리의 다른 글

내일배운캠프 WIL + 머신러닝  (0) 2024.10.27
내일배움캠프 2주차 WIL + 파이썬 데이터 정복  (4) 2024.10.13

이번주에는 머신러닝 학습 방법과 전처리, 데이터 구별 방법에 대하여 주로 학습을 하였습니다.

 

전처리를 진행하는 방법에 대해 익숙해졌고

 

아직 머신러닝 코드들에 대하여 여러번 학습했지만 아직 미숙하다.

 

학습한 내용의 소개 순서는

 

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

  1. 초기화: k개의 군집 중심을 랜덤하게 설정합니다.
  2. 할당 단계: 각 데이터 포인트를 가장 가까운 군집 중심에 할당합니다.
  3. 업데이트 단계: 각 군집의 중심을 해당 군집에 속한 데이터 포인트들의 평균으로 업데이트합니다.
  4. 반복: 할당 단계와 업데이트 단계를 군집 중심이 더 이상 변화하지 않을 때까지 반복합니다

계층적 군집화

- 데이터포인트를 계층 구조로 그룹화하는 방법

 

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


☑️ 회고

이번주에는 조별과제를 진행하면서 머신러닝에 대해서 학습을 진행하였고

 

조별과제로는 발표와 자료 준비를 맡았다.

 

발표를 준비하기에 과제의 내용을 적절히 파악해야한다는 생각으로 

 

스스로 과제 내용을 전체적으로 진행해보았고

 

데이터 파악, 전처리, 머신러닝 모델 학습 구조에 대해 자세히 파악하는 시간이였다.

 

다음 주는 과제 완성도를 높이는 회의를 진행하면서 데이터 파악 연습, 딥러닝 모델 연습을 주로 할거다.

 

조과제는 팀장으로서 생각하고 행동해야하겟지만 팀장을 처음 해보는지라 어떻게 사람들을 이끌어야하는지 모르겟다.

 

그래서 주로 과제를 어떻게 진행할지 다 같이 고민하는 시간을 가지기 위한 생각을 많이했다.

 

'WIL' 카테고리의 다른 글

내일배움캠프 WIL 24.11.10  (1) 2024.11.10
내일배움캠프 2주차 WIL + 파이썬 데이터 정복  (4) 2024.10.13

+ Recent posts