λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ‘©πŸ»‍πŸ’» Programming/error-record

[Error] Tensorflow | λ”₯λŸ¬λ‹ 이진뢄λ₯˜ | valueerror: classification metrics can't handle a mix of binary and continuous targets

 

tensorflowλ₯Ό μ΄μš©ν•˜μ—¬ λ”₯λŸ¬λ‹μ„ κ΅¬ν˜„ν•˜λ˜ 쀑, λ§ˆμ§€λ§‰ λͺ¨λΈ 평가 λΆ€λΆ„μ—μ„œ μ•„λž˜μ™€ 같은 μ—λŸ¬κ°€ 났닀.

valueerror: classification metrics can't handle a mix of binary and continuous targets

μ²˜μŒμ—λŠ” λ‹€μ§œκ³ μ§œ ꡬ글링뢀터 ν•˜μ˜€λŠ”λ°, λ‚˜μ™€ λ‹€λ₯Έ 경우의 μ‚¬λžŒλ“€λ„ 같은 μ—λŸ¬κ°€ ꡉμž₯히 많이 λ‚œ 것을 확인할 수 μžˆμ—ˆλ‹€.

μ—λŸ¬ 메세지 자체λ₯Ό 해석해 보면

κ°’ 였λ₯˜ : λΆ„λ₯˜ λ©”νŠΈλ¦­μ€ 이진 및 연속 λŒ€μƒμ˜ ν˜Όν•©μ„ μ²˜λ¦¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

κ²°κ΅­ λ‹€μ‹œ μ½”λ“œλ‘œ λŒμ•„μ™€μ„œ 확인을 ν•΄λ³΄λ‹ˆ, μΉœμ ˆν•˜κ²Œλ„ Tracebackμ—μ„œ μ–΄λ””μ„œ 였λ₯˜κ°€ μ‹œμž‘λ˜μ—ˆλŠ”μ§€ 힌트λ₯Ό μ£Όκ³  μžˆμ—ˆλ‹€.

λ¬Έμ œκ°€ λ˜μ—ˆλ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

from sklearn.metrics import classification_report
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

 

error!!

tensorftlow

Traceback을 보면 3번째 μ½”λ“œκΉŒμ§€λŠ” μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜μ˜€μœΌλ‚˜, print문이 μžˆλŠ” 4번째 μ€„μ—μ„œ μ—λŸ¬κ°€ λ‚œ 것을 확인할 수 μžˆλ‹€.

λ¬Έμ œκ°€ λ˜λŠ” νŒŒλΌλ―Έν„°μΈ y_test와 y_predλ₯Ό ν”„λ¦°νŠΈν•΄ 보자!

μ•„λž˜ 사진과 κ°™λ‹€. 이진 λΆ„λ₯˜λ₯Ό ν•˜λŠ” λͺ¨λΈμΈλ°, 두 값을 비ꡐ할 μˆ˜κ°€ μ—†λ‹€.

 

y_pred 좜λ ₯
y_test 좜λ ₯

μ΅œμ΄ˆμ— λ‚΄ μƒκ°μœΌλ‘œλŠ”, λ”₯λŸ¬λ‹ λͺ¨λΈμ—μ„œ μ‹ κ²½λ§μ˜ 좜λ ₯μΈ΅(Output Layer)의 ν™œμ„±ν™”ν•¨μˆ˜λ‘œ μ‹œκ·Έλͺ¨μ΄λ“œ(Sigmoid)ν•¨μˆ˜λ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ—, 좜λ ₯값이 λ”± λ–¨μ–΄μ§€λŠ” 0 λ˜λŠ” 1이 λ‚˜μ˜¬ 거라고 μ°©κ°ν–ˆλ‹€. πŸ”₯ν•˜μ§€λ§Œ λ”₯λŸ¬λ‹μ€ 0λΆ€ν„° 1μ‚¬μ΄μ˜ ν™•λ₯  값이 λ‚˜μ˜¨λ‹€.

➑️ flatten()와 np.whereλ₯Ό μ΄μš©ν•˜μ—¬ λ³€ν™˜μ„ ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

(μ°Έκ³  : μ œκ°€ ν’€μ—ˆλ˜ λ¬Έμ œμ—μ„œλŠ” 1κ³Ό 2둜 이진 λΆ„λ₯˜λ₯Ό ν•˜λŠ” λ¬Έμ œμ—¬μ„œ 0κ³Ό 1이 μ•„λ‹Œ 1κ³Ό 2둜 λ³€ν™˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€)

preds_1d = y_pred.flatten() # 차원 펴주기
pred_class = np.where(preds_1d > 0.5, 2 , 1) #0.5보닀크면 2, μž‘μœΌλ©΄ 1

'''λͺ¨λΈ 평가'''
from sklearn.metrics import classification_report
y_pred = model.predict(X_test)
print(classification_report(y_test, pred_class))
 

λ³€ν™˜ν•΄μ€€ y_pred -> pred_class라고 μ €μž₯
μ—λŸ¬μ—†μ΄ 잘 λ™μž‘ :)

μ—λŸ¬ 없이 잘 λ™μž‘ν•¨μ„ μ•Œ 수 μžˆλ‹€! ☺️


πŸ” μ‚¬μš©ν•œ ν•¨μˆ˜ 

1. numpy.ndarray.flatten : ν•œ μ°¨μ›μœΌλ‘œ μΆ•μ†Œλœ λ°°μ—΄μ˜ 볡사본을 λ°˜ν™˜

2. numpy.where : 쑰건에 따라 x λ˜λŠ” yμ—μ„œ μ„ νƒν•œ μš”μ†Œλ₯Ό λ°˜ν™˜

     - parameters

         1) condition : array_like, bool ➑️ True이면 xλ₯Ό μƒμ„±ν•˜κ³ , 그렇지 μ•ŠμœΌλ©΄ yλ₯Ό 생성

         2) x, y : array_like ➑️ 선택할 κ°’


REFERENCE