본문 바로가기
KT-AIVLE

[KT-AIVLE 11주차 AI Track] 미니프로젝트 5차

by 배준오 2023. 4. 24.
반응형

블로그 카테고리 용도

🔎 매주 KT 에이블 스쿨에서 배운 내용을 복기하기 위해

 

✨ 11주차 소감

  • 피쳐가 많다면 줄일 수 있는 방법을 찾아보자

 

 

미니프로젝트 5차

📌 스마트폰 센서 데이터 기반 모션 분류

받은 데이터 : X축,Y축,Z축 신호에 대한 가속도,각속도등 250가지 이상의 feature를 가진 데이터

(매우 좋은 데이터로 전처리 방법, 모델에 상관없이 정확도가 99%가 나옴)

⚠️ 문제 정의 :  모델예측하는데 쓰이는 feature가 너무 많음. 과도한 시간과 노력을 들일 만큼 모든 feature가

모델 예측에 유의미한 데이터로 적용되는가? 그렇지 않다면 feature를 줄여서 비용을 아껴보자

🔎 사용 방법 :

1, 변수 중요도 기반으로 상위 n개의 데이터를 추출(Permutation Importance)

 

코드 구현 :

# 상위 몇개의 데이터로 xgb 평가
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# 중요도가 높은 피쳐부터 몇개까지 피쳐를 설정해야 auc가 제일 높은가?
max_accuracy = 0
idx = 0
for k in range(1,250):
    X_new = np.array([x[temp['feature'][i]] for i in range(k)]) # k값에 따라 모델 정확도가 달라짐짐

    X_new = X_new.T
    # 데이터 분리하기
    X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=42)
    y_train = y_train.astype(int)
    y_test = y_test.astype(int)

    # 모델 정의하기
    model = XGBClassifier()

    # 모델 학습하기
    model.fit(X_train, y_train)

    # 모델 예측하기
    y_pred = model.predict(X_test)

    # 모델 성능 평가하기
    accuracy = accuracy_score(y_test, y_pred)
    if accuracy > max_accuracy:
        max_accuracy = accuracy
        idx = k

print(f'모델 정확도: {max_accuracy}',"정확도가 최대 일때 상위 피쳐개수 :",idx)
# 모델 정확도: 0.9957519116397621 정확도가 최대 일때 상위 피쳐개수 : 121

permutation importance를 통해 얻은 피쳐 중요도에 대한 리스트를 데이터 프레임으로 만들어

for문을 통해 중요도가 높은 상위 n개까지의 데이터만 추출해서 정확도를 구했습니다.

실제로 250개의 데이터를 모두 사용하는 것보다 상위 121개의 데이터만 사용한 것이 acc가 더 높은 것으로 확인이 되었습니다.

 

 

 

 

 

반응형