ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3-2 [실습] 다층 퍼셉트론(MLP) 모델로 2D 데이터 분류하기
    DX 2021. 12. 13. 12:15

    import numpy as np
    from visual import *
    from sklearn.neural_network import MLPClassifier

    from elice_utils import EliceUtils
    elice_utils = EliceUtils()

    import warnings
    warnings.filterwarnings(action='ignore')

    np.random.seed(100)
        
    # 데이터를 읽어오는 함수입니다.
        
    def read_data(filename):   ### filename에 경로 입력
        
        X = []   ### 트레인 데이터
        Y = []   ### 레이블
        
        with open(filename) as fp:
            N, M = fp.readline().split()
            N = int(N)
            M = int(M)
            
            for i in range(N):
                line = fp.readline().split()
                for j in range(M):
                    X.append([i, j])
                    Y.append(int(line[j]))
        
        X = np.array(X)
        Y = np.array(Y)
        
        return (X, Y)

    '''
    1. MLPClassifier를 정의하고 hidden_layer_sizes를
       조정해 hidden layer의 크기 및 레이어의 개수를
       바꿔본 후, 학습을 시킵니다.
    '''

    def train_MLP_classifier(X, Y):
        
        clf = MLPClassifier(hidden_layer_sizes=(100,100))   ### classifier 모델 선언
        
        clf.fit(X,Y) ### 학습 - fit 함수 사용 트레인데이터와 레이블 넣으면 학습
        
        return clf

    '''
    2. 테스트 데이터에 대한 정확도를 출력하는 
       함수를 완성합니다. 설명을 보고 score의 코드를
       작성해보세요.
    '''

    def report_clf_stats(clf, X, Y):
        
        hit = 0
        miss = 0
        
        for x, y in zip(X, Y):
            if clf.predict([x])[0] == y:
                hit += 1
            else:
                miss += 1
        
        score = hit / len(X) * 100. # 테스트 셋에 대한 스코어 계산 (실습2. 참고) hit을 학습데이터의 길이로 나누고 100곱함 (뒤에 마침표 필요)
        
        print("Accuracy: %.1lf%% (%d hit / %d miss)" % (score, hit, miss))

    '''
    3. main 함수를 완성합니다.

       Step01. 학습용 데이터인 X_train, Y_train과
               테스트용 데이터인 X_test, Y_test를 각각
               read_data에서 반환한 값으로 정의합니다. 
               
               우리가 사용할 train.txt 데이터셋과
               test.txt 데이터셋은 data 폴더에 위치합니다.
               
       Step02. 앞에서 학습시킨 다층 퍼셉트론 분류 
               모델을 'clf'로 정의합니다. 'clf'의 변수로는
               X_train과 Y_train으로 설정합니다.
               
       Step03. 앞에서 완성한 정확도 출력 함수를
               'score'로 정의합니다. 'score'의 변수로는
               X_test와 Y_test로 설정합니다.
    '''

    def main():
        
        X_train, Y_train = read_data('data/train.txt')   ### 데이터 불러오기
        
        X_test, Y_test = read_data('data/test.txt')
        
        clf = train_MLP_classifier(X_train, Y_train)    # 학습된 모델 불러오기
        
        score = report_clf_stats(clf, X_test, Y_test)  ### 스코어 함수 부르고, 학습한 모델(clf), 테스트 데이터 넣기    
        visualize(clf, X_test, Y_test)

    if __name__ == "__main__":
        main()

    'DX' 카테고리의 다른 글

    LINE  (0) 2022.03.03
    Line test Image  (0) 2022.02.08
    Do it! 첫 코딩 with 파이썬 - 과제  (0) 2021.12.24
    퍼셉트론 선형 분류기를 이용해 붓꽃 데이터 분류하기  (0) 2021.12.14
Designed by Tistory.