GIL's LAB

Scikit-learn NotFittedError 본문

파이썬/환경설정 및 오류 해결

Scikit-learn NotFittedError

GIL~ 2023. 8. 7. 10:29

NotFittedError는 사이킷런의 모델 인스턴스를 학습하지 않고 활용할 때 발생하는 에러입니다.

간단한 예시를 살펴보겠습니다. 

먼저 임의로 데이터를 만들고 LinearRegression 클래스를 이용해서 선형 회귀 모델을 만들겠습니다.

import numpy as np
from sklearn.linear_model import LinearRegression
X = np.random.random((100, 3))
y = np.random.random(100)
model = LinearRegression()

다음으로 이렇게 만들어진 model을 사용해서 X의 라벨을 예측해보겠습니다.

model.predict(X)

[실행 결과]

---------------------------------------------------------------------------
NotFittedError                            Traceback (most recent call last)
<ipython-input-17-43a58eb494e8> in <module>
----> 1 model.predict(X)

~\AppData\Roaming\Python\Python38\site-packages\sklearn\linear_model\_base.py in predict(self, X)
    353             Returns predicted values.
    354         """
--> 355         return self._decision_function(X)
    356 
    357     def _set_intercept(self, X_offset, y_offset, X_scale):

~\AppData\Roaming\Python\Python38\site-packages\sklearn\linear_model\_base.py in _decision_function(self, X)
    334 
    335     def _decision_function(self, X):
--> 336         check_is_fitted(self)
    337 
    338         X = self._validate_data(X, accept_sparse=["csr", "csc", "coo"], reset=False)

~\AppData\Roaming\Python\Python38\site-packages\sklearn\utils\validation.py in check_is_fitted(estimator, attributes, msg, all_or_any)
   1378 
   1379     if not fitted:
-> 1380         raise NotFittedError(msg % {"name": type(estimator).__name__})
   1381 
   1382 

NotFittedError: This LinearRegression instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

 

NotFittedError가 발생했습니다. 

친절하게도 This LinearRegression instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator란 문구와 같이 등장했습니다. 생성한 LinearRegression instance가 학습되지 않았으니, fit 메서드를 이용해서 모델을 학습하라고 해석할 수 있겠네요.

 

현재 만든 model은 선언만 해준 것으로 빈 껍데기에 불과합니다. 

이를 활용하기 위해서는 반드시 학습을 해줘야 합니다. 

즉, 아래와 같이 X와 y를 이용해서 model을 학습해준 뒤 predict 메서드를 이용하면 정상적으로 작동하는 것을 알 수 있습니다.

model.fit(X, y)
model.predict(X)

[실행 결과]

array([0.62048451, 0.53776985, 0.44899954, 0.45861017, 0.48706049,
       0.50052395, 0.61870385, 0.46024703, 0.49653643, 0.43481032,
       0.44983331, 0.52403423, 0.45543152, 0.54226504, 0.47566291,
       0.41802113, 0.46246691, 0.50580912, 0.55361506, 0.55269921,
       0.57058922, 0.46028964, 0.43772055, 0.46397021, 0.46489378,
       0.49923468, 0.53177449, 0.49144076, 0.59002174, 0.45737009,
       0.51863138, 0.52950084, 0.64999773, 0.573832  , 0.51900087,
       0.62237894, 0.47243325, 0.49283281, 0.41435333, 0.54753908,
       0.51522962, 0.55591055, 0.51476189, 0.49597229, 0.51122384,
       0.48453732, 0.49681429, 0.64020096, 0.60231534, 0.48973703,
       0.56348271, 0.59633199, 0.39613843, 0.41111203, 0.51614134,
       0.53283831, 0.55612269, 0.48904166, 0.49440104, 0.46914856,
       0.59393956, 0.37794852, 0.42666274, 0.5397091 , 0.4348672 ,
       0.59359121, 0.56832952, 0.40653642, 0.52258935, 0.66288156,
       0.50907375, 0.56636368, 0.40810082, 0.51986254, 0.57423694,
       0.49664783, 0.64125099, 0.55564907, 0.6561786 , 0.47324263,
       0.48066972, 0.39247412, 0.53477159, 0.42134534, 0.5941709 ,
       0.39727188, 0.48622512, 0.54156577, 0.43403335, 0.58460314,
       0.56918672, 0.60613608, 0.46962133, 0.47261304, 0.50100671,
       0.51835933, 0.44789845, 0.5769234 , 0.54713358, 0.55220004])

 이는 지도학습 인스턴스의 predict 메서드 뿐만 아니라, 전처리 인스턴스의 transform 메서드에서도 동일합니다.

 

 


데이터 분석 서비스가 필요한 분은 아래 링크로! 

https://kmong.com/gig/374194 

 

데이터사이언스 박사의 데이터 분석 서비스 드립니다. | 150000원부터 시작 가능한 총 평점 5점의 I

78개 총 작업 개수 완료한 총 평점 5점인 데이터사이언스박사의 IT·프로그래밍, 데이터 분석·시각화 서비스를 68개의 리뷰와 함께 확인해 보세요. IT·프로그래밍, 데이터 분석·시각화 제공 등 150

kmong.com

 

Comments