[공부 자료 : Must Have 데싸노트의 실전에서 통하는 머신러닝]
# 10가지 대표 ML 알고리즘 정리
1. 선형회귀 (Liear regression)
2. 로지스틱회귀 (Logistic regression)
3. K-최근접 이웃 (KNN)
4. 나이브 베이즈 (Naive Bayes)
5. 결정 트리 (Decision Tree)
6. 랜덤 포레스트 (Random Forest)
7. XG 부스트 (XG Boost)
8. 라이트GBM (LightGBM)
9. K-평균 군집화 (K Means Clustering)
10. 주성분 분석 (PCA)
# Artificial Intelligence, Machine Learning, Deep Learning
인공지능
인공지능 : 인간의 뇌를 모방하는 모든 프로그램 (자율주행, 알파고, 쇼핑몰 추천, 챗봇 등)
ㄴ 머신러닝 : 데이터를 기반으로 학습 → 예측 or 데이터의 특성을 찾아냄
ㄴ 딥러닝 : 머신러닝 알고리즘 中 하나, 인공신경망에서 진화 (주로 이미지, 비디오, 자연어 분석에 사용)
머신러닝
전통적인 프로그램 : 사람이 모델을 만든다 → 프로그램은 모델에 데이터를 입력하여 출력을 얻는다
머신러닝 : 사람이 만든 알고리즘에 입력값과 정답값을 넣어준다 → 프로그램이 입력값과 정답값의 관계를 찾는다
머신러닝 알고리즘은 관계를 바탕으로 새로운 프로그램(모델)을 만든다
새로운 모델에 새로운 입력값을 넣어 예측값을 얻는다
딥러닝 (심층 학습)
인공신경망을 기반으로 한 특수한 머신러닝 기법
입력층과 출력층 사이에 은닉층을 두어 인간의 신경망처럼 작동
# 머신러닝 기법
지도(Supervised) 학습 : 입력값과 정답 사이의 관계를 분석하여 예측 모델을 만든다
회귀 (Regression) : 예측 결과값이 연속성을 지닌다
분류 (Classification) : 예측 결과값이 불연속성을 지닌다 (클래스)
비지도(Unsupervised) 학습 : 정답이 없는 데이터를 학습한다
군집화 (clustering) : 비슷한 데이터끼리 묶어준다
변환 (Transformation) : 목적에 따라 데이터를 다른 형태로 변환한다
연관 (Association) : 장바구니 분석, 유사 구매 목록의 고객끼리 비교하여 서로의 장바구니에 없는 새로운 물건을 추천
강화(Reinforcement) 학습 : 행동에 대한 보상/처벌을 기반으로 학습한다
보상을 받는 행동을 유도하고, 처벌을 받는 행동을 피하게끔 한다 (ex. 알파고)
# 머신러닝 특성
머신러닝 프로세스
MLOps (Machine Learning Operations)
머신러닝 모델을 지속적으로 최신 데이터로 재학습하고, 전 과정을 안정적이고 효율적으로 배포 및 유지
1. 데이터 수집
2. 데이터 전처리 (ex. 피처 엔지니어링)
3. 모델 학습
4. 모델 평가
5. 모델 배포
알고리즘 성능 비교
1. 범용성 : 다양한 케이스에 적용할 수 있는가
2. 속도 : 모델링 및 예측 속도
3. 예측력 : 예측 결과의 정확도
4. 하이퍼파라미터 튜닝 : 모델링에서 튜닝 가능한 옵션의 종류와 기능
5. 시각화 : 모델링 결과에 대한 시각화 가능 수준
6. 해석력 : 모델에 대한 해석의 용이성
머신러닝 핵심 라이브러리
1. Numpy : 다차원 배열에 대한 빠른 처리
2. Pandas : 인간 친화적 자료구조를 제공해 Numpy보다 데이터를 쉽게 읽고 변형
3. Scikit-learn (Sklearn) : 데이터 분석과 머신러닝 관련 기능 지원 (데이터 전처리, 모델링, 모델 평가 등)
4. Matplotlib : 시각화
5. Seaborn : 시각화, Matplotlib보다 쉽고 깔끔
6. Scipy : 수학, 통계, 신호 처리, 이미지 처리, 함수 최적화에 사용되는 데이터 과학 라이브러리
7. Theano : 수학 표현식, 행렬 값을 조작하고 평가하는 라이브러리
피처 엔지니어링 기법
1. 결측치 처리 : 누락된 데이터를 채운다
2. 아웃라이어 처리 : 크게 벗어나는 값을 제거하거나 조정한다
3. 바이닝 (Binning) : 연속된 수치로 된 데이터를 특정 구간으로 묶는다 (ex. 10대, 20대, ...)
4. 로그 변환 : 데이터에 로그를 씌워 왜곡된 데이터를 정규화한다
5. 더미 변수 (One-hot encoding) : 문자로 된 범주형 데이터를 0과 1을 사용하는 숫자형 데이터로 변경
6. 그룹핑 (Grouping) : 고윳값이 너무 많은 범주형 데이터를 특정 그룹을 묶는다 (ex. 국가명 → 유럽, 아시아, ...)
7. 스케일링 : 각 변수의 데이터 범위(스케일)가 다를 때, 일정하게 맞춰준다
8. 날짜 추출 : 날짜 데이터에서 연/월/일, 요일 등을 추출해 필요한 정보만 사용한다
9. 텍스트 분할 : 텍스트로 된 변수에서 특정 부분의 단어를 빼오거나 특정 기호를 기준으로 나누어 추출한다
10. 새로운 변수 창출 : 주어진 변수들을 사용하여 새로운 변수를 만들어낸다
# 변수
프로그래밍에서의 변수 vs. 통계에서의 변수
프로그래밍에서 변수 : 데이터나 정보를 저장하는 공간
통계에서 변수 : 대상의 특성
인덱스 (행, row) : 학생
변수 (열, col) : 키, 몸무게, 성적, ...
독립 변수와 종속 변수
독립(independent) 변수 : 예측에 사용된다 (feature, feature 변수)
종속(dependent) 변수 : 예측하려는 대상 (target, target 변수, 목표 변수)
ex_1) 학생의 신체 정보(키, 몸무게)를 바탕으로 성적 예측하기
독립 변수 : 키, 몸무게
종속 변수 : 성적
ex_2) 키, 몸무게, 성별을 이용하여 보험료를 예측하기
독립 변수 : 키, 몸무게, 성별
종속 변수 : 보험료
매개 변수 (결과에 영향을 준다) : 사고 발생률
# 라이브러리 : Pands, Numpy
- Pandas vs. Numpy
Pandas : 사람이 읽기 쉬운 형태의 자료구조를 제공
종류 : Pandas series (col이 하나), Pandas DataFrame (col이 둘 이상)
입출력 : SQL, 엑셀, CSV, 데이터베이스
장점 : 하나 이상의 자료형을 원소로 가질 수 있다
테이블 형식의 작업(SQL과 같은 쿼리나 조인)이 가능
단점 : 2차원 이하 배열의 데이터까지 가능
메모리가 상대적으로 많이 필요
속도가 느림
Numpy : 컴퓨터가 계산하기 좋은 형태의 자료구조를 제공 (col 명이 없다)
입출력 : npv, npz, txt
연산 : 행렬 및 벡터 연산 기반
장점 : 3차원 이상의 배열도 가능
메모리가 상대적으로 조금 필요
속도가 빠름
단점 : 같은 자료형만 원소로 가질 수 있음
- Pandas
read_csv( ) : Pandas로 csv 파일 불러오기
import pandas as pd
file_url = 'https://media.githubusercontent.com/media/musthave-ML10/data_source/main/sample.csv'
sample = pd.read_csv(file_url)
sample
head( ) : 상위 5개 인덱스만 출력
sample.head()
sample.head(3) # 상위 3개 인덱스 출력
tail( ) : 하위 5개 인덱스만 출력
sample.tail()
sample.tail(10) # 하위 10개 인덱스 출력
info( ) : 데이터 요약 정보
sample.info()
RangeIndex : 데이터 행 수
entries : 인덱스 번호
Datacolums : 변수 개수
Column : 변수명
Non-Null Count : Null이 아닌 데이터 수
Dtype : 자료형
Pandas 주요 자료형
object : 문자열
int64 : 소수점 없는 숫자
float64 : 소수점 있는 숫자
bool : 불리언
datetime64 : 날짜/시간
describe( ) : col별 데이터 통계 정보
sample.describe()
count : 데이터 개수
mean : 평균
std : 표준편차
min, max : 최솟값, 최댓값
25%, 50%, 75% : 사분위수
DataFrame( ) : DataFrame 직접 만들기
# Dictionary -> DataFrame
sample_dic = {'name' : ['kim', 'lee', 'park'], 'age' : [23, 22, 21]}
pd.DataFrame(sample_dic)
# List -> DataFrame
sample_list = [[1, 2], [3, 4], [5, 6], [7, 8]]
pd.DataFrame(sample_list, columns = ['var_1', 'var_2'], index = ['a', 'b', 'c', 'd'])
DataFrame['col명 '] : DataFrame col 기준 인덱싱
file_url = 'https://media.githubusercontent.com/media/musthave-ML10/data_source/main/sample_df.csv'
sample_df = pd.read_csv(file_url, index_col = 0) # index_col = 0 : 0번째 col을 index로 지정
sample_df
# col 1개 인덱싱
sample_df['var_1'] # 한 줄 데이터 = Pandas Series
# col 2개 인덱싱
sample_df[['var_1', 'var_2']]
DataFrame.loc['index 명'] : DataFrame row 기준 인덱싱
# row 1개 인덱싱
sample_df.loc['a']
# row 3개 인덱싱
sample_df.loc[['a', 'b', 'c']]
# row 3개 인덱싱
sample_df.loc['a':'c'] # 'a' row 이상, 'c' row 이하
DataFrame.iloc[index 번호] : DataFrame row 기준 인덱싱
sample_df.iloc[[0, 1, 2]]
sample_df.iloc[0:2] # 0번 row 이상, 2번 row 미만
DataFrame.iloc[index 번호, col 번호] : Dataframe row & col 인덱싱
sample_df.iloc[0:3, 2:4] # [0번 row 이상, 3번 row 미만] & [2번 col 이상, 4번 col 미만]
DataFrame.drop('index 명') : row 삭제
# 'a' row 삭제
sample_df.drop('a')
# 'a', 'b' row 삭제
sample_df.drop(['a', 'b'])
sample_df # 원본은 변화가 없다
DataFrame.drop('col 명', axis = 1) : col 삭제
# 'var_1' col 삭제
sample_df.drop('var_1', axis = 1)
# 'var_1', 'var_2 col' 삭제
sample_df.drop(['var_1', 'var_2'], axis = 1)
sample_df # 원본은 변화가 없다
DataFrame.reset_index( ) : 현재 index를 변수(col)로 빼내기
새로운 index에는 0부터 번호를 부여
sample_df.reset_index()
sample_df # 원본은 변화가 없다
DataFrame.reset_index(drop = True) : 현재 index를 삭제하기
sample_df.reset_index(drop = True)
sample_df # 원본은 변화가 없다
DataFrame.set_index('col 명') : 기존 변수(col)을 index로 설정하기
sample_df.set_index('var_1')
sample_df # 원본은 변화가 없다
DataFrame.count( ) : 변수(col)별 데이터 개수
DataFrame.sum( ) : 변수(col)별 합
DataFrame.mean( ) : 변수(col)별 평균
DataFrame.media( ) : 변수(col)별 중위값
DataFrame.var( ) : 변수(col)별 분산
DataFrame.std( ) : 변수(col)별 표준편차
sample_df.count()
sample_df.sum()
sample_df.mean()
sample_df.median()
sample_df.var()
sample_df.std()
DataFrame.aggregate( ) : 변수(col)별 통계값을 모아서 보기
sample_df.aggregate(['sum', 'mean'])
sample_df.aggregate(['var', 'std'])
DataFrame.groupby('col 명') : 해당 변수(col)에 대하여 그룹화 시키고 통계를 구한다
file_url = 'https://media.githubusercontent.com/media/musthave-ML10/data_source/main/iris.csv'
iris = pd.read_csv(file_url)
iris.head()
# iris의 class 변수에는 'versicolor', 'virginica', 'setosa'가 있다 -> 그룹화
iris.groupby('class').mean()
# 모든 setosa의 sepal length 평균, sepal width 평균, petal length 평균, petal width 평균
# ...
iris.groupby('class').agg(['count', 'mean']) # 여러 개의 통계 분석을 한 번에 진행
DataFrame['col 명'].unique() : 변수(col)에 중복되지 않는 고유값
DataFrame['col 명'].nunique() : 변수(col)에 중복되지 않는 고유값의 종류 개수
DataFrame['col 명'].value_counts() : 변수(col)에 중복되지 않는 고유값이 총 몇 개씩 있는가
iris['class'].unique()
# array(['versicolor', 'virginica', 'setosa'], dtype=object)
iris['class'].nunique()
# 3
iris['class'].value_counts()
# versicolor 50
# virginica 50
# setosa 50
# Name: class, dtype: int64
'머신러닝' 카테고리의 다른 글
06. 지도 학습 (분류, 회귀) - K-최근접 이웃 (KNN) : 와인 등급 예측하기 (0) | 2023.01.22 |
---|---|
05. 지도 학습 (분류) - 로지스틱 회귀 : 타이타닉 생존자 예측하기 (0) | 2023.01.21 |
04. 지도 학습 (회귀) - 선형회귀 : 보험료 예측하기 (0) | 2023.01.21 |
03. Numpy (0) | 2023.01.14 |
02. Pandas (0) | 2023.01.13 |