4.1 λλ½λ λ°μ΄ν° λ€λ£¨κΈ°
4.1.1 ν μ΄λΈ ννμ λ°μ΄ν°μμ λλ½λ κ° μλ³
csv_data = \
'''A, B, C, D
1.0, 2.0, 3.0, 4.0
5.0, 6.0, , 8.0
10.0, 11.0, 12.0 '''
df = pd.read_csv(StringIO(csv_data))
df
Output
β½ DataFrameμ΄ μμ£Ό ν΄ κ²½μ° μλμΌλ‘ λλ½ κ°μ μ°Ύλ κ²μ λ²κ±°λ‘μ → isnull method μ¬μ©
β½ isnull : μ μ΄ μμΉ κ°μ λ΄κ³ μλμ§μ λν λΆλ¦¬μΈ κ°μ΄ μ±μμ§ DataFrame λ°ν
# sum method μ΄μ©ν΄ λλ½λ κ°μ κ°μ νμΈ κ°λ₯
df.isnull().sum()
4.1.2 λλ½λ κ°μ΄ μλ μν(ν)μ΄λ νΉμ±(μ΄) μ μΈ
β½ λ°μ΄ν°μ μμ ν΄λΉ μνμ΄λ νΉμ±μ μμ μμ νλ λ°©μ
β½ μ μΌ κ°λ¨νμ§λ§ λ무 λ§μ λ°μ΄ν°λ₯Ό μμ ν κ²½μ° μμ μ μΈ λΆμ λΆκ°λ₯ν μ μμ
# NaN : λλ½λ κ°
# 1. λλ½λ κ°μ΄ μλ μνμ΄λ νΉμ± μ μΈ
'''dropnaλ νΈλ¦¬ν 맀κ°λ³μ μ 곡
dropna(how='all')
-> λͺ¨λ μ΄μ΄ NaNμΌ λ ν μμ
dropna(thresh=4)
-> μ€μ κ°μ΄ νΉμ κ°λ³΄λ€ μμ ν μμ
dropna(subset=['C'])
-> νΉμ μ΄μ NaNμ΄ μλ νλ§ μμ
'''
df.dropna(axis=0)
β½ axis=0 : ν
β½ axis=1 : μ΄
4.1.3 λλ½λ κ° λ체 → λ§μ΄ μ¬μ©λλ 보κ°(Interpolation) κΈ°λ²
# 2. λλ½λ κ° λ체(μ¬λ¬ λ³΄κ° κΈ°λ² μ¬μ©)
# from sklearn.Imputer import Imputer : μ¬μ΄ν·λ° 0.22 λ²μ μμ μμ λ μμ
from sklearn.impute import SimpleImputer
import numpy as np
# λλ½λ κ°μ κ° νΉμ± μ΄μ μ 체 νκ· μΌλ‘ λ³κ²½(κ°μ₯ νν λ³΄κ° κΈ°λ²)
imr = SimpleImputer(missing_values=np.nan, strategy='mean')
imr = imr.fit(df.values)
imputed_data = imr.transform(df.values)
imputed_data
Output
4.1.4 μ¬μ΄ν·λ° μΆμ κΈ° API μ΅νκΈ°
β½ Imputer ν΄λμ€ : λ°μ΄ν° λ³νμ μ¬μ©λλ μ¬μ΄ν·λ°μ λ³νκΈ° ν΄λμ€
β½ μΆμ κΈ° μ£Όμ λ©μλλ fit(νλ ¨ λ°μ΄ν°μμ λͺ¨λΈ νλΌλ―Έν° νμ΅), transform(νμ΅ν νλΌλ―Έν°λ‘ λ°μ΄ν° λ³ν)
β½ λ³ννλ €λ λ°μ΄ν° λ°°μ΄μ λͺ¨λΈ νμ΅μ μ¬μ©ν λ°μ΄ν° νΉμ± κ°μμ κ°μμΌ ν¨
4.2 λ²μ£Όν λ°μ΄ν° λ€λ£¨κΈ°
4.2.1 μμκ° μλ νΉμ± vs μμκ° μλ νΉμ±
π λ²μ£Όν λ°μ΄ν° : μμκ° μλ κ²κ³Ό μλ κ² κ΅¬λΆν΄μΌ ν¨
4.2.2 μμ νΉμ± 맀ν
β½ νμ΅ μκ³ λ¦¬μ¦μ΄ μμ νΉμ±μ μ¬λ°λ₯΄κ² μΈμνλ €λ©΄ λ²μ£Όν λ¬Έμμ΄ κ°μ μ μλ‘ λ°κΏμΌ ν¨
4.2.3 ν΄λμ€ λ μ΄λΈ μΈμ½λ©
# enumerateλ₯Ό μ¬μ©νμ¬ ν΄λμ€ λ μ΄λΈμ 0λΆν° ν λΉ
import numpy as np
import pandas as pd
df = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class3']
])
df.columns = ['color', 'size', 'price', 'classlabel']
class_mapping = {label:idx for idx, label in enumerate(np.unique(df['classlabel']))}
class_mapping
Output
# 맀ν λμ
λ리λ₯Ό μ¬μ©νμ¬ ν΄λμ€ λ μ΄λΈ μ μλ‘ λ³ν
df['classlabel'] = df['classlabel'].map(class_mapping)
df
Output
4.2.4 μμκ° μλ νΉμ±μ μ-ν« μΈμ½λ© μ μ©
β½ μμ μλ νΉμ±μ λ€μ΄ μλ κ³ μ ν κ°λ§λ€ μλ‘μ΄ dummy νΉμ± μμ±
β½ ν΄λΉ κ°μ 1, ν΄λΉνμ§ μλ κ°μ 0 ex) μΈ κ°μ§ color νΉμ± R, G, Bκ° μλ€κ³ κ°μ ν λ Rμ R=1, G=0, B=0μΌλ‘ λ³ν
β½ μ-ν« μΈμ½λ© λ λ°μ΄ν°μ μ μ¬μ©ν λλ λ€μ€ 곡μ μ± λ¬Έμ μ μ£Όμν΄μΌ ν¨
λ€μ€ 곡μ μ±β νκ· λΆμμμ μ¬μ©λ λͺ¨νμ μΌλΆ μ€λͺ λ³μκ° λ€λ₯Έ μ€λͺ λ³μμ μκ΄ μ λκ° λμ λ°μ΄ν° λΆμ μ λΆμ μ μΈ μν₯μ λ―ΈμΉλ νμ
β½ pandas get_dummies() μ¬μ© μ μ-ν« μΈμ½λ© λλ―Έ λ³μ μμ± νΈλ¦¬
→ λ¬Έμμ΄ μ΄λ§ λ³ννκ³ λλ¨Έμ§ μ΄μ κ·Έλλ‘ λ
4.3 λ°μ΄ν°μ μ νλ ¨ μ / ν μ€νΈ μ μΌλ‘ λλκΈ°
cf. column rank deficient : ν μ΄μ΄ λ€λ₯Έ μ΄μ μμ‘΄μ μ΄κ±°λ μ΄ κ°μ΄ λͺ¨λ 0μΈ κ²½μ°
'''
μ¬μ΄ν·λ° model_section λͺ¨λμ μλ train_test_split ν¨μ μ¬μ© μ
λ°μ΄ν°μ
μ λλ€ν νλ ¨ μ
κ³Ό ν
μ€νΈ μ
μΌλ‘ λλ μ O
'''
from sklearn.model_selection import train_test_split
X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values
X_train, X_test, y_train, y_test,= \
train_test_split(X, y,
test_size = 0.3,
random_state = 0,
stratify = y)
4.4 νΉμ± μ€μΌμΌ λ§μΆκΈ°
β½ κ²°μ νΈλ¦¬, λλ€ ν¬λ μ€νΈ : νΉμ± μ€μΌμΌ μν₯μ λ°μ§ μκΈ° λλ¬Έμ μ€μΌμΌ μ‘°μ μ κ²½ μ μ¨λ λλ μκ³ λ¦¬μ¦
β½ λλΆλΆμ μ΅μ ν μκ³ λ¦¬μ¦μ νΉμ± μ€μΌμΌμ΄ κ°μ λ μ±λ₯μ΄ ν¨μ¬ μ’μ
< μ€μΌμΌ μ‘°μ λ°©λ² >
1) μ κ·ν(normalization) : νΉμ± μ€μΌμΌμ [0, 1] λ²μμ λ§μΆλ μμ , μ΅μ-μ΅λ μ€μΌμΌ λ³νμ νΉμ μΌμ΄μ€
2) νμ€ν(standardization) : νΉμ± νκ· μ 0μ λ§μΆκ³ νμ€ νΈμ°¨λ₯Ό 1λ‘ λ§λ€μ΄ μ κ· λΆν¬μ κ°μ νΉμ§μ κ°μ§λλ‘ ν¨
β λλ€ λ¬Έλ§₯μ λ°λΌμ μλ―Έ μ΄ν΄ν΄μΌ ν¨
4.5 μ μ©ν νΉμ± μ ν
β½ κ³Όλμ ν©(overfitting) : λͺ¨λΈ νλΌλ―Έν°κ° νλ ¨ μ μ μλ νΉμ μνλ€μ λ무 κ°κΉκ² λ§μΆ°μ Έ μλ€λ μλ―Έ
→ μ£Όμ΄μ§ νλ ¨ λ°μ΄ν°μ λΉν΄ λͺ¨λΈμ΄ λ무 볡μ‘νκΈ° λλ¬Έμ λ°μ
< κ³Όλμ ν©μ μ€μ΄λ λ°©λ² >
1) λ λ§μ νλ ¨ λ°μ΄ν° μμ§(λΆκ°λ₯ν λκ° λ§μ)
2) κ·μ λ₯Ό ν΅ν 볡μ‘λ μ ν
3) νλΌλ―Έν° κ°μκ° μ μ κ°λ¨ν λͺ¨λΈ μ ν
4) λ°μ΄ν° μ°¨μ κ°μ
4.5.1 λͺ¨λΈ 볡μ‘λ μ νμ μν L1 κ·μ μ L2 κ·μ
β½ L1 κ·μ : ν¬μν νΉμ± λ²‘ν° μμ±, λλΆλΆμ νΉμ± κ°μ€μΉλ 0
β½ L2 κ·μ : κ°λ³ κ°μ€μΉ κ°μ μ ννμ¬ λͺ¨λΈ 볡μ‘λ μ€μ΄λ λ°©λ²
4.5.2 ~ 4.5.3 μ± μ½μμ
4.5.4 μμ°¨ νΉμ± μ ν μκ³ λ¦¬μ¦
β½ λͺ¨λΈ 볡μ‘λ μ€μ΄κ³ κ³Όλμ ν© νΌνλ λ€λ₯Έ λ°©λ² : νΉμ± μ νμ ν΅ν μ°¨μ μΆμ(κ·μ κ° μλ λͺ¨λΈμμ νΉν μ μ©)
< μ°¨μ μΆμ κΈ°λ² >
1) νΉμ± μ ν(feature selection) : μλ³Έ νΉμ±μμ μΌλΆ μ ν
β μμ°¨ νΉμ± μκ³ λ¦¬μ¦
β« greedy search algorithm
β« μ΄κΈ° d μ°¨μμ νΉμ± 곡κ°μ k<dμΈ k μ°¨μμ νΉμ± λΆλΆ 곡κ°μΌλ‘ μΆμ
β‘ μμ°¨ νμ§ μ ν(Sequential Backward Selection, SBS)
β« κ³μ° ν¨μ¨μ± ν₯μμ μν΄ λͺ¨λΈ μ±λ₯μ κ°λ₯ν μ κ² ν¬μνλ©΄μ μ΄κΈ° νΉμ±μ λΆλΆ 곡κ°μΌλ‘ μ°¨μ μΆμ
β« μλ‘μ΄ νΉμ±μ λΆλΆ 곡κ°μ΄ λͺ©ννλ νΉμ± κ°μκ° λ λκΉμ§ μ 체 νΉμ±μμ μμ°¨μ μΌλ‘ νΉμ± μ κ±°
2) νΉμ± μΆμΆ(feature extraction) : μΌλ ¨μ νΉμ±μμ μ»μ μ λ³΄λ‘ μλ‘μ΄ νΉμ± μμ± π νΉμ± μΆμΆμ 5μ₯μμ !
'Artificial Intelligence > Studying' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Logistic regression (0) | 2020.12.29 |
---|---|
Gradient descent (0) | 2020.11.14 |
Linear regression (0) | 2020.11.14 |
[λ¨Έμ λ¬λ κ΅κ³Όμ] Ch03 λ΄μ© μ 리 (μμ§ μμ μ€) (0) | 2020.09.29 |
[λ¨Έμ λ¬λ κ΅κ³Όμ] Ch02 κ°μ²΄μ§ν₯ νΌμ νΈλ‘ API λΆμ (0) | 2020.09.20 |