작성
·
440
0
knn_model = KNeighborsClassifier()
logreg_model = LogisticRegression()
svc_model = SVC()
decision_model = DecisionTreeClassifier()
random_model = RandomForestClassifier()
extra_model = ExtraTreesClassifier()
gbm_model = GradientBoostingClassifier()
nb_model = GaussianNB()
xgb_model = XGBClassifier(eval_metric='logloss')
lgbm_model = LGBMClassifier()
models = [
knn_model,
logreg_model,
svc_model,
decision_model,
random_model,
extra_model,
gbm_model,
nb_model,
xgb_model,
lgbm_model
]
k_fold = KFold(n_splits=10, shuffle=True, random_state=0) # K-Fold 사용
results = dict()
for alg in models:
alg.fit(X_train, y_train)
score = cross_val_score(alg, X_train, y_train.values.ravel(), cv=k_fold, scoring='accuracy')
results[alg.__class__.__name__] = np.mean(score)*100
위 코드를 실행한 후 results를 출력해보면 아래처럼 KNeighborsClassifier 모델만 nan값이 나오는데 그 이유를 모르겠습니다..
혹시 몰라 아래 코드처럼
neighbor 수를 지정해서 돌려봐도 nan 결과가 뜨는데 이유가 있을까요...??
다른 모델들도 다 안되면 데이터 문제인가 싶을텐데, knn 모델만 그래서 원인이 감이 잡히지 않습니다ㅜ
knn_model = KNeighborsClassifier(n_neighbors = 3)
답변 2
1
안녕하세요. 답변 도우미입니다.
코드가 여러 라인이고, 데이터까지 연결되어 있어서, 딱 어떤 부분이 문제이다 라고 정확히 이야기드리기는 어렵긴 한데요. 다음 정도의 내용을 참고해보시면 좋을 것 같습니다.
cross_val_score
에서 nan
값이 반환되는 것은 보통 데이터셋에 문제가 있거나, 모델이 특정 설정으로 학습할 수 없는 상황에서 발생합니다. KNeighborsClassifier
와 관련하여 다음과 같은 이유들이 있을 수 있습니다:
1. 데이터 이슈:
- 결측치가 포함되어 있을 경우 KNN은 결측치가 있는 데이터와 거리를 계산할 수 없기 때문에 문제가 발생할 수 있습니다.
- X_train
또는 y_train
에 NaN값이 있는지 확인해 보세요.
2. 데이터 스케일링:
- KNN은 거리 기반 알고리즘이므로 특성 간의 스케일 차이에 매우 민감합니다. 모든 특성이 동일한 스케일을 가지고 있지 않으면 문제가 발생할 수 있습니다. 일반적으로 KNN을 사용하기 전에 데이터를 스케일링하는 것이 좋습니다. 예를 들어, StandardScaler
또는 MinMaxScaler
를 사용하여 특성을 스케일링해 볼 수 있습니다.
3. 메모리 부족:
- 매우 큰 데이터셋의 경우 KNN은 메모리 부족으로 실패할 수 있습니다. 이는 KNN이 모든 데이터 포인트 간의 거리를 계산해야 하기 때문입니다.
4. 다른 설정 문제:
- KNeighborsClassifier
의 기본 설정 외에 다른 설정이 필요한 경우가 있을 수 있습니다. 예를 들면, n_neighbors
의 값을 변경해 볼 수 있습니다.
문제 해결을 위해 다음과 같은 점검 사항을 거쳐 보세요:
1. 데이터 확인:
print(X_train.isnull().sum())
print(y_train.isnull().sum())
위 코드로 NaN값이 있는지 확인합니다.
2. 데이터 스케일링:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
스케일링을 진행한 후 다시 KNN 모델에 학습 및 교차 검증을 시도합니다.
3. 만약 위의 점검 사항으로도 문제가 해결되지 않는다면, KNN 학습 및 교차 검증 과정에서 발생하는 에러 메시지를 확인하여 문제의 원인을 파악하는 것이 좋습니다.
감사합니다.
0
친절한 답변 감사합니다!
데이터에 Nan값은 없었는데 데이터스케일링을 하니 문제가 해결되었습니다!
덕분에 데이터스케일링에 대해 또 하나 배워갑니다ㅠ 감사합니다!