• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

예제 (Round) 자릿수 관련

20.03.02 17:15 작성 조회수 359

1

 안녕하십니까 정말 수업을 잘 듣고 있습니다 감사합니다 

다름이 아니오라 하나 궁금한게 있어 연락드립니다

cross_val_score 실습 예제에서 np. round(scores, 4)  부분의 4가 소숫점 자리수로 생각하고 결과를 예상하였지만

결과문이

교차 검증별 정확도 : [0.98 0.94 0.98]

평균 검증 정확도 : 0.9667 

로 출력이 됩니다

혹시나 해서 format 함수로 써서 보니 자동으로 반올림이 되었는지 예로 scores[1]  값이 : 0.9400 으로 표시됩니다

random_state 숫자를 변경하여 넣어도 소수 둘째자리까지 표시되고 세번째 자리부터는 0으로 출력됩니다

cv 값을 수정하면 교차 검증별 정확도가 원하는 4자리까지 나오긴하더군요

단지 이번의 경우, 제가 똑같이 작성하고 수행하였지만 

교차 검증별 정확도가 소수2째자리에서 딱 떨어지는 건지

뭔가 옵션의 문제로 그런건지 궁금합니다(다운 받은 2.4 Model Selection 모듈 소개.ipynb를 사용해도 결과가 위처럼(소수 2째자리까지 표현됨) 나오네요) 

(별 중요하지 않은 부분일 수 있긴한데 앞으로도 혹시나 계속적으로 동일한 의문을 가질수도 있을거 같아 문의드립니다)

확인부탁드립니다 감사합니다

답변 4

·

답변을 작성해보세요.

0

김철민님의 프로필

김철민

질문자

2020.03.04

예 알겠습니다. 이렇게  시간 내주셔서 답변 주셔서 감사합니다.

강의 정말 잘 보고 있고 많은 도움이 되고 있습니다. 앞으로도 잘 부탁드립니다 감사합니다

0

안녕하십니까,

강의에 사용된 scikit learn 버전은 0.21 버전인데, 0.22버전에서는 말씀하신대로 소수점 2자리로 cross_val_score() 결과값이 나타납니다.  버전 0.21에서는 소수점 2자리를 넘어서는 값이 나오는 걸로 봐서는 정확히 소수점 2자리로 딱 떨어지는 것 같지는 않습니다. 아마 cross_val_score() 내부에서 cv 세트값에 따라서 소수점 몇자리로 잘라서 반환하는 것 같은데, 적어주신대로 회귀의 cross_val_score()에서는 소수점 두자리로 잘라서 반환하는 것 같지 않아서 저도 혼동이 되는 군요.  cv가 3일때는 소수점 두자리, 5일때 2자리를 훨씬 넘어서 반환

제가 추측한 결과 예상은 아래 두개중에 하나로 생각됩니다.

1. scikit learn이 업그레이드 되면서 정확도가 0.21 버전과 다르게 나오는데 이것이 소수점 2자리로 딱 떨어짐

아니면

2. 분류의 정확도는 cross_val_score()에서 cv 세트가 3일 경우 소수점 2자리로 잘라서 나옴. cv세트가 4이상일 경우는 소수점 자리수가 더 많음. 회귀의 정확도는 cross_val_score()에서 소수점 2자리를 훨씬 넘어서 반환.

사실 위 두가지 다 논리가 떨어집니다. 그냥 버전 upgrade에 따른 사소한 버그라고 생각하는게 더 나을 것 같습니다.

감사합니다.

0

김철민님의 프로필

김철민

질문자

2020.03.03

예 말씀하신 것과 같이 혹시나 다시 파일을 받아 진행해도 위와 같은 결과가 나옵니다

버전은 0.22.1 입니다

조금 당황스러운 것은 cross_val_score 예제 파일(shift+tab으로 활성화 된 창에 있는)을 이용하여

진행하면 저희가 생각하는 소수 4자리가 나온다는 것입니다 

감사합니다.

0

안녕하십니까,

저는 아래와 같이 소수 4자리로 나오는데, 이상하군요.

교차 검증별 정확도: [0.9804 0.9216 0.9792]
평균 검증 정확도: 0.9604

주피터 노트북을 재 기동해도 같은 결과가 나오는지요?
제 깃헙에서 다운로드한 소스코드 원본을 다시 수행해도 그렇게 나온다면 사이킷런 버전을 알려 주십시요.

import sklearn

print(sklearn.__version__) 하시면 됩니다.

감사합니다.