Xgboost: XGBoostλŠ” 닀쀑 클래슀 λΆ„λ₯˜ λ¬Έμ œμ—μ„œ 클래슀 ν™•λ₯ μ„ μ–΄λ–»κ²Œ μƒμ„±ν•©λ‹ˆκΉŒ?

에 λ§Œλ“  2016λ…„ 11μ›” 08일  Β·  15μ½”λ©˜νŠΈ  Β·  좜처: dmlc/xgboost

ν›ˆλ ¨λœ XGBoost 트리λ₯Ό λ€ν”„ν•˜λ €κ³  ν•˜λ©΄ λ‹€μŒ ν˜•μ‹μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

0:[f37<39811] 
    1:[f52<199.5] 
        3:leaf=-0.021461
        4:[f2<0.00617284] 
            9:leaf=-0.0118755
            10:[f35<-83.548] 
                19:[f13<0.693844] 
                    23:[f37<1831]
                        29:leaf=-0
                        30:leaf=0.123949
                    24:leaf=0.0108628
                20:[f35<-74.6198] 
                    25:leaf=-0.0175897
                    26:leaf=0.051898
    2:leaf=-0.0239901

트리 ꡬ쑰가 λ¬΄μ—‡μΈμ§€λŠ” λΆ„λͺ…ν•˜μ§€λ§Œ 리프 값을 ν•΄μ„ν•˜λŠ” 방법은 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. _ 이진 _ λΆ„λ₯˜ 문제 및 둜그 손싀 λΉ„μš© ν•¨μˆ˜μ˜ 경우 λ‘œμ§€μŠ€ν‹± ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 리프 값을 클래슀 ν™•λ₯ λ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€: 1/(1+exp(value)). κ·ΈλŸ¬λ‚˜ _multiclass_ λΆ„λ₯˜ 문제의 경우 ν•΄λ‹Ή 값이 μ†ν•œ ν΄λž˜μŠ€μ— λŒ€ν•œ 정보가 μ—†μœΌλ©° ν•΄λ‹Ή 정보가 μ—†μœΌλ©΄ 클래슀 ν™•λ₯ μ„ κ³„μ‚°ν•˜λŠ” 방법이 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ–΄λ–€ 아이디어? μ•„λ‹ˆλ©΄ ν›ˆλ ¨λœ νŠΈλ¦¬μ—μ„œ ν•΄λ‹Ή 정보λ₯Ό κ°€μ Έμ˜€λŠ” λ‹€λ₯Έ κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

그것은 λ‚΄κ°€ 전에 λˆˆμΉ˜μ±„μ§€ λͺ»ν–ˆλ˜ μ•„μ£Ό 쒋은 κ΄€μ°°μž…λ‹ˆλ‹€. 사싀, λͺ¨λΈμ˜ 트리 μˆ˜λŠ” n_estimator x n_class μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λ¬΄μ˜ μˆœμ„œλ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 μž₯λ‚œκ° 예λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

x = np.concatenate([np.ones([10,1])*np.array([1,0,0]),np.ones([10,1])*np.array([0,1,0]),np.ones([10,1])*np.array([0,0,1])], axis=0)
y = np.array([['a']*10+['c']*10+['b']*10]).reshape([30,1])
model = xgb.XGBClassifier(n_estimators=2, objective='mlogloss').fit(x, y)
model.booster().dump_model('trees.txt')

기본적으둜 [1,0,0]이 'a'에 λ§€ν•‘λ˜κ³ , [0,1,0]이 'c'에 λ§€ν•‘λ˜κ³ , [0,0,1]이 'b'에 λ§€ν•‘λ˜λŠ” ν›ˆλ ¨ 데이터 μ„ΈνŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ˜λ„μ μœΌλ‘œ 'b'와 'c'의 μˆœμ„œλ₯Ό λ°”κΏ” xgboostκ°€ λ‚˜λ¬΄λ₯Ό λ€ν•‘ν•˜κΈ° 전에 λ ˆμ΄λΈ”μ„ 기반으둜 클래슀λ₯Ό μ •λ ¬ν•˜λŠ”μ§€ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ λ€ν”„λœ λͺ¨λΈμž…λ‹ˆλ‹€.

booster[0]:
0:[f0<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0674157
    2:leaf=0.122449
booster[1]:
0:[f2<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0674157
    2:leaf=0.122449
booster[2]:
0:[f1<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0674157
    2:leaf=0.122449
booster[3]:
0:[f0<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0650523
    2:leaf=0.10941
booster[4]:
0:[f2<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0650523
    2:leaf=0.10941
booster[5]:
0:[f1<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0650523
    2:leaf=0.10941

결둠은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. μ–ΈκΈ‰ν–ˆλ“―μ΄ n_estimators = 2μ΄μ§€λ§Œ 트리 μˆ˜λŠ” 2x3=6μž…λ‹ˆλ‹€.
  2. νŠΈλ¦¬κ°€ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯의 μˆœμ„œλ₯Ό 보면 첫 번째 νŠΈλ¦¬λŠ” 첫 번째 ν΄λž˜μŠ€μ— μ†ν•˜κ³  두 번째 νŠΈλ¦¬λŠ” 두 번째 ν΄λž˜μŠ€μ— μ†ν•˜λŠ” μ‹μœΌλ‘œ λ§ˆμ§€λ§‰ ν΄λž˜μŠ€κΉŒμ§€ μ΄μ–΄μ§‘λ‹ˆλ‹€. 그런 λ‹€μŒ λͺ¨λ“  μΆ”μ •κΈ°κ°€ 포함될 λ•ŒκΉŒμ§€ λ™μΌν•œ νŒ¨ν„΄μ΄ λ°˜λ³΅λ©λ‹ˆλ‹€.
  3. 클래슀의 μˆœμ„œλŠ” numpy.unique() λ°˜ν™˜ν•˜λŠ” 것과 μΌμΉ˜ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” μ•ŒνŒŒλ²³μˆœμ΄λ―€λ‘œ 첫 번째 νŠΈλ¦¬λŠ” f0 을 μ‚¬μš©ν•˜κ³  두 번째 νŠΈλ¦¬λŠ” f2 λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ μž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 정보가 xgboost λ¬Έμ„œμ— μΆ”κ°€λ˜λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  15 λŒ“κΈ€

저도 같은 질문이 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ•Œμ•„μ°¨λ¦° 것은 20개의 ν΄λž˜μŠ€κ°€ 있고 μΆ”μ •κΈ°μ˜ 수λ₯Ό 100으둜 μ„€μ •ν•˜λ©΄ λͺ¨λΈμ— 20*100=2000개의 λ‚˜λ¬΄κ°€ μΈμ‡„λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 이제 λ‚΄ μΆ”μΈ‘μœΌλ‘œλŠ” 처음 100λͺ…μ˜ μΆ”μ •μžκ°€ 일등과 λ‹€λ₯Έ μ‚¬λžŒμ„ λΆ„λ₯˜ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒ 100개의 μΆ”μ •κΈ°λŠ” 두 번째 ν΄λž˜μŠ€μ™€ λ‹€λ₯Έ 클래슀λ₯Ό λΆ„λ₯˜ν•©λ‹ˆλ‹€.

확인할 μˆ˜λŠ” μ—†μ§€λ§Œ μ•„λ§ˆλ„ 이와 같을 수 μžˆμŠ΅λ‹ˆκΉŒ?

그것은 λ‚΄κ°€ 전에 λˆˆμΉ˜μ±„μ§€ λͺ»ν–ˆλ˜ μ•„μ£Ό 쒋은 κ΄€μ°°μž…λ‹ˆλ‹€. 사싀, λͺ¨λΈμ˜ 트리 μˆ˜λŠ” n_estimator x n_class μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λ¬΄μ˜ μˆœμ„œλ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 μž₯λ‚œκ° 예λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

x = np.concatenate([np.ones([10,1])*np.array([1,0,0]),np.ones([10,1])*np.array([0,1,0]),np.ones([10,1])*np.array([0,0,1])], axis=0)
y = np.array([['a']*10+['c']*10+['b']*10]).reshape([30,1])
model = xgb.XGBClassifier(n_estimators=2, objective='mlogloss').fit(x, y)
model.booster().dump_model('trees.txt')

기본적으둜 [1,0,0]이 'a'에 λ§€ν•‘λ˜κ³ , [0,1,0]이 'c'에 λ§€ν•‘λ˜κ³ , [0,0,1]이 'b'에 λ§€ν•‘λ˜λŠ” ν›ˆλ ¨ 데이터 μ„ΈνŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ˜λ„μ μœΌλ‘œ 'b'와 'c'의 μˆœμ„œλ₯Ό λ°”κΏ” xgboostκ°€ λ‚˜λ¬΄λ₯Ό λ€ν•‘ν•˜κΈ° 전에 λ ˆμ΄λΈ”μ„ 기반으둜 클래슀λ₯Ό μ •λ ¬ν•˜λŠ”μ§€ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ λ€ν”„λœ λͺ¨λΈμž…λ‹ˆλ‹€.

booster[0]:
0:[f0<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0674157
    2:leaf=0.122449
booster[1]:
0:[f2<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0674157
    2:leaf=0.122449
booster[2]:
0:[f1<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0674157
    2:leaf=0.122449
booster[3]:
0:[f0<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0650523
    2:leaf=0.10941
booster[4]:
0:[f2<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0650523
    2:leaf=0.10941
booster[5]:
0:[f1<0.5] yes=1,no=2,missing=1
    1:leaf=-0.0650523
    2:leaf=0.10941

결둠은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. μ–ΈκΈ‰ν–ˆλ“―μ΄ n_estimators = 2μ΄μ§€λ§Œ 트리 μˆ˜λŠ” 2x3=6μž…λ‹ˆλ‹€.
  2. νŠΈλ¦¬κ°€ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯의 μˆœμ„œλ₯Ό 보면 첫 번째 νŠΈλ¦¬λŠ” 첫 번째 ν΄λž˜μŠ€μ— μ†ν•˜κ³  두 번째 νŠΈλ¦¬λŠ” 두 번째 ν΄λž˜μŠ€μ— μ†ν•˜λŠ” μ‹μœΌλ‘œ λ§ˆμ§€λ§‰ ν΄λž˜μŠ€κΉŒμ§€ μ΄μ–΄μ§‘λ‹ˆλ‹€. 그런 λ‹€μŒ λͺ¨λ“  μΆ”μ •κΈ°κ°€ 포함될 λ•ŒκΉŒμ§€ λ™μΌν•œ νŒ¨ν„΄μ΄ λ°˜λ³΅λ©λ‹ˆλ‹€.
  3. 클래슀의 μˆœμ„œλŠ” numpy.unique() λ°˜ν™˜ν•˜λŠ” 것과 μΌμΉ˜ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” μ•ŒνŒŒλ²³μˆœμ΄λ―€λ‘œ 첫 번째 νŠΈλ¦¬λŠ” f0 을 μ‚¬μš©ν•˜κ³  두 번째 νŠΈλ¦¬λŠ” f2 λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ μž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 정보가 xgboost λ¬Έμ„œμ— μΆ”κ°€λ˜λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

μ§€κΈˆ 이 문제λ₯Ό λ‹«κ³  μžˆμŠ΅λ‹ˆλ‹€.

여기에 아직 의견이 μžˆμŠ΅λ‹ˆλ‹€. 닀쀑 클래슀의 경우 νŠΈλ¦¬κ°€ κ΅¬μ‘°ν™”λ˜λŠ” 방식에 λ™μ˜ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 리프 값은 μ–΄λ–»κ²Œ ν™•λ₯ λ‘œ λ³€ν™˜λ©λ‹ˆκΉŒ?

λ°”μ΄λ„ˆλ¦¬ μΌ€μ΄μŠ€μ˜ 경우 1/(1+exp(value))λ₯Ό μ μš©ν•΄μ•Ό ν•˜λŠ” 반면, 닀쀑 클래슀 μΌ€μ΄μŠ€μ˜ 경우 1/(1+exp(-value))λ₯Ό μ μš©ν•΄μ•Ό ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

사둀λ₯Ό 보면 λ§žλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 팁 κ³ λ§ˆμ›Œ!

κ·ΈλŸ¬λ‚˜ 이것이 λ°”μ΄λ„ˆλ¦¬ 및 닀쀑 클래슀 사둀에 λŒ€ν•΄ λ‹€λ₯΄κ²Œ μ •μ˜λ˜λŠ” 이유λ₯Ό μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

λ„€, 참으둜 λ§ν•΄μ„œ 맀우 μ΄μƒν•˜κ³  ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” UCI Car Dataset(μžλ™μ°¨λ₯Ό ν—ˆμš© λΆˆκ°€, ν—ˆμš© κ°€λŠ₯, μ–‘ν˜Έ λ˜λŠ” 맀우 우수둜 λΆ„λ₯˜ν•˜λŠ” κ³³)μ—μ„œ ν…ŒμŠ€νŠΈν•˜μ—¬ κ·Έ 결둠에 λ„λ‹¬ν–ˆμŠ΅λ‹ˆλ‹€.

트리λ₯Ό sklearn 트리 λ˜λŠ” 이와 μœ μ‚¬ν•œ κ²ƒμœΌλ‘œ λ³€ν™˜ν•  수 μžˆλŠ” μΆ”κ°€ κΈ°λŠ₯이 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€. ν›„μž, sklearn λ‚˜λ¬΄ μ€‘μ—μ„œ λ‚˜λŠ” 이것이 μ˜¬λ°”λ₯΄κ²Œ λ³€ν™˜λ˜μ—ˆλ‹€κ³  적어도 100% ν™•μ‹ ν•©λ‹ˆλ‹€. xGB 트리의 경우 μ˜μ‹¬μ΄ 남아 μžˆμŠ΅λ‹ˆλ‹€.

ν›Œλ₯­ν•œ κΈ°λŠ₯이 될 κ²ƒμ΄λΌλŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€.

@GillesVandewiele @sosata : κ·Έλž˜μ„œ κ·Έ λ‘œμ§€μŠ€ν‹±μ—μ„œ (클래슀 i ) [ 1/(1+exp(-value)) ] , value λŠ” ν•΄λ‹Ή νŠΉμ • 클래슀의 트리 κ΄€λ ¨ ν•­λͺ©μ— ν•΄λ‹Ήν•˜λŠ” λͺ¨λ“  리프 점수의 ν•©κ³„μž…λ‹ˆλ‹€. μƒ˜ν”Œλ‘œ?

λ‚΄ 초기 의견의 μ˜ˆμ—μ„œ [1 0 0]에 λŒ€ν•œ 클래슀 ν™•λ₯ μ„ μ˜ˆμΈ‘ν•˜λ €κ³  ν•˜λ©΄:

print(model.predict_proba(np.array([[1,0,0]])))

λ‹€μŒ κ²°κ³Όλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

[[ 0.41852772  0.29073614  0.29073614]]

1/(1+exp(-value)) κ°€ 이것을 생성할 방법이 μ—†μŠ΅λ‹ˆλ‹€. μœ μΌν•œ 방법은 μ΄λŸ¬ν•œ ν™•λ₯ μ΄ 클래슀 μ „μ²΄μ—μ„œ ν•©μ‚°λœ κ°’μ˜ _softmax_ ν•¨μˆ˜μ— μ˜ν•΄ μƒμ„±λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

p[i] = exp(val[i])/(exp(val[1])+exp(val[2])+...+exp(val[N]))

μ—¬κΈ°μ„œ iλŠ” λŒ€μƒ 클래슀(N 클래슀 쀑)이고 val[i]λŠ” ν•΄λ‹Ή ν΄λž˜μŠ€μ— μ†ν•œ νŠΈλ¦¬μ—μ„œ μƒμ„±λœ λͺ¨λ“  κ°’μ˜ ν•©μž…λ‹ˆλ‹€.
우리의 μ˜ˆμ—μ„œ:

print(np.exp(+0.122449+0.10941)/(np.exp(+0.122449+0.10941)+np.exp(-0.0674157-0.0650523)+np.exp(-0.0674157-0.0650523)))
print(np.exp(-0.0674157-0.0650523)/(np.exp(+0.122449+0.10941)+np.exp(-0.0674157-0.0650523)+np.exp(-0.0674157-0.0650523)))
print(np.exp(-0.0674157-0.0650523)/(np.exp(+0.122449+0.10941)+np.exp(-0.0674157-0.0650523)+np.exp(-0.0674157-0.0650523)))

λ‹€μŒμ„ μƒμ„±ν•©λ‹ˆλ‹€:

0.418527719063
0.290736140469
0.290736140469

이것이 λ°”λ‘œ predict_proba() ν•¨μˆ˜κ°€ μ œκ³΅ν•œ κ²ƒμž…λ‹ˆλ‹€.

λ§žλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€ @sosata

제 κ²½μš°μ—λŠ” 각 λ‚˜λ¬΄λ₯Ό κ°œλ³„μ μœΌλ‘œ λ³€ν™˜ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€(λ”°λΌμ„œ λ‹€λ₯Έ λ‚˜λ¬΄μ˜ 잎 값을 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ). κ±°κΈ°μ—μ„œ μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜κ°€ κ·Έ 일을 ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ˜€μŠ΅λ‹ˆλ‹€.

@sosata μ–΄μ¨Œλ“  ν΄λž˜μŠ€λ³„λ‘œ κΈ°λŠ₯ μ€‘μš”λ„λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆκΉŒ? ν˜„μž¬ κ΅¬ν˜„μ€ λͺ¨λ“  ν΄λž˜μŠ€μ— λŒ€ν•œ λͺ¨λ“  κΈ°μ—¬λ₯Ό ν•©μ‚°ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ R APIμ—λŠ” 이에 λŒ€ν•œ λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€(https://github.com/CodingCat/xgboost/commit/e9405236a01715be1550a7e3809f36fc69ad4e8a μ°Έμ‘°).

@mlxai λ˜ν•œ Python API만 μ‹œλ„ν–ˆλŠ”λ° ν΄λž˜μŠ€λ³„λ‘œ 얻을 수 μžˆμ—ˆλ˜ 기얡이 μ—†μŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 제 μƒκ°μ—λŠ” XGBoost의 κΈ°λŠ₯ μ€‘μš”λ„λ₯Ό ν•΄λ‹Ή κΈ°λŠ₯에 λŒ€ν•œ 총 λΆ„ν•  수둜 μ •μ˜ν•˜λŠ” 것은 λ‹€μ†Œ λ‹¨μˆœν•©λ‹ˆλ‹€. 개인적으둜 μ €λŠ” κΈ°λŠ₯ μ„ΈνŠΈμ—μ„œ ν•΄λ‹Ή κΈ°λŠ₯을 μ œκ±°ν•˜κ³  ν•΄λ‹Ή κΈ°λŠ₯ 없이 λͺ¨λΈμ„ ν›ˆλ ¨ν•˜κ³  ν…ŒμŠ€νŠΈν•  λ•Œ μ •ν™•λ„μ˜ κ²°κ³Ό κ°μ†Œ(λ˜λŠ” 증가)λ₯Ό κ³„μ‚°ν•˜μ—¬ κΈ°λŠ₯ μ€‘μš”λ„λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. μ €λŠ” λͺ¨λ“  κΈ°λŠ₯에 λŒ€ν•΄ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  "κΈ°λŠ₯ μ€‘μš”λ„"λ₯Ό μ •ν™•λ„μ˜ κ°μ†Œ(λ˜λŠ” λ§ˆμ΄λ„ˆμŠ€ 증가)의 μ–‘μœΌλ‘œ μ •μ˜ν•©λ‹ˆλ‹€. 각 κΈ°λŠ₯ μ œκ±°μ— λŒ€ν•΄ λ‹€λ₯Έ ν•™μŠ΅/ν…ŒμŠ€νŠΈ ν•˜μœ„ 집합을 μ‚¬μš©ν•˜μ—¬ ꡐ윑 및 ν…ŒμŠ€νŠΈλ₯Ό μ—¬λŸ¬ 번 μˆ˜ν–‰ν•  수 μžˆμœΌλ―€λ‘œ κΈ°λŠ₯ μ€‘μš”λ„μ˜ μ‹ λ’° ꡬ간도 μΆ”μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ ν΄λž˜μŠ€λ³„λ‘œ μ€‘μš”λ„λ₯Ό λ³„λ„λ‘œ κ³„μ‚°ν•˜μ—¬ ν΄λž˜μŠ€λ³„ κΈ°λŠ₯ μ€‘μš”λ„λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. 이것은 λΆ„ν•  수λ₯Ό κ³„μ‚°ν•˜λŠ” 것보닀 λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œ 더 의미 μžˆλŠ” κ²°κ³Όλ₯Ό μƒμ„±ν–ˆμŠ΅λ‹ˆλ‹€.

@sosata κ·€ν•˜μ˜ μ˜ˆλŠ” 맀우 μ§κ΄€μ μ΄μ§€λ§Œ 각 클래슀의 점수λ₯Ό μ–΄λ–»κ²Œ μ‚°μΆœν•˜λŠ”μ§€ 아직 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 쑰금 μ„€λͺ…

@chrisplyn νŠΉμ • ν΄λž˜μŠ€μ— μ†ν•˜λŠ” μ•™μƒλΈ”μ˜ λͺ¨λ“  κ²°μ • 트리λ₯Ό ν‰κ°€ν•˜κ³  κ²°κ³Ό 점수λ₯Ό ν•©μ‚°ν•©λ‹ˆλ‹€.

μ•žμ—μ„œ @sosata κ°€ μ˜¬λ°”λ₯΄κ²Œ μ–ΈκΈ‰ν–ˆλ“―μ΄ μ•™μƒλΈ”μ˜ λ‚˜λ¬΄ μˆ˜λŠ” n_esimators * n_classes

@sosata κ·€ν•˜μ˜ μ˜ˆλŠ” 맀우 λͺ…ν™•ν•©λ‹ˆλ‹€. 맀우 κ°μ‚¬ν•©λ‹ˆλ‹€!

@chrisplyn 예츑 μΈμŠ€ν„΄μŠ€ [1,0,0]은 λΆ€μŠ€ν„°[0~5]둜 λΆ„λ₯˜λ˜κ³  각각 리프 κ°’ [0.122449, -0.0674157, -0.0674157, 0.10941, -0.0650523, -0.0650523]을 μ–»μŠ΅λ‹ˆλ‹€.
λΆ€μŠ€ν„°[0, 3]은 클래슀 0에 μ†ν•˜κ³ , λΆ€μŠ€ν„°[1, 4]λŠ” 클래슀 1에 μ†ν•˜κ³ , λΆ€μŠ€ν„°[2, 5]λŠ” 클래슀 2에 μ†ν•˜λ―€λ‘œ val[0] =(0.122449 + 0.10941), val[1 ] = (-0.0674157 + -0.0650523), val[2] = (-0.0674157 + -0.0650523).
더 λͺ…ν™•ν•©λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰