• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

코드 오류

21.03.14 14:27 작성 조회수 679

0

안녕하세요!

생존자 예측할때 여러 classifier를 사용하고 학습, 예측, 평가 과정에서 다음과 같은 오류가 발생했습니다.

코드는 선생님이 적어주신 대로 확인하였는데,  무엇이 문제인지 알고 싶습니다.

오류의 윗부부는 다음과 같습니다.

추가로, randomforest 평가 수치가 선생님께서 보여주신 수치와 다른데, 이것도 코드의 문제인가요?

DecisionTreeClassifier 정확도: 0.7877
RandomForestClassifier 정확도: 0.8547
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-32-a717530aaf63> in <module>
     20 
     21 # LogisticRegression 학습/예측/평가
---> 22 lr_clf.fit(X_train, y_train)
     23 lr_pred = lr_clf.predict(X_test)
     24 print('LogisticRegression 정확도: {0:.4f}'.format(accuracy_score(y_test, lr_pred)))

답변 5

·

답변을 작성해보세요.

0

이유를 모르겠군요.

뭔가 다른 패키지랑 충돌이 나는것 같습니다만,,

일단 pip install -U scikit-learn으로 0.24 로 upgrade를 해보시지요.

이것도 안되면 conda 가상환경을 새로 생성하셔서 여기에 처음부터 sklearn을 설치를 해보시지요.

conda create -n new_env python==3.6

하신 뒤 conda command console에서 conda activate new_env

그런 다음에 sklearn 을 new_env 가상환경에서 한번 설치 하셔서 테스트 해보시는 게 좋을 것 같습니다.

이게 어려우시면, google colab 환경으로 실습 환경을 바꾸어 보시지요.

colab에서 Google drive에 있는 파일을 연동하는 부분은 섹션 8 텍스트 분석에

텍스트 분석 실습 1: 캐글 경연 Mercari Price Suggestion 실습 개요 및 Google Colab 사용설명 동영상에 있습니다. 

 

0

당뇨병 실습 코드에서도 로지스틱 회귀를 이용하였으나 오류가 생겼습니다.

sklearn 버젼은 다음과 같습니다.

'0.23.2'


X_train 만드는 소스코드는 다음과 같습니다.

# 피쳐 데이터 세트 X, 레이블 데이터 세트 y를 추출

# 맨 끝이 outcome column으로, label 값임. 컬럼 위치 -1이용해 추출

X = diabetes_data.iloc[:, :-1]

y = diabetes_data.iloc[:, -1]

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2, random_state = 156, stratify = y)

# 로지스틱 회귀로 학습 예측 평가 수행

lr_clf = LogisticRegression()

lr_clf.fit(X_train, y_train)

pred = lr_clf.predict(X_test)

0

흠, 이유를 잘 모르겠군요.

현재 Scikit learn 버전을 알려 주시겠습니까?

import sklearn

print(sklearn.__version__)

그리고 X_train 만드는 소스코드도 아래 글로 올려 주십시요.

0

다른 분류기는 제대로 실행되는데, 로지스틱회귀만 오류가 나타나는 것 같습니다!

<실행 코드>

from sklearn.tree import DecisionTreeClassifier

from sklearn.ensemble import RandomForestClassifier

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score

# 결정틀, 랜덤포레스트, 로지스틱 회귀를 위한 사이킷런 Classifier 클래스 형성

dt_clf = DecisionTreeClassifier(random_state = 11)

rf_clf = RandomForestClassifier(random_state = 11)

lr_clf = LogisticRegression()

# DecisionTreeClassifier 학습/예측/평가

dt_clf.fit(X_train, y_train)

dt_pred = dt_clf.predict(X_test)

print('DecisionTreeClassifier 정확도: {0:.4f}'.format(accuracy_score(y_test, dt_pred)))

# RandomForestClassifier 학습/예측/평가

rf_clf.fit(X_train, y_train)

rf_pred = rf_clf.predict(X_test)

print('RandomForestClassifier 정확도: {0:.4f}'.format(accuracy_score(y_test, rf_pred)))

# LogisticRegression 학습/예측/평가

lr_clf.fit(X_train, y_train)

lr_pred = lr_clf.predict(X_test)

print('LogisticRegression 정확도: {0:.4f}'.format(accuracy_score(y_test, lr_pred)))

--

<출력 결과>

DecisionTreeClassifier 정확도: 0.7877
RandomForestClassifier 정확도: 0.8547

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-17-d49f91c1d5fd> in <module>
     22 
     23 # LogisticRegression 학습/예측/평가
---> 24 lr_clf.fit(X_train, y_train)
     25 lr_pred = lr_clf.predict(X_test)
     26 print('LogisticRegression 정확도: {0:.4f}'.format(accuracy_score(y_test, lr_pred)))

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/linear_model/_logistic.py in fit(self, X, y, sample_weight)
   1405         else:
   1406             prefer = 'processes'
-> 1407         fold_coefs_ = Parallel(n_jobs=self.n_jobs, verbose=self.verbose,
   1408                                **_joblib_parallel_args(prefer=prefer))(
   1409             path_func(X, y, pos_class=class_, Cs=[C_],

~/opt/anaconda3/lib/python3.8/site-packages/joblib/parallel.py in __call__(self, iterable)
   1039             # remaining jobs.
   1040             self._iterating = False
-> 1041             if self.dispatch_one_batch(iterator):
   1042                 self._iterating = self._original_iterator is not None
   1043 

~/opt/anaconda3/lib/python3.8/site-packages/joblib/parallel.py in dispatch_one_batch(self, iterator)
    857                 return False
    858             else:
--> 859                 self._dispatch(tasks)
    860                 return True
    861 

~/opt/anaconda3/lib/python3.8/site-packages/joblib/parallel.py in _dispatch(self, batch)
    775         with self._lock:
    776             job_idx = len(self._jobs)
--> 777             job = self._backend.apply_async(batch, callback=cb)
    778             # A job can complete so quickly than its callback is
    779             # called before we get here, causing self._jobs to

~/opt/anaconda3/lib/python3.8/site-packages/joblib/_parallel_backends.py in apply_async(self, func, callback)
    206     def apply_async(self, func, callback=None):
    207         """Schedule a func to be run"""
--> 208         result = ImmediateResult(func)
    209         if callback:
    210             callback(result)

~/opt/anaconda3/lib/python3.8/site-packages/joblib/_parallel_backends.py in __init__(self, batch)
    570         # Don't delay the application, to avoid keeping the input
    571         # arguments in memory
--> 572         self.results = batch()
    573 
    574     def get(self):

~/opt/anaconda3/lib/python3.8/site-packages/joblib/parallel.py in __call__(self)
    260         # change the default number of processes to -1
    261         with parallel_backend(self._backend, n_jobs=self._n_jobs):
--> 262             return [func(*args, **kwargs)
    263                     for func, args, kwargs in self.items]
    264 

~/opt/anaconda3/lib/python3.8/site-packages/joblib/parallel.py in <listcomp>(.0)
    260         # change the default number of processes to -1
    261         with parallel_backend(self._backend, n_jobs=self._n_jobs):
--> 262             return [func(*args, **kwargs)
    263                     for func, args, kwargs in self.items]
    264 

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/linear_model/_logistic.py in _logistic_regression_path(X, y, pos_class, Cs, fit_intercept, max_iter, tol, verbose, solver, coef, class_weight, dual, penalty, intercept_scaling, multi_class, random_state, check_input, max_squared_sum, sample_weight, l1_ratio)
    760                 options={"iprint": iprint, "gtol": tol, "maxiter": max_iter}
    761             )
--> 762             n_iter_i = _check_optimize_result(
    763                 solver, opt_res, max_iter,
    764                 extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/optimize.py in _check_optimize_result(solver, result, max_iter, extra_warning_msg)
    241                 "    https://scikit-learn.org/stable/modules/"
    242                 "preprocessing.html"
--> 243             ).format(solver, result.status, result.message.decode("latin1"))
    244             if extra_warning_msg is not None:
    245                 warning_msg += "\n" + extra_warning_msg

AttributeError: 'str' object has no attribute 'decode'

0

안녕하십니까,

뭔가 학습 데이터 세트에 문제가 있어 보입니다만,

실습용 소스코드 커널을 재 기동을 시키고 다시 수행을 해보십시요. 그래도 오류가 발생하면,  전체 출력 메시지를 여기에 텍스트 형식으로 올려 주십시요. 현재는 오류 메시지가 잘려서 확인이 어렵습니다.

그리고 소스코드 전체 역시 여기에 텍스트 형식으로 올려 주십시요.