λ¨Έμ‹ λŸ¬λ‹

μ•™μƒλΈ”ν•™μŠ΅κ³Ό λ°°κΉ…

주영 🐱 2022. 12. 9. 12:18
728x90

앙상블 ν•™μŠ΅μ€ λ‹€μ–‘ν•œ 예츑기λ₯Ό κ²°ν•©ν•΄ ν•™μŠ΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ•™μƒλΈ”μ˜ 방법 쀑 ν•˜λ‚˜λŠ” ν›ˆλ ¨μ…‹μœΌλ‘œλΆ€ν„° λ¬΄μž‘μœ„λ‘œ λ‹€λ₯Έ μ„œλΈŒμ…‹μ„ λ§Œλ“€μ–΄ 일련의 κ²°μ •νŠΈλ¦¬ λΆ„λ₯˜κΈ°λ₯Ό ν›ˆλ ¨μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμΈ‘μ„ ν•˜λ €λ©΄ λͺ¨λ“  κ°œλ³„νŠΈλ¦¬μ˜ μ˜ˆμΈ‘μ„ κ΅¬ν•˜κ³  κ°€μž₯ λ§Žμ€μ„ νƒμ„ 받은 클래슀λ₯Ό 예츑으둜 μ‚ΌμŠ΅λ‹ˆλ‹€voting.  κ²°μ • 트리의 앙상블은 λžœλ€ν¬λ ˆμŠ€νŠΈμž…λ‹ˆλ‹€. 앙상블 방법은 훨씬 더 높은 정확도λ₯Ό λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 

λ°°κΉ… ν›ˆλ ¨μ…‹μ—μ„œ 쀑볡을 ν—ˆμš©ν•˜μ—¬ μƒ˜ν”Œλ§ν•˜λŠ” 방식

νŽ˜μ΄μŠ€νŒ… ν›ˆλ ¨μ…‹μ—μ„œ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šκ³  μƒ˜ν”Œλ§ν•˜λŠ” 방식

두 방법 λͺ¨λ‘ 같은 ν›ˆλ ¨μƒ˜ν”Œμ„ μ—¬λŸ¬ μ˜ˆμΈ‘κΈ°μ— 걸쳐 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ λ°°κΉ…λ§Œμ΄ ν•œ 예츑기λ₯Ό μœ„ν•΄ 같은 ν›ˆλ ¨μƒ˜ν”Œμ„ μ—¬λŸ¬ 번 μƒ˜ν”Œλ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

λΆ€νŠΈμŠ€νŠΈλž©(bootstrap)

λΆ€νŠΈμŠ€νŠΈλž©(bootstrap)은 ν†΅κ³„ν•™μ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ‘œ, random sampling을 μ μš©ν•˜λŠ” 방법을 μΌμ»«λŠ” λ§μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν•œ μ‹μžμž¬λ§ˆνŠΈμ— λ“€μ–΄μ˜€λŠ” μƒμΆ”μ˜ 신선도λ₯Ό μ•Œκ³  싢은 경우, 마트둜 μž…κ³ λ˜λŠ” λͺ¨λ“  상좔 쀑 μž„μ˜λ‘œ 100개λ₯Ό 뽑아 κ·Έ μƒμΆ”μ˜ 신선도 평균을 κ΅¬ν•˜λŠ”κ²Œ λ˜κ² μŠ΅λ‹ˆλ‹€. 이게 무슨 μ˜λ―Έκ°€ μžˆμ„κΉŒμš”? λ°”λ‘œ raw data의 뢄포λ₯Ό μΆ”μ •ν•  λ•Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μΈ‘μ •λœ 데이터 μ€‘μ—μ„œ 쀑볡을 ν—ˆμš©ν•œ 볡원 μΆ”μΆœλ‘œ n개λ₯Ό 뽑고, 뽑은 n개의 평균을 κ΅¬ν•˜λŠ” 것을 m번 λ°˜λ³΅ν•˜μ—¬ λͺ¨μœΌκ²Œ 되면 평균에 λŒ€ν•œ 뢄포λ₯Ό ꡬ할 수 있게 되고, μ΄λ‘œλΆ€ν„° sample mean에 λŒ€ν•œ μ‹ λ’° ꡬ간을 μΆ”μ •ν•  수 있게 λ˜λŠ” κ²λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λΆ€νŠΈμŠ€νŠΈλž©μ€, λ¨Έμ‹ λŸ¬λ‹μ—μ„œλ„ 적용될 수 μžˆλŠ”λ°μš”. λ°”λ‘œ random sampling을 톡해 training dataλ₯Ό 늘릴 수 μžˆμŠ΅λ‹ˆλ‹€. 

즉, λ°°κΉ…(Bagging)은 λΆ€νŠΈμŠ€νŠΈλž©(bootstrap)을 집계(Aggregating)ν•˜μ—¬ ν•™μŠ΅ 데이터가 μΆ©λΆ„ν•˜μ§€ μ•Šλ”λΌλ„ μΆ©λΆ„ν•œ ν•™μŠ΅νš¨κ³Όλ₯Ό μ£Όμ–΄ 높은 bias의 underfitting λ¬Έμ œλ‚˜, 높은 variance둜 μΈν•œ overfitting 문제λ₯Ό ν•΄κ²°ν•˜λŠ”λ° 도움을 μ€λ‹ˆλ‹€.(좜처:https://data-analysis-science.tistory.com/61)

 

μ‚¬μ΄ν‚·λŸ°μ—μ„œ λ°°κΉ…κ³Ό νŽ˜μ΄μŠ€νŒ…

BaggindClassifier BaggingRegressorκ°€ 있으며, νŽ˜μ΄μŠ€νŒ…μ€ bootstrap=False둜 μ„€μ •ν•˜λ©΄ λœλ‹€

from sklearn.ensemnle import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

baggingClf = BaggingClassifier(
	DecisionTreeClassifier(), n+estimators=500. max_samples=100, bootstrap=True, n_jobs=-1
   )
 baggingClf.fit(X_train, y_train)
 y-pred =baggingClf.predict(X_test)

μ „λ°˜μ μœΌλ‘œ 배깅이 더 쒋은 κ²°κ³Όλ₯Ό λ§Œλ“€κΈ°λ•Œλ¬Έμ— μ„ ν˜Έν•˜μ§€λ§Œ, μ—¬μœ κ°€ μžˆλ‹€λ©΄ κ΅μ°¨κ²€μ¦μœΌλ‘œ 두 방법을 λͺ¨λ‘ 써본 λ’€ μ„ νƒν•˜λŠ” 것이 μ’‹λ‹€.

 

oob평가(out-of-bag)

배깅을 μ‚¬μš©ν•˜λ©΄ 쀑볡을 ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λ–€ μƒ˜ν”Œμ€ μ„ νƒλ˜μ–΄ μ—¬λŸ¬λ²ˆ μƒ˜ν”Œλ§λ˜κ³ , μ–΄λ–€ 것은 μ „ν˜€ μ„ νƒλ˜μ§€ μ•Šμ„ 수 μžˆλ‹€. μ„ νƒλ˜μ§€ μ•Šμ€ μƒ˜ν”Œμ„ oob μƒ˜ν”Œμ΄λΌ ν•œλ‹€. μ˜ˆμΈ‘κΈ°κ°€ ν›ˆλ ¨λ˜λŠ” λ™μ•ˆμ— λ³„λ„μ˜ 검증 μ„ΈνŠΈκ°€ μ•„λ‹Œ  oobμƒ˜ν”Œλ‘œ 평가할 수 μžˆλ‹€. μ „μ˜ μ½”λ“œμ— νŒŒλΌλ―Έν„°λ₯Ό oob_score=True 둜 λ„£κ³  , fit ν•œ λ’€ clf.oob_score_ 둜 평가 점수λ₯Ό λ³Ό 수 μžˆλ‹€. 앙상블 ν‰κ°€λŠ” 각 예츑기의 oob 평가λ₯Ό ν‰κ· ν•˜μ—¬ μ–»λŠ”λ‹€. 이 μ μˆ˜λŠ” 정확도와 거의 λΉ„μŠ·ν•˜λ‹€. 

 

 

 

λ°˜μ‘ν˜•