일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 8주차 회고
- 9주차 회고
- 2024 3회 정보처리기사
- sk 네트웍스 ai family캠프
- 24주차 회고
- 20주차
- sk networks family ai 캠프
- skn_10기
- 14주차
- sk networks family ai camp
- 16주차 회고
- sk family ai 캠프
- sk 네트웍스 ai 캠프
- 1월 회고
- 25주차 회고
- 22주차
- 21주차
- 2월 회고
- playdata
- 6주차 회고
- sqld 후기
- 2024 정보처리기사
- 7주차 회고
- 5주차 회고
- 머신러닝
- 3주차 회고
- 17주차 회고
- 18주차 회고
- sk네트웍스 family ai 캠프
- 26주차
- Today
- Total
kqe123 님의 블로그
[플레이데이터 SK네트웍스 Family AI 캠프 10기] 5주차 회고 본문
1. Intro
5주차가 끝이 났다. 5주차엔 머신러닝을 위한 툴(Pandas, Numpy), 그리고 머신러닝의 과정(EDA, Data Cleaning 등)의 일부를 배웠다. 이번엔 배울 내용이 꽤나 많아 모든 걸 정리할 순 없겠다 싶어서 몇몇 부분은 빼기도 했다. 이제부터 확실히 난이도나 내용면에서도 어려워졌다는걸 몸소 느꼈다.
2. 배웠던 내용
다 적기엔 내용이 너무 많으니 중요한 것만 골라서 적겠다.
Pandas
1. NULL값 확인
- df.isnull(): 값이 null인지를 True/False로 반환
- 집계 함수: 집계 함수를 사용할수록 DataFrame의 차원이 1단계 낮아짐.
2. 도메인값 확인
- value_counts(): 각 도메인의 개수를 세는 함수
- unique(): 고유한 도메인값 출력
- nunique(): 고유 도메인의 개수 출력
3. map()
- map(): Series 객체의 데이터를 변환하는 함수로, 딕셔너리나 함수를 이용하여 데이터를 변환할 수 있음.
4. apply()
- apply(): DataFrame 객체의 데이터를 변환하는 함수로, 복잡한 함수나 여러 컬럼에 대한 연산을 수행할 때 사용.
5. 집합
- 여러 컬럼을 가져오고 싶을 때는 이중 대괄호 [[ ]]를 사용하여 컬럼을 선택합니다.
6. Pivot_table
- pivot_table: 두 컬럼을 기준으로 데이터를 요약, 집계하는 데 사용.
7. Groupby
- groupby: SQL의 GROUP BY처럼 특정 컬럼을 기준으로 데이터를 묶고, 통계 함수를 적용할 수 있음.
- get_group(): 특정 그룹의 데이터 추출.
8. groups.agg()
- agg(): 여러 집계 함수를 동시에 적용할 수 있음.
9. axis의 계산 방향
- axis=0은 행(index), axis=1은 열(column)
- axis를 지정했다는건 해당 축을 대상으로 연산을 진행한다. 연산 방향을 지정하는 것이 아님!
- drop(axis=1)이라면 컬럼을 대상으로 세로 방향로 컬럼을 지움,
- sum(axis=0)이라면 행을 대상으로 합하므로 세로 방향으로 계산이 됨,
10. 두 개의 데이터프레임 조작
- merge(): SQL JOIN처럼 두 DataFrame을 합치는 함수.
- concat(): DataFrame과 Series를 이어 붙일 때 사용.
Matplotlib
1. 기본적인 사용법
- plt.figure(): 새로운 그림 객체 생성.
- ax.plot(): 그래프를 그릴 때 사용.
- set_xlabel(): x축 라벨 설정, set_ylabel(): y축 라벨 설정.
- fig.suptitle(): 전체 제목 설정.
- tick_params(): 눈금의 스타일을 설정.
2. 선 그래프, 수평선 및 수직선
- plt.plot(): 일반적인 선 그래프를 그림
- plt.axvline(x, ymin, ymax, kwargs): x 좌표에서 수직선을 그림. ymin과 ymax는 y축 범위를 설정
- plt.axhline(y, xmin, xmax, kwargs): y 좌표에서 수평선을 그림. xmin과 xmax는 x축 범위를 설정
3. 막대 그래프
- plt.bar(x, height, width, kwargs): 각 x값에 대해 height 높이를 가진 막대 그래프를 그림
- plt.xticks(x, labels): x축 눈금 위치와 해당 레이블을 설정
- plt.xticks() vs ax.set_xticks():
- plt.xticks()는 전체 Figure 객체의 x축 눈금을 설정
- ax.set_xticks()는 특정 Axes 객체에 대한 x축 눈금을 설정
4. 산점도
- plt.scatter(x, y): x, y 좌표를 이용해 산점도를 그립니다. 두 변수 간의 관계를 시각적으로 표현하는 데 유용함
- np.random.randn(n): 평균 0, 표준편차 1인 가우시안 분포에서 n개의 난수를 생성
- np.random.rand(n): 0과 1 사이에서 n개의 난수를 생성
5. 히스토그램
- plt.hist(x, bins, kwargs): 데이터 x를 기준으로 히스토그램을 그립니다. bins는 구간의 개수를 설정
- histtype을 설정하여 히스토그램의 형태를 변경할 수 있음
5. 오차 막대
- plt.errorbar(x, y, yerr, xerr, kwargs): 선 그래프에 x값과 y값의 오차를 시각적으로 표현하는 오차 막대를 추가
6. 파이 차트
- plt.pie(x, labels, kwargs): x는 비율, labels는 각 구간의 레이블을 나타내는 파이 차트를 그림
7. 히트맵
- plt.get_cmap(): 색상 맵을 가져오는 함수로, 데이터의 색상을 설정할 때 유용
- plt.matshow(arr, cmap=...): 2D 배열 데이터를 색상으로 시각화하는 히트맵을 생성
EDA( 탐색적 데이터 분석 )
1. EDA 개요
- EDA는 데이터를 이해하고 분석하기 위해 시각화, 통계적 요약, 패턴 탐색 등을 수행하는 과정
2. 데이터 로드 및 확인
- Load dataset: 데이터를 로드하여 분석을 시작
- df.info(): 데이터의 모양, 컬럼별 데이터 타입, 결측치 등을 확인할 수 있음
- head() & tail(): 데이터의 처음과 끝 부분을 확인할 수 있음
3. 데이터 유형
- 수치형 데이터: 숫자로 표현된 데이터 (예: 나이, 강수량 등)
- 범주형 데이터: 그룹이나 범주로 표현된 데이터 (예: 성별, 영화 별점 등)
4. 수치형 데이터 및 범주형 데이터 분석
- 수치형 데이터와 범주형 데이터를 따로 추출하여 분석 가능
5. 수치형 데이터 분석
- 첨도(kurtosis): 분포의 날카로운 정도를 나타냅니다. 첨도가 높으면 극단적인 값들이 많이 존재합니다.
- 첨도를 낮추는 방법: log 또는 제곱근 변환
- 왜도(skewness): 데이터 분포의 비대칭성 정도를 나타냅니다.
- 왜도를 낮추는 방법: log 또는 제곱근 변환
- sns.displot(): 데이터의 분포를 시각화합니다.
- 이상치 분석: 이상치는 일반적인 분포에서 벗어난 값을 의미하며, sns.boxplot()으로 시각화할 수 있습니다.
6. 범주형 데이터 분석
- 상관관계 분석: corr()를 사용하여 변수 간의 상관관계를 분석
- 교차분석: 범주형 변수 간의 관계를 분석하기 위해 pd.crosstab()을 사용 가능
- pivot_table(): 집계 함수(합계, 평균 등)를 사용하여 교차표를 분석 가능
Data Cleaning (데이터 정리)
1. 결측치 (Missing Values)
- 결측치는 데이터셋에서 누락된 값
- 결측치 확인: isnull()과 sum()을 이용해 결측치의 개수를 확인 가능
- 결측치 처리 방법:
- 결측치 제거: df.drop()으로 결측치를 포함한 행이나 열을 제거 가능
- 결측치 대체: df.fillna()로 결측값을 지정한 값으로 채울 수 있음
2. 결측치 확인 및 처리
- 결측치의 합계를 컬럼별로 구하여 백분율로 확인할 수 있고, 이를 통해 결측치가 얼마나 큰 영향을 미치는지 파악할 수 있음.
- 결측치 제거 및 대체:
- 열 방향으로 제거: df.drop(axis=1)을 사용하여 특정 열을 제거
- 특정 열에서 NaN 값이 있는 행 제거: df.dropna(subset=[…])을 사용하여 특정 열에서 NaN 값을 포함한 행을 제거
- 결측값 채우기: df.fillna(값)으로 결측값을 특정 값으로 채움
3. 데이터 유일성 처리 및 완결성 처리
- 유일성 처리: 중복된 데이터를 처리하여 데이터의 유일성을 확보
- 완결성 처리: 결측치를 처리하여 데이터의 완전성을 확보
인공지능, 머신러닝, 딥러닝 포함 관계
- 인공지능(AI): 문제 해결, 추론, 학습 등의 인간 지능을 모방하는 기술 및 학문
- 머신러닝(ML): 데이터에서 패턴을 학습하고 추론하는 기술
- 딥러닝(DL): 인공신경망(ANN)을 기반으로 데이터에서 특징을 자동으로 학습하는 머신러닝 기술
전통적 프로그래밍과 머신러닝의 차이
- 전통적 프로그래밍: 데이터 + 프로그램(함수, 알고리즘) → 결과
- 머신러닝: 데이터 + 결과 → 프로그램(함수, 알고리즘)
머신러닝 과정
- 데이터 수집: 필요한 데이터를 수집
- 전처리: 데이터를 정리하고 필요없는 데이터를 제거
- 모델 선택: 문제에 맞는 머신러닝 모델 선택
- 훈련: 모델에 데이터를 학습시킴
- 평가: 모델의 성능 평가
- 예측: 새로운 데이터에 대해 예측 수행
머신러닝 종류
- 지도학습(Supervised Learning): 데이터와 정답(레이블)을 기반으로 예측
- 비지도학습(Unsupervised Learning): 정답 없이 데이터의 구조와 특징을 찾음
- 강화학습(Reinforcement Learning): 최적의 액션을 선택하는 방식으로 학습 (예: 알파고)
머신러닝 기본용어
- Feature: 독립변수, 설명변수
- Label, Target, Class: 종속변수, 정답 데이터
- Parameter: 모델이 학습과정에서 업데이트하는 파라미터
- Hyperparameter: 사용자가 직접 설정하는 파라미터
- Loss: 손실, 예측값과 정답값의 차이를 나타내는 지표
- Metric: 모델의 성능을 평가하는 지표
Sklearn 간단 실습
- Sklearn: Python의 대표적인 머신러닝 라이브러리
- Easydict: Python의 dict를 객체처럼 사용하게 해주는 라이브러리
실습 예시: 유방암 진단 데이터셋
- 데이터 로드 및 확인
- feature_names와 target_names를 확인
- train_test_split()을 사용해 훈련 세트와 테스트 세트로 나눔
- 훈련 세트에서 target(레이블)을 떼어냄
- StandardScaler()로 데이터 스케일링
- 모델 훈련 및 평가
- 모델을 훈련시킨 후 평가 점수를 확인
선형대수학
- Scalar: 0차원 물리량 (자연수, 정수, 실수 등)
- Vector: 1차원 물리량 (scalar의 집합)
- Matrix: 2차원 물리량 (vector의 집합)
Numpy
- Numpy: 고성능 수치 계산을 위한 Python 라이브러리
- 배열: Numpy 배열은 Python 리스트보다 빠르고 메모리를 적게 사용
- np.arange(): 일정 간격의 숫자 배열 생성
- np.zeros(), np.ones(), np.full(): 각각 0, 1, 특정 값으로 초기화된 배열 생성
배열 연산 및 기능
- np.vstack(): 배열을 수직으로 결합
- np.hstack(): 배열을 수평으로 결합
- np.newaxis: 배열에 새로운 축 추가
- ravel(): 배열을 평탄화
- arr.dtype: 배열의 데이터 유형 확인
- arr.astype(): 데이터 유형 변환
조건 및 마스킹
- np.any(): 조건에 참인 요소가 하나라도 있으면 True
- np.all(): 조건에 모두 참이면 True
- 마스킹: 불리언 배열을 마스크로 사용해 특정 부분 선택
난수 생성
- np.random.randint(): 임의의 정수 반환
- np.random.randn(): 표준 정규 분포로부터 난수 생성
- np.random.choice(): 1차원 배열로부터 임의의 샘플 생성
Feature Extraction (특징 추출)
특징 추출은 데이터에서 중요한 정보를 뽑아내는 과정으로, 이를 통해 모델링에 적합한 형태로 데이터를 변환하고, 예측 정확도를 높이기 위해 데이터를 준비함.
1. 수치형 데이터 타입 변환
- astype(): 특정 자료형으로 변환하는 함수, 예를 들어, 수치형 데이터를 int32나 float32로 변환할 수 있다.
- Categorical 자료형: 범주형 데이터를 처리하기 위한 자료형으로, 데이터를 고정된 범주로 구분할 수 있음. 이를 통해 메모리 효율성을 높이고, 빠른 연산이 가능함.
2. 범주형 데이터 타입 변환
- 수치형 데이터와 마찬가지로, 범주형 데이터도 Categorical 자료형으로 변환하여 효율적인 처리가 가능함.
3. 문자열 처리
- 공백 제거: 문자열의 앞뒤 공백을 제거
- 문자열 포함 여부 확인: 특정 텍스트가 문자열에 포함되어 있는지 확인하여 데이터를 정리하고 의미를 파악하는 데 유용
- 문자열 분리: 문자열을 특정 기준으로 분리하여 원하는 정보만 추출 가능
4. 피봇 테이블과 그룹핑
- 피봇 테이블: 데이터를 특정 기준에 따라 요약하고, 다른 변수와의 관계를 파악하는 데 유용
- 그룹핑: 데이터를 그룹화하여 특정 컬럼의 평균, 합계 등을 계산 가능
5. Datetime 적용
- 날짜 및 시간 관련 데이터를 처리하는 방법으로, 날짜를 날짜 형식으로 변환하여 시간 분석에 유용
6. tqdm
- Progress Bar를 사용하여 루프 진행 상태를 시각적으로 표시 가능
Data Encoding (데이터 인코딩)
데이터 인코딩은 범주형 데이터를 수치형 데이터로 변환하는 과정으로, 이를 통해 머신러닝 모델에서 범주형 데이터를 처리할 수 있게 됨.
1. One Hot Encoding
- 범주형 데이터의 각 고유한 값을 벡터의 한 차원으로 변환하고, 해당 값에만 1을 할당함. 단점은 범주 수가 많을 경우 데이터 차원이 매우 커질 수 있음.
2. Mean Encoding
- 범주형 데이터를 해당 범주별 목표 변수(타깃 변수)의 평균값으로 변환함.
3. Label Encoding
- 범주형 데이터를 순서대로 정수로 변환함. 각 범주를 0, 1, 2, ... 순으로 변환함.
4. Target Encoding
- 범주형 데이터를 해당 범주별 목표 변수의 통계적 정보(주로 평균값)로 변환함.
5. Ordinal Encoding
- 순서가 있는 범주형 데이터를 정수로 변환하는 방법임. 예를 들어, 'Low', 'Medium', 'High'와 같은 순서가 있는 범주를 0, 1, 2로 변환할 수 있음.
Data Scaling (데이터 스케일링)
데이터 스케일링은 데이터의 값을 일정한 범위로 변환하거나, 데이터 간의 차이를 줄이기 위해 값을 조정하는 과정으로, 이는 머신러닝 모델의 성능 향상에 중요
1. Normalizer
- 데이터를 유클리드 거리(L2 norm)가 1이 되도록 변환함. 주로 각 행이 단위 벡터가 되도록 스케일링함.
2. Transformer
- 데이터를 특정 함수나 규칙에 따라 변환하는 방법으로, PowerTransformer나 QuantileTransformer가 있음. 이들은 데이터를 정규 분포 형태로 변환하거나 균등분포로 변환하는 데 사용됨.
3. Scaler
- 데이터를 일정한 범위나 분포로 변환하는 기법
- StandardScaler: 평균을 0, 분산을 1로 조정하는 표준 정규분포 방식
- RobustScaler: 평균과 분산 대신 중간값과 사분위수를 사용하여 이상치에 강한 방식
- MinMaxScaler: 모든 피처들을 0~1 사이의 범위로 조정
- MaxAbsScaler: 모든 피처들의 절댓값이 0과 1 사이에 있도록 조정
Transformation + Scaling을 함께 사용하기
- 데이터를 먼저 스케일링한 후 변환하는 경우, 두 그래프의 분포도가 달라질 수 있음
- 변환을 먼저 하고 스케일링을 적용하면, 두 그래프의 분포도가 유사해지는 장점이 있음.
3. 느낀점
- Facts (내가 한 일)
머신러닝에 필요한 툴인 Numpy, Pandas, Matplotlib을 배우고, 머신러닝 과정인 EDA, Data Cleaning, Feature Extraction, Data Encoding, Data Scaling을 배웠다.
- Feelings ( 나의 감정적인 반응, 느낌 )
내용이 평소의 3~4배정도는 서 흐름을 따라가기 꽤 어려웠다. 내용을 들으면서도 '내가 잘 듣고 있는 게 맞나?' 의심이 되기도 했지만 강사님이 해주셨던 말인 "잘하고 있나? 의심이 되면 잘하고 있는것이다."를 다시 되새기며 임했다. 그리고 강사님이 주신 코드가 너무나도 많았기에 중요한 핵심만 골라서 적어도 이 분량이 나왔다. 그래서 코드를 이해하고 넘어가는데 집중을 했다.
- Findings ( 배운 것 )
EDA를 통해 데이터 분석을 어떻게 하는지 감을 익혔는데, 데이터 분석은 정말 인사이트가 필요하다는 생각이 들었다. 그냥 무턱대고 평균, 합계만 출력한다고 해서 인사이트가 얻어지는게 아닐뿐더러 배경지식도 어느정도 필요해 보인다.
- Future ( 미래 )
앞으로는머신러닝 여러 모델들, 머신러닝 관련한 심화 개념들을 배울 예정인데, 내용이 꽤나 많아서 조금 긴장이 된다. 강사님이 kaggle에 머신러닝 경진대회를 열었는데 아직 코드를 짜보지 않았다. 내일부터 경진대회에 열심히 참가해볼 생각이다.
'부트캠프 > sk 네트웍스 ai 캠프' 카테고리의 다른 글
[플레이데이터 SK네트웍스 Family AI 캠프 10기] 7주차 회고 (0) | 2025.03.02 |
---|---|
[플레이데이터 SK네트웍스 Family AI 캠프 10기] 6주차 회고 (1) | 2025.02.16 |
[플레이데이터 SK네트웍스 Family AI 캠프 10기] 1월(4주차) 회고 (0) | 2025.02.01 |
[플레이데이터 SK네트웍스 Family AI 캠프 10기] 3주차 회고 (1) | 2025.01.30 |
[플레이데이터 SK네트웍스 Family AI 캠프 10기] 2주차 회고 (0) | 2025.01.19 |