์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ์๋ฐ์คํฌ๋ฆฝํธ
- dropout
- ์ฐ์ ์์ ํ
- pytorch
- ํฌ๋ฃจ์ค์นผ
- ํ๊ณ ๋ก
- ๋ฏธ๋๋_ํ์ฌ์_๊ณผ๊ฑฐ๋ก
- ๋ฐฑํธ๋ํน
- ๋ค์ต์คํธ๋ผ
- Overfitting
- DP
- NEXT
- 2023
- ๋ฌธ์์ด
- ๋ถํ ์ ๋ณต
- ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ
- object detection
- ํ๋ก์ด๋ ์์ฌ
- lazy propagation
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ๋์_๋ง๋ก
- dfs
- back propagation
- BFS
- ๊ฐ๋์ ๋ง๋ก
- ์ด๋ถ ํ์
- tensorflow
- c++
- ๋๋น ์ฐ์ ํ์
- ์กฐํฉ๋ก
- Today
- Total
Doby's Lab
ValueError: ctypes objects containing pointers cannot be pickled ๋ณธ๋ฌธ
ValueError: ctypes objects containing pointers cannot be pickled
๋๋น(Doby) 2023. 8. 10. 17:01๐ค Problem
XGBRegressor
์ MultiOutputRegressor
๋ฅผ ๊ฒฐํฉํ์ฌ ๋ค์คํ๊ท์ถ๋ ฅ ๋ชจ๋ธ์ ๋ง๋ค์๊ณ , ์ด ๋ชจ๋ธ์ ๊ธฐ์กด ํ์ดํผ ํ๋ผ๋ฏธํฐ๋ฅผ default ๊ฐ ์ธํ
์์ ํ๋์ ์์ํ ๋, ๋ฐ์ํ ์๋ฌ์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ํฉ๋๋ค.
XGB๋ xgboost์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
from xgboost import XGBRegressor
๋ ๋ชจ๋ธ์ ๊ฒฐํฉํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ์์ต๋๋ค.
dtrain = xgb.DMatrix(data=train_X, label=train_Y)
dtest = xgb.DMatrix(data=test_X, label=test_Y)
params = {
'max_depth':3,
'eta':0.1,
'objective':'reg:squarederror',
'eval_metric':'rsme',
}
num_rounds = 400
wlist = [(dtrain,'train'),(dtest,'eval')]
xgb_model = XGBRegressor(params=params,
num_boost_round=num_rounds,
early_stopping_rounds=100,
evals=wlist)
multioutput_model = MultiOutputRegressor(xgb_model)
multioutput_model.fit(train_X.values, train_Y.values)
ํ์ง๋ง, ์ด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค.
ValueError: ctypes objects containing pointers cannot be pickled
์ด ์๋ฌ๊ฐ ๋งํ๋ ๋ฐ๋ ์ง์ญํ์ ๋, 'ํฌ์ธํฐ๋ฅผ ํฌํจํ C์ธ์ด ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ(pickling)์ํฌ ์ ์๋ค'๋ ๋ป์ ๋๋ค.
์ฌ๊ธฐ์ ์บ์นํด์ผ ํ ๋ถ๋ถ์ C์ธ์ด ๊ฐ์ฒด์ ์ง๋ ฌํ๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
โ ์ง๋ ฌํ (Serialization, pickling)
์ง๋ ฌํ๋ ๋ชจ๋ธ์ ์ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ฅํ์ฌ ๋์ค์ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ๊ณต์ ํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.
๋ชจ๋ธ์ ํ๋ จ์ํจ ํ์ ์ ์ฅํด ๋๋ฉด, ๋์ค์ ์ถ๊ฐ์ ์ธ ํ๋ จ์ด ์์ด ๋ค๋ฅธ ํ๊ฒฝ์์ ์์ธก์ ์ํํ ์ ์๋ ํธ๋ฆฌํ ๊ณผ์ ์ ๋๋ค.
์ด๋ฐ ์์
์ ์ํํ๊ธฐ ์ํด์ ํ์ด์ฌ์์๋ pickle
ํน์ joblib
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
(๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ด pickle์ด๋ผ๋ ์ด์ ์ ๋น๋กฏํ์ฌ pickling์ด๋ผ๋ ๋ง์ ์ง๋ ฌํ๋ผ๋ ๋ป์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.)
๋ชจ๋ธ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ ์ฅ์ ํ ๋๋ 'wb'๋ก argument๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
import pickle
# Save Model
with open('model.pkl', 'wb') as file:
pickle.dump(model, file)
# Load Model
with open('model.pkl', 'rb') as file:
loaded_model = pickle.load(file)
๐ Solution
์ ๊ฐ C์ธ์ด ๊ฐ์ฒด๋ฅผ ์บ์นํด์ผ ํ ๋ถ๋ถ์ด๋ผ๊ณ ๋งํ ์ด์ ๋ Wrapper๋ผ๋ ๊ฐ๋ ๋๋ฌธ์ ๋๋ค.
โ Wrapper
๋ํผ๋ ํ๋ก๊ทธ๋๋ฐ์์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ๊ฑฐ๋ ํ์ฅํ๊ธฐ ์ํด ์ค๊ฐ์ ๊ฐ์ธ์ฃผ๋ ์ญํ ์ ํ๋ ์ฝ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ํผ๋ ๊ธฐ์กด์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
XGB์์๋ ์ด๋ฌํ ๋ํผ์ ๋ํด 2๊ฐ์ง๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
1๏ธโฃ ์ฌ์ดํท๋ฐ ๋ํผ (Scikit-Learn Wrapper)
์ฌ์ดํท๋ฐ ๋ํผ๋ ์ฌ์ดํท๋ฐ์ ์ผ๊ด๋ ์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ค์ํ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ์กฐํฉํ ์ ์๋๋ก ํด์ค๋๋ค. ์ฌ์ดํท๋ฐ ๋ํผ๋ ํต์ผ๋ ๋ฉ์๋์ API๋ฅผ ์ ๊ณตํ์ฌ ๋ชจ๋ธ์ ์ด๊ธฐํ, ํ๋ จ, ์์ธก, ํ๊ฐ ๋ฑ์ ์์ ์ ๊ฐํธํ๊ฒ ์ํํ ์ ์๋๋ก ๋์์ค๋๋ค.
2๏ธโฃ ํ์ด์ฌ ๋ํผ (Python Wrapper)
ํ์ด์ฌ ๋ํผ๋ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ด์ฌ์์ ํ์ฉํ ์ ์๋๋ก ๊ฐ์ธ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ฌ ๋ํผ๋ C๋ C++๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ด์ฌ ์ฝ๋์์ ํธ์ถํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
2๏ธโฃ ๋ํผ์ ์ฐจ์ด๊ฐ ๋๋ฌ๋๋ ๊ณณ์?
๊ทธ๋์ ๋์ ์ฐจ์ด๋ ์ด๋ป๊ฒ ๋๋ฌ๋๋๊ฐ๊ฐ ๊ถ๊ธํด์ง ์ ์์ต๋๋ค. ์๋ํ๋ฉด, ๊ฐ์ XGB๋ฅผ ์ฐ๋๋ฐ '์ด๊ฒ ๋ฌด์จ ์๋ฆฌ์ธ๊ฐ' ์ถ์์ต๋๋ค.
๋ํผ๋ผ๋ ๊ฒ์ ๋ง ๊ทธ๋๋ก ์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ์ ๋ปํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ฐจ์ด๊ฐ ๋๋ ๋ถ๋ถ์ ๋ณผ ์ ์๋ ๊ณณ์ ํจ์, ํด๋์ค, ๋ฉ์๋, ํ๋ผ๋ฏธํฐ์์ ๋๋ฌ๋ฉ๋๋ค.
Ref. https://jaaamj.tistory.com/39
XGBoost ์ค์ต - ์ฌ์ดํท๋ฐ ๋ํผ -
์ฌ์ดํท๋ฐ์์๋ XGBoost ๊ด๋ จ ๋ํผ๋ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค. ๋ฐ๋ก ๋ถ๋ฅ๋ฅผ ์ํ ํด๋์ค XGBClassifier, ํ๊ท๋ฅผ ์ํ ํด๋์ค XGBRegressor ์ ๋๋ค. ์์ ํฌ์คํ ์์ ํ์ด์ฌ ๋ํผ XGBoost์ ์ฌ์ดํท๋ฐ
jaaamj.tistory.com
โ Solve
๊ทธ๋์ ์ด๋ฌํ 2๊ฐ์ง ๋ํผ๋ฅผ ํตํด XGB๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ pickling ๋ฌธ์ ์ ์์ธ์ 2๊ฐ์ง๋ก ์ผ์์ต๋๋ค.
- ํ์ด์ฌ ๋ํผ๋ฅผ ์ฌ์ฉํ XGB์์ ์๋ชป๋ ํ์ดํผ ํ๋ผ๋ฏธํฐ ํ๋
- ํ์ด์ฌ ๋ํผ๋ฅผ ์ฌ์ฉํ XGB์ ์ฌ์ดํท๋ฐ ๋ํผ๋ฅผ ์ฌ์ฉํ MultiOutputRegressor์์ ์ถฉ๋
์ด๋ฌํ ๋ฌธ์ ์ ์ ๊ธฐ๋ฐํ์ฌ ํ์ด์ฌ ๋ํผ ๊ธฐ๋ฐ์ XGB๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋ ์ฌ์ดํท๋ฐ ๋ํผ ๊ธฐ๋ฐ์ XGB๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฌ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
xgb_model = XGBRegressor(n_estimators=400,
learning_rate=0.1,
max_depth=3,
)
multioutput_model = MultiOutputRegressor(xgb_model).fit(train_X.values, train_Y.values)
์ด ์ฝ๋์์ ๋งจ ์ ์ฝ๋์ ๊ฐ์ด Validation Set์ ๋ฃ์ง ์์ ์ด์ ๋ ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์์ MultiOutputRegressor๋ ์ด๋ฐ eval_set์ ๋ํด ์ง์ํ์ง ์์์ ๋ฃ์ด์ฃผ๊ธฐ ์ํด์๋ ์ง์ ์ ์ธ ๋ชจ๋ ์์ ์ด ํ์ํ๋ค๋ ๊ฑธ ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์ ๋ฃ์ง ์์์ต๋๋ค.
'Code about AI > etc' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
GPU ์์ด Colab(์ฝ๋ฉ)์ผ๋ก AI๋ฅผ ํ๊ณ ์๋ ๋น์ ์๊ฒ ์ ํ๋ 3๊ฐ์ง ํ (4) | 2024.10.25 |
---|