Opensource SW #06 | Machien Learning
2022๋ 11์ 26์ผ 19:13
Introduce ML
๐ Machine Learning
๊ธฐ๊ณ ํ์ต(ML)์ ๊ฒฝํ๊ณผ ๋ฐ์ดํฐ๋ฅผ ํตํด ์๋์ผ๋ก ํฅ์๋๋ ์ปดํจํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๊ตฌํ๋ ํ๋ฌธ์ด๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก๋ ์ปดํจํฐ ์์คํ ์ด ํจํด๊ณผ ์ถ๋ก ์ ์์กดํ์ฌ ๋ช ์์ ์ง์ ์์ด ํ์คํฌ๋ฅผ ์ํํ๋ ๋ฐ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํต๊ณ ๋ชจ๋ธ์ ๊ฐ๋ฐํ๋ ๊ณผํ์ด๋ค.
ML์ ์ธ๊ณต์ง๋ฅ(AI)์ ํ์ ๋ถ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์๋ค.
๐ Feature
๋จธ์ ๋ฌ๋ ๋ชจ๋ธ๋ค์ Feature๋ผ๋ ๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ฐ Feature๋, ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๋ ๊ฐ ์์ฑ์ ์๋ฏธํ๋ฉฐ, ์ฌ๋์ด ์๋ ๊ธฐ๊ณ๊ฐ ์ถฉ๋ถํ ์ดํดํ ์ ์๋ ํ์์ ๋ฐ์ดํฐ ๋ค์ ์๋ฏธํ๋ค.
์๋ฅผ๋ค์ด ์๋์ฒ๋ผ input ๋ฐ์ดํฐ๋ค์ ๋ฃ์ด์ค์ผ์ง ML์ด ์ดํด ๊ฐ๋ฅํ๋ค. ๊ฐ column(์์ฑ)๋ค (Name, Age, Ticket ์ปฌ๋ผ ๋ฑ๋ฑ) ์ด ๋ฐ๋ก Featue ๋ค.
๐ Traning & Interface
ML์ ์ธ๋ถ์ ์ธ ์ผ์ ํฌ๊ฒ 2๊ฐ์ง ๊ณผ์ ์ผ๋ก ๋๋๋ค.
- Training(ํ์ต ๊ณผ์ ) : ML ๋ชจ๋ธ์์ ๊ณ์ ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ ํด์ฃผ๋ฉด์, ๋ต์ ์ ํํ ๋์ถํด๋ด๋๋ก ํ๋ จ์ ์ํค๋ ๋ฐฉ์.
- Interface(์ถ๋ก ๊ณผ์ ) : ์์ ํ๋ จ๋ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ML์ด ์์์ ๋ณด์ด์ง ์๋ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๊ฐ์ ์์ธก ๋ฐ ๋์ถํด๋ด๋ ๊ฒ (Ex. ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๊ฐ์์ง์์ ํ๋ณํด๋ด๋ ๊ฒ)
Training ๊ณผ์ ์ ํตํด ML์๊ฒ ์ถฉ๋ถํ ํ์ต์ ์์ผฐ๋ค๋ฉด, ์ดํ ์๋น์ค๋ก ์ถ์ํ๋ ๊ณผ์ ์ด ๋ฐ๋ก Interface ๊ณผ์ ์ด๋ค. ์ฆ, Inteface๋ ML ์ด ์ถฉ๋ถํ ํ์ตํ ์ดํ ์ฌ๋๋ค์ด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถฉ๋ถํ ์ถ๋ก ํด์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฆฌํดํด์ฃผ๋ ๊ณผ์ ์ด๋ค.
๐ ML์ ๋ด๋ถ Tasks
ML๋ด๋ถ์์์ Task๋ ํฌ๊ฒ 3๊ฐ์ ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฅ๋๋ค.
- ยนSupervised Learning (์ง๋ ํ์ต)
- ยฒUnsupervised Learning (๋น์ง๋ ํ์ต)
- ยณReinforcement Learning (๊ฐํ ํ์ต)
Label์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ธํ์ผ๋ก ๋ฃ์์ ๋ ๋์ถ๋๋ ๊ฐ ์์ธก๊ฐ( = ์ ๋ต = ๊ฒฐ๊ณผ๊ฐ)์ ๋งํ๋ค.
๐ ยนSupervised Learning
- ์ผ๊ฐํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ(Labled Data)๋ฅผ ๋ฃ์ด์ฃผ๋ฉด์ ๋์์ โ์ด๊ฑด ์ผ๊ฐํ์ด๋ผ๋ ํ์ (Label) ์ด๋ผ๋๊ฑฐ์ผ!โ๋ผ๊ณ ํ๋ฉฐ Label์ ๋ณด๋ ๋์์ ๊ธฐ๊ณ์๋ค ์ธํ์ ๋ฃ์ด์ค๋ค.
- ML model ์ ์ด๊ฒ์ด ์ผ๊ฐํ์ธ์ง, ๋๊ทธ๋ผ๋ฏธ์ธ์ง, ์ฌ๊ฐํ์ธ์ง๋ฑ์ ๊ฒฐ๊ณผ๊ฐ์ ์์ธกํด์ ๋์ถํด๋ด๋ ๊ฒ์ ๊ณ์ ํ์ตํ๋ค.
- Test Data๋ฅผ ๋ฃ์์ ๋, ML model ์ด ๋์ถํด๋ธ ๊ฒฐ๊ณผ๊ฐ์ ๋ณด๊ณ ์ฌ๋์ ์ด๊ฒ์ด ํ๋ฆฐ๊ฒ์ธ์ง ๋ง์๊ฒ์ธ์ง ML model ์๊ฒ ์๋ ค์ค๋ค. ๊ทธ๋ฌ๋ฉด ML model ์ ๊ณ์ ์ฌ๋ฐ๋ฅธ ์ ๋ต์ ์ฐพ์๋ด๋๋ก ๊ณ์ ์ธ๊ฐ์ผ๋ก๋ถํฐ ํ์ตํ๊ฒ ๋๋ค.
์ต์ข ์ ์ผ๋ก ML์ ์ฃผ์ด์ง ์ธํ์ ๋ํด์ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ์ ๋์ถํด๋ผ๋๊น์ง ํ์ต์ ๋ง์ณค๋ค๋ฉด ํด๋น ML model์ ์๋น์ค์ ํ์ฉ์ด ๋ ์ ์๋ ๊ฒ์ด๋ค.
๐ ยฒUnsupervised learning
์ง๋ํ์ต๊ณผ ์ฐจ์ด์ ์ ๋น๊ตํด๋ณด๋ฉด
- ์ง๋ํ์ต์ Input : ๋ฐ์ดํฐ + Label + ํ์ต๋ชฉํ(training objectives)
- ๋น์ง๋ํ์ต์ Input : ๋ฐ์ดํฐ + ํ์ต๋ชฉํ(training objectives)
์ ํ์ ์ธ ๋น์ง๋ํ์ต ๋ฐฉ์์ dimensionality reduction ๊ณผ clustering ๋ผ๋ ๊ณผ์ ์ ํฌํจํ๋ค.
๐ ยณReinforcement Learning
๋ค์ํ ํ๋๊ณผ ์ํ์ฐฉ์ค๋ฅผ ๊ฑฒ์ผ๋ฉด์ ํ๊ฒฝ์ ๋ํด ๊ฒฝํ(experience)๋ฅผ ์์๋๊ฐ๋ฉด์ ํ์ตํด ๋๊ฐ๋ ๋ฐฉ์์ด๋ค.
scikit-learn
๐ Iris dataset์ผ๋ก ์์ํ๊ธฐ
์ฌ๋ฌ๊ฐ์ง dataset ์ค์์ Iris dataset์ ๋ํด Classification์ ์งํํด๋ณด์.
Iris dataset์ 4๊ฐ์ง์ feature(SepalLengthCm, SepalWidthCm, PetalLengthCm, PetalWidthCm)๋ฅผ ๋ณด์ ํ๊ณ , 3๊ฐ์ง์ ํด๋์ค(versicolor, setosa, virginica)๋ฅผ ๊ฐ์ง๋ค.
from sklearn.datasets import load_iris
dataset = load_iris()sklearn.datasets ์ ์ ์๋์ด ์๋ load_iris ํจ์๋ฅผ ํตํด datast ์ ํธ์ถํ ์ ์๋ค.
๐ Dataset Properties
print(dataset['data'].shape)
print(dataset['data'][:3])
# (150, 4)
# [[5.1 3.5 1.4 0.2]
# [4.9 3. 1.4 0.2]
# [4.7 3.2 1.3 0.2]]- Iris dataset์ ํฌํจํด์ sklearn์ ์๋ ๋๋ถ๋ถ์ ML ์๊ณ ๋ฆฌ์ฆ๋ค์ 2์ฐจ์ ํ๋ ฌ์ ํํ๋ฅผ ์ง๋๋ค. ์ด๋ ํ๋ ฌ์ ํ์ sample ๋ฐ์ดํฐ์ ๊ฐ์์ด๊ณ , ์ด์ feature ์ ๊ฐ์์ด๋ค. ์ฆ โ(sample ๋ฐ์ดํฐ ๊ฐ์, feature ๊ฐ์)โ ์ ํ๋ ฌ ํํ๋ฅผ ๋ณด์ ํ๊ณ ์๋ค.
- 150๊ฐ์ sample ๊ฝ ๋ฐ์ดํฐ์ 4๊ฐ์ง ์ข ๋ฅ์ feature ๋ฅผ ๋ณด์ ํ๊ณ ์๋ค.
shape: ํด๋น dataset ์ ํ๋ ฌ์ ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ง tupleํํ์ ๋ณ์์ด๋ค. (150, 4) ๋ Iris dataset๊ฐ 150ํ 4์ด์ง๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ํ๋ ฌ์์ ์๋ฏธํ๋ค.
print(dataset['target'].shape)
# (150,)
print(dataset.target)
#[0 0 0 0 0 0 0 0 0 0 ......]
print(dataset.target_names)
#['setosa' 'versicolor' 'virginica']-
target: ํด๋น dataset ์ ๋ชจ๋ ๊ฐ ๋ฐ์ดํฐ๋ค์ด ์ํด์๋ label ๊ฐ์ ์ซ์๋ก ์นํ๋์ด ์๋ค.=> 0์ด ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ, ํด๋น ๋ฐ์ดํฐ๋ 0๋ฒ์งธ label ํด๋์ค์ ๋ํ ๋ฐ์ดํฐ์์ ์๋ฏธ
target_names: ํด๋น dataset ์ label ์ข ๋ฅ๊ฐ ์ ์ฅ๋์ด ์๋ค.
๐ Dataset Methods
-
fit(param1, param2): ์ ๋ ฅ๋ฐ์ ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ๋ณํ์์ผ์ ML model ์ ํ์ต(training) ์์ผ์ฃผ๋ ํจ์์ด๋ค. dataset์ ํตํด ML model์ ๋ง๋ค ์ ์๋ค.-
์ง๋ํ์ต์ ๊ฒฝ์ฐ, data์ label 2๊ฐ์ ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ(์ธํ ๊ฐ)๋ก ๋๊ฒจ์ค์ผํ๋ค.
classifier.fit(X, y) -
๋น์ง๋ํ์ต์ ๊ฒฝ์ฐ, data 1๊ฐ๋ง ์ธํ์ผ๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
clustering_model.fit(X)
-
predict(): ML model์ input์ ๋ฃ์ผ๋ฉด ๊ทธ์ ๋ํ ์ ์ ํ output์ ์์ฐํด๋ธ๋ค. fit ํจ์๋ฅผ ํธ์ถํด์ ML ๋ชจ๋ธ์ ํ์ต์ด ์ข ๋ฃ๋ ํ, ML ๋ชจ๋ธ์ ์๋น์ค์์ ํ์ฉํ ๋ predict ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ ฅํ ๋ฐ์ดํฐ์ ๋ํ ์์ํ์ ์์ฑํด์ค๋ค.
๐ ์ ๋ฐ์ ์ธ ML ์ processes ๊ณผ์
- Get Data: ์ธ๊ฐ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
- Clean, Prepare, Manipulate Data: ํ์ตํ ๋ฐ์ดํฐ(Training Data) ์ ์ฑ๋ฅ ํ๊ฐ์ ์ฌ์ฉํ ๋ฐ์ดํฐ(Test Data) ๋ฅผ ๋ถ๋ฅ์ํจ๋ค.
- Train Model: ํ๋ จ์ํจ๋ค.
- Test Data: ํ์ต์ด ์๋ฃ๋ ML ๋ชจ๋ธ์ ๊ฐ์ง๊ณ ํ ์คํธ๋ฅผ ํด๋ณธ๋ค.
- Improve: ๋ ํฅ์๋ ML ๋ชจ๋ธ์ด ๋์ค๊ธฐ์ ๊น์ง 1~3 ์ฌ์ด์ ๊ณผ์ ๋ค์ ๊ณ์ํด์ ๋ฐ๋ณตํ๋ค.
- Final Model: ํฅ์ ๊ณผ์ ๊น์ง ๋ง์ณค๋ค๋ฉด ์ต์ข ์ ์ธ ML model ์ด ์์ฑ๋๋ค.
๐ Split the dataset
dataset์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ค์ ๋ํด ํ์ตํ ๋ฐ์ดํฐ(Training Data)์ ์ฑ๋ฅ ํ๊ฐ์ ์ฌ์ฉํ ๋ฐ์ดํฐ(Test Data)๋ฅผ ๋ถ๋ฅ์ํค๋ ๊ณผ์ ์ Split the dataset์ด๋ผํ๋ค.
์ด๋ test dataset ์ ์ธ๋ถ์ ์ ์ถ๋์ด์๋ ์๋๋ค. ์ด๋ ์ ์ถ๋ ๋ฐ์ดํฐ๋ dara leakage ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ dataset์ ๋น์จ ์กฐ์ ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ณดํต training dataset์ ์ฌ์ด์ฆ๊ฐ test dataset์ ์ฌ์ด์ฆ๋ณด๋ค ๋ ํฌ๋ค.
-
tran_test_split(X, y): Training Data์ Test Data๋ก ๋ถ๋ฅ์์ผ์ฃผ๋ ํจ์from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(dataset.data, dataset.target, test_size=0.1) print(X_train.shape) print(X_test.shape) print(y_train.shape) print(y_test.shape) #(135, 4) #(15, 4) #(135,) #(15,)- test_size: test_size๊ฐ 0.1์ผ ๋ test data์ ๋น์จ์ด 10%์ด๊ณ , training data์ ๋น์จ์ด 90%์ด๋ค. (default๋ 0.25์ด๋ค.)
๐ Transformation ๊ณผ์
๊ฐ feature๋ค์ ์ค์ผ์ผ ๊ฐ์ด ๋ง์ด ์ฐจ์ด๊ฐ ๋ ์์๋ค.
ex) ์ด๋ค dataset์ feature1์ data๋ค์ ๊ฐ๋ค์ 0.1, 0.3, 0.6๊ณผ ๊ฐ์ ๊ฐ๋ค์ธ๋ฐ, feature2์ data๊ฐ๋ค์ 10000, 500๋ฐฑ๋ง ๊ณผ ๊ฐ์ด ์ฐจ์ด๊ฐ ์ฌํ๋ฉด ML์ด ํ์ตํ๊ธฐ๊ฐ ๊ณค๋ํด์ง๋ค.
๋ฐ๋ผ์ ๊ฐ feature๋ค์ ์ค์ผ์ผ์ ๋ง์ถฐ์ฃผ๋ ๊ฒ์ด ํ์ํ๋ค. ์ด๋ ์ฌ์ฉํ๋ ํจ์๊ฐ StandardScaler์ด๋ค.
์ฆ dataset์ splitํ๊ณ ML์ ๊ฐ์ ๋ฃ์ด์ฃผ๊ธฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ํค๋(์ค์ผ์ผ์ ๋ฐ๊ฟ์ฃผ๋) ์์ ๊ฐ์ ๊ณผ์ ์ Transformation์ด๋ผ๊ณ ํ๋ค.
z = (x - u) / s ์์ ํตํด ์ค์ผ์ผ์ ์ฌ์กฐ์ ํ๋ค.
-
StandardScaler(): feature๋ค์ ์ค์ผ์ผ์ ๋ง์ถฐ์ฃผ๋ ํจ์from sklearn.preprocessing import StandardScaler print(X_train[:3]) print(StandardScaler().fit(X_train[:3]).transform(X_train[:3])) # [[5.1 3.4 1.5 0.2] # [5.9 3.2 4.8 1.8] # [5.7 2.8 4.1 1.3]] # [[-1.37281295 1.06904497 -1.38526662 -1.3466376 ] # [ 0.98058068 0.26726124 0.93916381 1.0473848 ] # [ 0.39223227 -1.33630621 0.44610281 0.2992528 ]]fit๋ฉ์๋(dataset์ fit๊ณผ ๋ค๋ฅด๋ค)๋ฅผ ํตํด ํ๊ท u๊ณผ ํ์คํธ์ฐจ s๋ฅผ ๊ณ์ฐํ๊ณ , transform์ ํตํด
(x - u) / s๋ฅผ ๊ณ์ฐํ๋ค.
๐ Pipeline
์์ transform ๊ณผ์ ๊น์ง ๊ฑฐ์น๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ ๋ค ํ๋ค๋ฉด, ์ด์ ๋น์ฐํ ML ๋ชจ๋ธ์ ๋ณํํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ ํ์ต์์ผ์ฃผ๋ฉด ๋๋๋ฐ ์ด๋ Pipeline์ ์ฌ์ฉํด์ ML ๋ชจ๋ธ์ ์ฝ๊ฒ ๋ฐ์ํ ์ ์๋ค.
make_pipeline ํจ์๋ฅผ ์ฌ์ฉํด์ Pipeline๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ,Transformation๋ณํ ๊ณผ์ ๊ณผ test๊ณผ์ ๊น์ง ๋ชจ๋ ์ผ๋ จ์ ๊ณผ์ ์ ํ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
from sklearn.pipeline import make_pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
pipe = make_pipeline(StandardScalaer(), RandomForestClassifier())
pipe.fit(X_train, y_train)
print(accuracy_score(pipe.predict(X_test), y_test))
# 0.9333333333333333- make_pipeline์ ํ๋ผ๋ฏธํฐ๋ก ์ํ๋ ์์๋๋ก ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
StandardScaler(): ์ง์ ์ ์ดํด๋ดค๋ฏ์ด Transformation๋ฅผ ํด์ฃผ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค. fit๊ณผ transformํธ์ถ ์์ด ๋๊ธฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค.RandomForsetClassifier(): ์ด ํจ์๋ฅผ ํตํด ๋ฐํ๋๋ ๊ฐ์ฒด๋ ๋ถ๋ฅ ML๋ชจ๋ธ ์ค์ ํ๋์ด๋ค.accuracy_score(predict, label): ์ ํ๋๋ฅผ ๊ณ์ฐํด์ฃผ๋ ํจ์
๐ Confusion matrix
์ ์ฒด prediection ์ด ์ผ๋ง๋ ๋ง์๋์ง(์ ๋ต์ธ์ง๋ฅผ) ํ๋ ฌ ํํ๋ก ๋์ ๋ณด๊ธฐ์ข๊ฒ ํํํ ๊ฒ์ ํผ๋ ํ๋ ฌ์ด๋ผ ํ๋ค.
ํ ์ถ์ label ์์น๋ก, ํ ์ถ์ predict (์ผ๋ง๋ ๋ง์๋์ง)๋ฅผ ํํํ๋ค.
-
confusion_matrix(label, predict)from sklearn.metrics import confusion_matrix print(confusion_matrix(y_test, pipe.predict(X_test))) #[[5 0 0] # [0 7 0] # [0 1 2]]
๐ ์ฑ๋ฅ ๊ฐ์ ์ ์ํ hyperparameters
๋๋ถ๋ถ์ ML ๋ชจ๋ธ์๋ ์ ํฉ ๋ชจ๋ธ์ ์ต์ข ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ๋ง์ ๋งค๊ฐ ๋ณ์๊ฐ ์๋ค. RandomForestClassifier๋ง ํด๋ ๋งค์ฐ ๋ง์ ๋งค๊ฐ ๋ณ์๊ฐ ์๋๋ฐ, ์ด๋ ๊ฒ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ๋ ์ฌ๋์ด ์ง์ ๊ฐ์ ์ง์ ํด์ค์ผํ๋ ๊ฐ๋ค์ hyperparameters๋ผ๊ณ ํ๋ค.
์ด hyperparameters๋ฅผ ์ฐพ์๋ด๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ธ randomized search์ ํน์ ๋ฒ์๋ฅผ ์ง์ ํด์ฃผ๊ณ ์ฐพ๊ฒํ๋๋ก ํ๋ ๋ฐฉ์์ผ๋ก 2๊ฐ์ง ์ต์ ์ด ์๋ค. [nextimators, maxdepth]
-
RandomizedSearchCV(): ์ฃผ์ด์ง ๋ฒ์ ๋ด์์ Random ํ๊ฒ ๊ฐ์ ํ๋ ๋ฝ์์ ์ง์ ๋ ํ์๋งํผ๋ง ์๋ํด๋ณด๋ ํจ์๋ก max_depth์ ์ง์ ๋ ๊ตฌ๊ฐ์์์ RandomForestClassifier์๊ฒ ํ์ต ์ํจ๋ค.from sklearn.model_selection import RandomizedSearchCV from scipy.stats import randint param_dists = {'n_estimators': randint(1, 5), 'max_depth': randint(5, 10)} search = RandomizedSearchCV(estimator = RandomForestClassifier(), n_iter = 5, param_distributions=param_dists) search.fit(X_train, y_train) search.best_params_ search.score(X_text, y_test)n_iter๋ ์ด ๋ฐ๋ณต ํ์์ด๋ค.
๐ ์ธ๋ถ csv๋ก ํ์ต์ํค๊ธฐ
<data์ ์ข ๋ฅ 2๊ฐ์ง>
- Structured Data (์ ํ ๋ฐ์ดํฐ) : table ํํ๋ก์จ ํํ๋ ์ ์๋ ๋ฐ์ดํฐ ex) ํ์๋ผ์ธ ๋ฐ์ดํฐ
- UnStructured Data (๋น์ ํ ๋ฐ์ดํฐ) : table ํํ๋ก์จ ํํ๋ ์ ์๋ ๋ฐ์ดํฐ ex) ์ด๋ฏธ์ง, ๋น๋์ค, ๋ํ๋จผํธ, ์ค๋์ค ๋ฑ๋ฑ
ML ์๊ณ ๋ฆฌ์ฆ์ structured data๋ฅผ ๋ถ์ํ๋๋ฐ ์ข๋ค. ์ฆ ํ ์ด๋ธ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋๋ฐ ์ข์๋ฐ ์ด๋ pandas๋ฅผ ํ์ฉํ๋ค.
-
read_csv(๊ฒฝ๋ก): csv๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ๋ค์ธ๋ค.
csv파일의 데이터를 pandas를 통해 가져오기 -
groupby(์ปฌ๋ผ): ํน์ ์ด์ ๊ฐ์ ์ข ๋ฅ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ ์ ์๋ค.print(data_df.groupby('target').size()) #target #0 499 #1 526 #dtype: int64 -
drop(columns=?, axis=?): ํน์ ์ด์ ์์ค ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. ์ด๋ axis๋ ์ถ์ผ๋ก 0์ด๋ฉด ํ์ด, 1์ด๋ฉด ์ด์ด drop๋๋ค.X = data_df.drop(columns="target", axis=1) y = data_df["target"] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=2) print(X_train.shape, X_test.shape) print(y_train.shape, y_test.shape) # (768, 13) (257, 13) # (768,) (257,) rf_cls = RandomForestClassifier() rf_cls.fit(X_train, y_train) print(accuracy_score(rf_cls.predict(X_test), y_test)) print(confusion_matrix(y_test), rf_cls.predict(X_test))RandomForestClassifier๋ ๋ถ๋ฅ๋ชจ๋ธ์ด๋ผ fit, predict๊ฐ ์ด์ ์ ํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ํ ์ ์๋๊ฑธ ํ์ธํ ์ ์๋ค.
ํ์ต์ํฌ ๋ชจ๋ธ๋ค
- ๊ฒฐ์ ํธ๋ฆฌ: ๊ฒฐ์ ์ฌํญ๋ค์ ๊ฐ์ง๊ณ ์ด์งํธ๋ฆฌ ํํ๋ก ๊ณ์ ๊ฐ๋ฆผ๊ธธ์์ ๋๋๋ ํํ์ด๋ค.