반응형

오류 메시지에서 나타난 **sklearn.utils._param_validation.InvalidParameterError**는 SGDClassifier의 loss 매개변수에 잘못된 값을 전달했기 때문에 발생합니다.

 

  1. 원인:
    • SGDClassifier에서 loss 매개변수에 "log"를 사용했지만, 이는 허용되지 않는 값입니다.
    • SGDClassifier는 "log_loss"를 사용해야 합니다.
  2. log vs log_loss:
    • 이전 버전의 Scikit-learn에서는 loss='log'를 사용하여 로지스틱 회귀를 수행했지만, 최신 버전에서는 log가 log_loss로 변경되었습니다.
    • 따라서 최신 Scikit-learn에서 "log"를 사용하면 오류가 발생합니다.

해결 방법

1. loss='log_loss'로 수정

SGDClassifier의 loss 매개변수를 "log_loss"로 변경해야 합니다.

from sklearn.linear_model import SGDClassifier

# SGDClassifier 생성 시 'log_loss' 사용
sgd = SGDClassifier(loss='log_loss', random_state=42)

추가 설명

loss 매개변수란?

loss는 SGDClassifier가 사용하는 손실 함수의 종류를 정의합니다. 다음은 주요 loss 옵션의 설명입니다:

  • log_loss: 로지스틱 회귀를 수행하는 손실 함수. 분류 작업에 적합합니다.
  • hinge: SVM의 서포트 벡터 머신 손실 함수. 선형 SVM에 사용됩니다.
  • squared_hinge: SVM 손실 함수의 제곱 버전.
  • perceptron: 퍼셉트론 학습을 위한 손실 함수.
  • huber: 회귀 작업에 사용되는 Huber 손실 함수.
  • squared_error: MSE(Mean Squared Error). 회귀 문제에 사용됩니다.

Scikit-learn 버전과의 관계

Scikit-learn의 최신 버전에서는 loss 매개변수 값에 대해 엄격한 검증을 수행합니다. 예전에는 허용되던 "log"와 같은 값이 더 이상 허용되지 않으며, 최신 이름(예: "log_loss")으로 대체되었습니다.

Scikit-learn 버전 확인

현재 사용하는 Scikit-learn 버전을 확인하려면 다음 명령을 실행합니다:

import sklearn
print(sklearn.__version__)

 

최신 버전을 설치하려면 다음을 실행하세요:

pip install --upgrade scikit-learn

 

요약

  • 오류 원인: SGDClassifier에서 loss='log'를 사용했기 때문에 발생.
  • 해결 방법: loss='log_loss'로 변경.
  • 최신 Scikit-learn에서는 loss 매개변수 값에 대해 최신 옵션을 확인하고 사용해야 합니다.
728x90
반응형
반응형

Docker를 사용하여 필요한 container를 실행할때 종종 특정 문제로 자동 종료되는 문제가 발생한다.

 

어제 설정하던 aerospike에서 발생한 문제로 예를 들어보겠다.

$ sudo docker run -d -v /opt/aerospike/etc/:/opt/aerospike/etc/ --name aerospike -p 3000-3002:3000-3002 aerospike:ce-5.7.0.11 --config-file /opt/aerospike/etc/aerospike.conf
c9f7eb263df0b0d0854df535f6dcb70251b3730696629618a4802b8e047daec9
$ sudo docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED      STATUS      PORTS                                                                                                                                                 NAMES
3efd82760b2c   rabbitmq:management   "docker-entrypoint.s…"   3 days ago   Up 3 days   4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp   rabbitmq

위 내용은 서버 콘솔에 접속하여 aerospike container를 실행하고 실행된 컨테이너를 확인한 것이다.

aerospike가 리스트에 없는것을 확인할 수 있는데 그런경우 -a 옵션을 주면 모든 컨테이너 리스트를 확인 할 수 있다.

$ sudo docker ps -a
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS                      PORTS                                                                                                                                                 NAMES
c9f7eb263df0   aerospike:ce-5.7.0.11       "/usr/bin/dumb-init …"   13 seconds ago   Exited (1) 12 seconds ago                                                                                                                                                         aerospike
3efd82760b2c   rabbitmq:management         "docker-entrypoint.s…"   3 days ago       Up 3 days                   4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp   rabbitmq
f7f362458893   aerospike/amc               "/opt/amc/amc ' -con…"   7 days ago       Exited (2) 5 days ago                                                                                                                                                             aerospike-console
78a6c3b31e60   aerospike/aerospike-tools   "wrapper aql -h"         7 days ago       Exited (255) 7 days ago                                                                                                                                                           dazzling_wright

결과의 첫번째 항목이 실행하고자 하였던 container로 상태를 보면 Exited (1) 로 되어 있는것을 확인할 수 있다.

Exited (1)코드를 찾아보면 응용프로그램 오류로 인한 실패라고 한다. (다른 의견도 있으나 위의 경우와 가장 근접한 답인듯 함)

코드의 의미는 알았으나 정확한 원인은 알 수가 없다.

이런 경우 docker logs {container id} 명령어를 사용하면 컨테이너를 실행하면 발생한 오류 로그를 볼 수가 있다.

$ sudo docker logs c9f7eb263df0
link eth0 state up
link eth0 state up in 0
Mar 21 2022 09:20:06 GMT: CRITICAL (config): (cfg.c:2093) couldn't open configuration file /opt/aerospike/etc/aerospike.conf: No such file or directory
Mar 21 2022 09:20:06 GMT: WARNING (as): (signal.c:166) SIGINT received, shutting down Aerospike Community Edition build 5.7.0.11 os debian10
Mar 21 2022 09:20:06 GMT: WARNING (as): (signal.c:169) startup was not complete, exiting immediately

configuration 파일에 문제가 있어 실행이 되지 않았음을 알 수 있다.

내용을 수정하고 다시 시작하니 문제 없이 잘 동작 하였다.

 

 

728x90
반응형

+ Recent posts