KT 에이블스쿨 51일차(1)

박기범·2023년 4월 13일
0

에이블스쿨

목록 보기
57/95

오늘은 미니프로젝트5 3일차로 다른 주제를 가지고 머신러닝을 진행했습니다.



실습 내용

오늘은 다른 데이터를 가지고 머신러닝을 진행했습니다. 컬럼수가 563개로 지금까지 데이터의 행은 많았지만 오늘처럼 많은 양의 컬럼을 다뤄본 적은 처음이였던 것 같습니다.



실습 코드

	# 변수의 특성 중요도 계산하기
    def plot_feature_importance(importance, names, result_only = False, topn = 'all'):
        feature_importance = np.array(importance)
        feature_name = np.array(names)

        data={'feature_name':feature_name,'feature_importance':feature_importance}
        fi_temp = pd.DataFrame(data)

        #변수의 특성 중요도 순으로 정렬하기
        fi_temp.sort_values(by=['feature_importance'], ascending=False,inplace=True)
        fi_temp.reset_index(drop=True, inplace = True)

        if topn == 'all' :
            fi_df = fi_temp.copy()
        else :
            fi_df = fi_temp.iloc[:topn]

        #변수의 특성 중요도 그래프로 그리기
        if result_only == False :
            plt.figure(figsize=(10,100))
            sns.barplot(x='feature_importance', y='feature_name', data = fi_df)

            plt.xlabel('importance')
            plt.ylabel('feature name')
            plt.grid()

        return fi_df

해당 함수는 변수 중요도를 확인할 수 있는 코드입니다.

	f_importance = model.feature_importances_
    f_name = train_x.columns


    fi_df = plot_feature_importance(f_importance, f_name)

모델 학습이 끝났다면해당 코드를 통해 각 변수 중요도를 확인할 수 있습니다.

    # 변수 중요도 기준으로 상위 n개와 하위 m개의 변수 선정
    n = 5  # 상위 n개의 변수
    m = 5  # 하위 m개의 변수


    # 상위 n개와 하위 m개의 변수를 포함한 데이터프레임 생성
    top_n_features = fi_df.head(n)['feature_name'].tolist()
    bottom_m_features = fi_df.tail(m)['feature_name'].tolist()

    selected_features = top_n_features + bottom_m_features + ['Activity']
    df_selected = data[selected_features]

    # 변수(feature)와 target(Activity) 간의 관계를 kdeplot으로 그리기
    import seaborn as sns
    import matplotlib.pyplot as plt

    for feature in selected_features[:-1]:
        sns.kdeplot(data=df_selected, x=feature, hue='Activity', common_norm=False)
        plt.xlabel(feature)
        plt.ylabel('Density')
        plt.title(f'KDE Plot of {feature} by Activity')
        plt.show()

각 변수별로 중요도 상위 하위 컬럼을 가지고 타겟 값과의 관계를 그래프로 그렸습니다.



복습

컬럼이 많은 데이터를 처음 다뤄봤는데 각 컬럼별로 비슷한 특징을 띠는 경향을 가지고 있는 것을 확인할 수 있었습니다. 각 컬럼별로 서로 연관이 있다면 해당 컬럼들을 한 컬럼으로 묶어주는 것도 좋은 방법이라고 생각했습니다.

변수중요도 또한 낮은 변수 중요도라면 과감하게 한번 지워서 모델링을 다시 진행해보면 좋을 것 같다고 생각했습니다.

시각화하는 것에 조금 더 익숙해져야겠습니다!







컬럼이 많은 데이터에 대해 학습해서 재밌었습니다.




※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.

profile
개발자가 되기 위한 한걸음

0개의 댓글