λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
1️⃣ AI•DS/πŸ“• λ¨Έμ‹ λŸ¬λ‹

[01,02] λ¨Έμ‹ λŸ¬λ‹ κ°œμš”

by isdawell 2022. 3. 13.
728x90

01. 파이썬 기반의 λ¨Έμ‹ λŸ¬λ‹κ³Ό μƒνƒœκ³„ 이해 


import numpy as np

πŸ‘€ Numpy ν•¨μˆ˜ 및 λ©”μ„œλ“œ 

  • np.array() 
  • np.arange() 
  • np.zeros() 
  • np.ones() 

πŸ‘€ 인덱싱 [ ] ,  μŠ¬λΌμ΄μ‹± [ : ]

πŸ‘€ ν–‰λ ¬μ˜ μ •λ ¬ : np.sort() , ndarray.sort(), np.argsort() 

πŸ‘€ μ„ ν˜•λŒ€μˆ˜ μ—°μ‚° : np.dot() 

 

import pandas as pd

πŸ‘€ DataFrame 

  •   데이터 뢈러였기 

  •   정보 ν™•μΈν•˜κΈ° 

euron 동아리 λ°œν‘œμžλ£Œ 일뢀

 

 

πŸ‘€ μ •λ ¬, aggregation ν•¨μˆ˜, Groupby 적용 

  • DataFrame.sort_values( by = , ascending = True, inplace = True) 
  • μ—°μ‚°ν•¨μˆ˜ : min , max, sum, median, count (β€» axis = 0 ν–‰, axis = 1 μ—΄ λ°©ν–₯ 적용) 
  • DataFrame.groupby() : λ°˜λ“œμ‹œ aggregation μ—°μ‚° ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. 

πŸ‘€ κ²°μ† 데이터 처리 

  • DataFrame.isna().sum() : 결손 데이터 개수 확인 
  • DataFrame.fillna() : 결손 데이터λ₯Ό λ‹€λ₯Έ κ°’μœΌλ‘œ λŒ€μ²΄ κ°€λŠ₯. inplace=True 둜 지정해야 μ‹€ν–‰ 값이 반영

πŸ‘€ apply lambda 

  • DataFrame[μ—΄].apply(lambda x : ν•¨μˆ˜μ‹) 
  • νŠΉμ • μΉΌλŸΌμ— λŒ€ν•΄ νŠΉμ • ν•¨μˆ˜λ₯Ό 각 μ…€μ˜ 값에 적용 
  • if else λ¬Έ : list comprehension μ‚¬μš© 

 

 

02. μ‚¬μ΄ν‚·λŸ°μœΌλ‘œ μ‹œμž‘ν•˜λŠ” λ¨Έμ‹ λŸ¬λ‹ 


πŸ“Œ 2.2 데이터 뢄석 ν”„λ‘œμ„ΈμŠ€ 

 

πŸ“Œ 2.3 μ‚¬μ΄ν‚·λŸ° 기반 ν”„λ ˆμž„μ›Œν¬ 

1. μ§€λ„ν•™μŠ΅

  • λΆ„λ₯˜ λ¬Έμ œμ™€ νšŒκ·€ 문제둜 ꡬ성 → Estimator 클래슀 
  • fit() κ³Ό predict() λ‚΄λΆ€ κ΅¬ν˜„ 
  • Evaluation ν•¨μˆ˜, ν•˜μ΄νΌνŒŒλΌλ―Έν„° νŠœλ‹ 클래슀의 경우 이λ₯Ό 인자둜 λ°›μŒ 

2. λΉ„μ§€λ„ν•™μŠ΅ 

  • μ°¨μ›μΆ•μ†Œ, ν΄λŸ¬μŠ€ν„°λ§, ν”Όμ²˜ μΆ”μΆœ λ“±μ˜ 클래슀 
  • fit() κ³Ό transform() λ‚΄λΆ€ κ΅¬ν˜„ (ν•˜λ‚˜λ‘œ κ²°ν•©ν•œ fit_transform() 제곡) 

  β–· fit() : μž…λ ₯ λ°μ΄ν„°μ˜ ν˜•νƒœμ— 맞좰 데이터λ₯Ό λ³€ν™˜ν•˜κΈ° μœ„ν•œ 사전 ꡬ쑰 맞좀 

  β–· transform() : 이후 μž…λ ₯ λ°μ΄ν„°μ˜ 차원 λ³€ν™˜, ν΄λŸ¬μŠ€ν„°λ§ λ“± μ‹€μ œ μž‘μ—… μˆ˜ν–‰ 

 

3. μ‚¬μ΄ν‚·λŸ°μ˜ μ£Όμš” λͺ¨λ“ˆ 

πŸ‘€ ν”Όμ²˜μ²˜λ¦¬ 

  • Sklearn.preprocessing : 데이터 μ „μ²˜λ¦¬μ— ν•„μš”ν•œ κΈ°λŠ₯. 인코딩, μ •κ·œν™”, μŠ€μΌ€μΌλ§
  • Sklearn.feature_selection : μ•Œκ³ λ¦¬μ¦˜μ— 큰 영ν–₯을 λ―ΈμΉ˜λŠ” ν”Όμ²˜λ₯Ό μš°μ„ μˆœμœ„λŒ€λ‘œ μ…€λ ‰μ…˜ μž‘μ—… μˆ˜ν–‰ 
  • Sklearn.feature_extraction : ν…μŠ€νŠΈ λ°μ΄ν„°λ‚˜ 이미지 λ°μ΄ν„°μ˜ λ²‘ν„°ν™”λœ ν”Όμ²˜ μΆ”μΆœ. Countvectorizer, tf-idf vectorizer λ“± 

πŸ‘€ μ°¨μ›μΆ•μ†Œ 

  • Sklearn.decomposition : μ°¨μ›μΆ•μ†Œ κ΄€λ ¨λœ μ•Œκ³ λ¦¬μ¦˜. PCA, NMF, Truncated SVD 

πŸ‘€ 데이터 뢄리, 검증 & νŒŒλΌλ―Έν„° νŠœλ‹  

  • Sklearn.model_selection : ꡐ차검증을 μœ„ν•œ ν•™μŠ΅/ν…ŒμŠ€νŠΈ 데이터 뢄리, 졜적 νŒŒλΌλ―Έν„° μΆ”μΆœ. train_test_split, GridSearchCV λ“± 

πŸ‘€ 평가

  • Sklearn.metrics : μ„±λŠ₯ μΈ‘μ • 방법 제곡. Accuracy, Precision, Recall, ROC-AUC, RMSE λ“± 

πŸ‘€ ML μ•Œκ³ λ¦¬μ¦˜ 

 

πŸ“Œ 2.4 Model Selection λͺ¨λ“ˆ μ†Œκ°œ 

πŸ‘€ ν•™μŠ΅/ν…ŒμŠ€νŠΈ 데이터 μ„ΈνŠΈ 뢄리 

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, t_test = train_test_split(data, label, test_size = 0.2, random_state=11)
  • shuffle : 데이터λ₯Ό λΆ„λ¦¬ν•˜κΈ° μ „ λΆ„μ‚°μ‹œμΌœ 효율적인 ν•™μŠ΅/ν…ŒμŠ€νŠΈ 데이터 뢄리 
  • random_state : ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ λ™μΌν•œ ν•™μŠ΅/데이터 μ„ΈνŠΈλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ μ£Όμ–΄μ§€λŠ” λ‚œμˆ˜κ°’ 

πŸ‘€ ꡐ차검증 

  • 과적합 방지 
  • 데이터 νŽΈμ€‘μ„ 막기 μœ„ν•΄ λ³„λ„μ˜ μ—¬λŸ¬ μ„ΈνŠΈλ‘œ κ΅¬μ„±λœ ν•™μŠ΅/ν…ŒμŠ€νŠΈ 데이터 μ„ΈνŠΈμ—μ„œ ν•™μŠ΅κ³Ό 평가 μˆ˜ν–‰ 

β“ž ꡐ차검증 κ³Όμ • 

  1. ν΄λ“œ μ„ΈνŠΈ μ„€μ •
  2. for λ£¨ν”„μ—μ„œ 반볡적으둜 ν•™μŠ΅/κ²€μ¦μš© 인덱슀 μΆ”μΆœ
  3. ν•™μŠ΅κ³Ό 예츑 μˆ˜ν–‰ν•΄ 예츑 μ„±λŠ₯ λ°˜ν™˜ 

 

β‘  K-fold cross validation 

from sklearn.model_selection import KFold
kfold = KFold(n_splits = 5)
  • K 개의 데이터 ν΄λ“œ μ„ΈνŠΈλ₯Ό λ§Œλ“€μ–΄ K 번만큼 각 ν΄λ“œ μ„ΈνŠΈμ— ν•™μŠ΅κ³Ό 검증평가λ₯Ό 반볡적으둜 μˆ˜ν–‰ 
  • n_splits  νŒŒλΌλ―Έν„°λ₯Ό μ΄μš©ν•΄ 데이터 μ„ΈνŠΈ 지정 
  • Kfold.split() : ν΄λ“œλ³„ ν•™μŠ΅μš©, κ²€μ¦μš© λ°μ΄ν„°μ˜ 인덱슀λ₯Ό array 둜 λ³€ν™˜ 

β‘‘ Stratified K-fold 

from sklearn.model_selection import StratifiedKFold 
skfold = StratifiedKFold(n_splits = 3)
  • 이산값 ν˜•νƒœμ˜ λ ˆμ΄λΈ”(Y) λ₯Ό 가진 데이터에 ν•œν•΄ 적용 - λΆ„λ₯˜, λ‘œμ§€μŠ€ν‹± νšŒκ·€ λ“± 
  • λΆˆκ· ν˜•ν•œ imbalanced 뢄포도λ₯Ό 가진 Y 데이터 집합을 μœ„ν•œ K ν΄λ“œ 방식 
  • 원본 λ°μ΄ν„°μ˜ Y 뢄포λ₯Ό λ¨Όμ € κ³ λ €ν•œ λ’€ 이 뢄포와 λ™μΌν•˜κ²Œ ν•™μŠ΅/검증 데이터 λΆ„λ°° 

β‘’ cross_val_score() 

from sklearn.model_selection import cross_val_score, cross_validate
  • ꡐ차 검증 과정을 ν•œκΊΌλ²ˆμ— μˆ˜ν–‰ν•΄μ£ΌλŠ” API
  • λ°˜ν™˜κ°’ : λ°°μ—΄ ν˜•νƒœμ˜ μ§€μ •λœ μ„±λŠ₯μ§€ν‘œ μΈ‘μ •κ°’
  • μ£Όμš” νŒŒλΌλ―Έν„°

  • μ˜ˆμ‹œ
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

# dataset

iris = load_iris()

logreg = LogisticRegression() # λ‘œμ§€μŠ€ν‹± νšŒκ·€ 

scores = cross_val_score(logreg, iris.data, iris.target, cv=5) 
# model, train, target, cross validation

print('cross-val-score \n{}'.format(scores))
# [1.    0.9666667   0.933333   0.9   1.]

print('cross-val-score.mean \n{:.3f}'.format(scores.mean()))
# 0.960

 

β‘£ cross_validate() 

  • ꡐ차 검증 과정을 ν•œκΊΌλ²ˆμ— μˆ˜ν–‰ν•΄μ£ΌλŠ” API
  • cross_val_score 와 λΉ„μŠ·ν•˜μ§€λ§Œ, λΆ„ν• λ§ˆλ‹€ ν›ˆλ ¨κ³Ό ν…ŒμŠ€νŠΈμ— κ±Έλ¦° μ‹œκ°„μ„ 담은 λ”•μ…”λ„ˆλ¦¬λ₯Ό λ°˜ν™˜ν•œλ‹€.
  • λ°˜ν™˜κ°’ : dict ν˜•νƒœμ˜ ν΄λ“œλ³„ test_score, fit_time λ“± λ°˜ν™˜ 
  • λ‹€μ€‘ν‰κ°€μ§€ν‘œ : μ—¬λŸ¬κ°œμ˜ 평가 μ§€ν‘œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것이 μž₯점이닀. 
  • μ£Όμš” νŒŒλΌλ―Έν„° 

  • μ˜ˆμ‹œ
from sklearn.model_selection import cross_validate
cross_validate(SVC(gamma='auto'), X_train, y_train, scoring=['accuracy', 'roc_auc'], return_train_score=True)

# {'fit_time': array([0.07761502, 0.07732582, 0.07719207]),
# 'score_time': array([0.06746364, 0.06803942, 0.06800795]),
# 'test_accuracy': array([0.90200445, 0.90200445, 0.90200445]),
# 'test_roc_auc': array([0.99657688, 0.99814815, 0.99943883]),
# 'train_accuracy': array([1., 1., 1.]),
# 'train_roc_auc': array([1., 1., 1.])}

 

πŸ‘€ ꡐ차검증은 ν•™μŠ΅μ— κ³Όμ—° 영ν–₯을 미칠까? 

 

πŸ‘‰ λ‹΅ : ν•™μŠ΅μ— μ°Έμ‘°ν•˜κΈ΄ ν•œλ‹€. ν•˜μ§€λ§Œ, ν•™μŠ΅ κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈμ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ λͺ»ν•œλ‹€

βž• https://huidea.tistory.com/30 ​

 

[Machine learning] μ‰½κ²Œ μ„€λͺ…ν•˜λŠ” Cross Validation ꡐ차검증

index κ΅μ°¨κ²€μ¦μ΄λž€? ꡐ차검증을 μ‚¬μš©ν•˜λŠ” 이유 μ½”λ“œ 및 κ²°κ³Ό  μΆ”κ°€ μ§ˆλ¬Έλ“€ (Stratified K-fold ꡐ차검증) 1. ꡐ차 검증 (cross validation) : λͺ¨λΈμ˜ ν•™μŠ΅ κ³Όμ •μ—μ„œ ν•™μŠ΅ / 검증데이터λ₯Ό λ‚˜λˆŒλ•Œ λ‹¨μˆœνžˆ 1번 λ‚˜

huidea.tistory.com

 

 

 

πŸ‘€ GridSearchCV - ꡐ차검증과 졜적 ν•˜μ΄νΌ νŒŒλΌλ―Έν„° νŠœλ‹μ„ ν•œλ²ˆμ— ⭐⭐⭐

  • ꡐ차검증을 기반으둜 ν•˜μ΄νΌ νŒŒλΌλ―Έν„°μ˜ μ΅œμ κ°’μ„ μ°ΎλŠ” API
  • μ£Όμš” νŒŒλΌλ―Έν„°

  • ν•™μŠ΅ κ³Όμ • 

  • μ˜ˆμ‹œ 

  • Attributes : fit 이후에 확인해볼 수 μžˆλŠ” 좜λ ₯λ¬Ό 

 

πŸ“Œ 2.5 데이터 μ „μ²˜λ¦¬ 

πŸ‘€ Null κ°’ 처리 

  • ν”Όμ²˜λ“€ 쀑 Null 값이 적은 경우 : ν•΄λ‹Ή ν”Όμ²˜μ˜ 평균값 λ“±μœΌλ‘œ λŒ€μ²΄. μ΄λ•Œ ν”Όμ²˜ μ€‘μš”λ„μ— 따라 λŒ€μ²΄κ°’ 선정에 유의!
  • ν”Όμ²˜λ“€ 쀑 Null 값이 λ§Žμ€ 경우 : ν•΄λ‹Ή ν”Όμ²˜λ₯Ό drop ν•˜λŠ” 것이 일반적 
  • Null κ°’μ˜ 많고 적음의 μ ˆλŒ€μ μΈ 기쀀은 μ—†λ‹€. ν•΄λ‹Ή ν”Όμ²˜μ—μ„œμ˜ Null κ°’ λΉ„μœ¨λ‘œ λ”°μ§€λŠ” 것이 μΌλ°˜μ μ΄λ‹€. 

πŸ‘€ 데이터 인코딩  

  • μ•Œκ³ λ¦¬μ¦˜μ— ν•™μŠ΅μ‹œν‚€κΈ° μœ„ν•΄ μΉ΄ν…Œκ³ λ¦¬ν˜• ν”Όμ²˜λ‚˜ ν…μŠ€νŠΈν˜• ν”Όμ²˜λ₯Ό '숫자' ν˜•νƒœλ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” μž‘μ—… 

β‘  LabelEncoder 

from sklearn.preprocessing import LabelEncoder

  • λ¬Έμžμ—΄ 값을 μˆ«μžν˜• μΉ΄ν…Œκ³ λ¦¬ κ°’μœΌλ‘œ λ³€ν™˜ 
  • 일괄적인 μˆ«μžκ°’μœΌλ‘œ λ³€ν™˜λ˜λ©΄μ„œ νŠΉμ • ML μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” μ˜ˆμΈ‘μ„±λŠ₯ μ €ν•˜ 문제 λ°œμƒ 
  • νŠΈλ¦¬κ³„μ—΄μ˜ ML μ•Œκ³ λ¦¬μ¦˜μ—μ„œ μ‚¬μš© μΆ”μ²œ 

 

β‘‘ One-hot Encoding 

from sklearn.preprocessing import OneHotEncoder

  • ν–‰ ν˜•νƒœμ˜ ν”Όμ²˜ 고유 값을 μ—΄ ν˜•νƒœλ‘œ 차원 λ³€ν™˜ 
  • 고유 값에 ν•΄λ‹Ήν•˜λŠ” μΉΌλŸΌμ—λ§Œ 1, λ‚˜λ¨Έμ§€λŠ” 0 ν‘œμ‹œ 
  • λ³€ν™˜ μ „ μž…λ ₯κ°’μœΌλ‘œ 2차원 데이터가 ν•„μš”ν•¨! 

 

β‘’ pd.get_dummies() 

  • νŒλ‹€μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” 원핫인코딩 API → 원핫인코딩인 이 방법을 더 많이 μ‚¬μš©ν•¨ 
  • λ°μ΄ν„°ν”„λ ˆμž„μ„ 인수둜 λ°›μ•„μ•Ό 함 

 

πŸ‘€ ν”Όμ²˜ μŠ€μΌ€μΌλ§ 

  • μ„œλ‘œλ‹€λ₯Έ λ³€μˆ˜μ˜ κ°’μ˜ λ²”μœ„λ₯Ό μΌμ •ν•œ μˆ˜μ€€μœΌλ‘œ λ§žμΆ”λŠ” μž‘μ—… 
  • λŒ€ν‘œμ μœΌλ‘œ ν‘œμ€€ν™”μ™€ μ •κ·œν™”κ°€ μžˆλ‹€. 

β‘  ν‘œμ€€ν™” 

  • 각 ν”Όμ²˜ 값을 κ°€μš°μ‹œμ•ˆ μ •κ·œλΆ„ν¬ (평균=0, λΆ„μ‚°=1) 을 가진 κ°’μœΌλ‘œ λ³€ν™˜ 
  • StandardScaler 이용 
  • 특히 SVM, μ„ ν˜•νšŒκ·€, λ‘œμ§€μŠ€ν‹± νšŒκ·€ μ μš©ν•˜κΈ° 전에 κΌ­ μˆ˜ν–‰ν•΄μ•Όν•¨!

β‘‘ μ •κ·œν™” 

  • μ„œλ‘œ λ‹€λ₯Έ ν”Όμ²˜μ˜ 크기λ₯Ό 0κ³Ό 1 μ‚¬μ΄μ˜ κ°’μœΌλ‘œ 톡일 (μŒμˆ˜κ°€ μžˆμ„ 경우 -1κ³Ό 1 사이) 
  • MinMaxScaler 이용 
  • 데이터뢄포가 κ°€μš°μ‹œμ•ˆ 뢄포가 아닐 경우 적용 

 

728x90

λŒ“κΈ€