[인공지능] Classifier 학습

정은수·2022년 10월 16일
0

인공지능

목록 보기
3/5
post-thumbnail
	# xor 연산 결과 데이터 준비
    xor_data = [
        #P, Q, result
        [0, 0, 0],            
        [0, 1, 1],
        [1, 0, 1],
        [1, 1, 0]
    ]

result 부분은 P와 Q를 XOR한 결과이다

학습(train)을 위해 '데이터'와 '레이블' 분리

	data = []
    label = []
    
    for row in xor_data:
    	p = row[0]
        q = row[1]
        r = row[2]
        
        data.append([p, q])
        label.append(r)

데이터 학습시키기

SVC객체 + fit()

	# scikit-learn 의 support vertor machine 모듈
	from sklearn import svm
    
    clf = svm.SVC()	# SVC 객체 생성.  SVM 알고리즘을 사용하여 머신러닝을 수행하는 객체
    
    # '분류'를 위한 모델을 classifier 라 하면 약자로 clf 많이 사용함.
    # SVC : C-Support Vector Classification.
	# fit() : 학습시키기
    clf.fit(data, label)
    
    # parameter 확인
    clf.get_params()

테스트 데이터 준비

	# 검증을 위한 데이터 + 레이블 준비

    test_data = [
        [0, 0],
        [1, 1],
        [0, 1],
        [1, 1],
        [0, 0]
    ]

    test_label = [   # 위 데이터의 경우 답
        0,
        0,
        1,
        0,
        0
    ]

이 처럼 train데이터와 test데이터를 따로 준비해야 한다.
두 개의 데이터가 동일하면 train을 통해 학습을 하였기 때문에 답이 예측률을 100%일 수 밖에 없기 때문이다.

예측

predict()

	pre = clf.predict(test_data)

프레임워크로 간단하게 작성하기

	# scikit-learn 에는 데이터와 레이블을 나누고, 성능측정을 간단하게 계산해주는 기능있다
    import pandas as pd
    from sklearn import metrics

학습용, 테스트용 데이터셋 준비

DataFrame 사용

	xor_df = pd.DataFrame(xor_data)
    
    # data
    xor_data = xor_df.loc[:, 0:1]   # 모든 row X column 0 ~ column 1까지
    
    # label
	xor_label = xor_df.loc[:, 2]

학습하기

	clf = svm.SVC()
    clf.fit(xor_data, xor_label)
    
    # 예측하기
    pre = clf.predict(test_data)

성능평가
metrics.accuracy_score()

	# metrics.accuracy_score(정답, 예측값, normalize=True, sample_weight=None)

	ac_score = metrics.accuracy_score(test_label, pre)
    print("정답률 = ", ac_score)	# 정답률 = 1.0

학습한 모델 저장하기

학습, 테스트를 거친 모델을 저장하고 나중에 다시 불러와서 예측에 사용할수 있다

	base_path = r'저장할 위치'

	import os
    savedir = os.path.join(base_path, 'xor)
    
    if not os.path.exists(savedit):
    	os.mkdir(savedir)
        
    import joblib	# 파이썬 객체를 바이너리로 저장 (*.pkl)
    
    savefile = 'xor_freq.pkl'
	joblib.dump(clf, os.path.join(savedir, savefile))

*.pkl (pickle) 파일은 파이썬에서 많이 사용하는 serialized object 를 파일에 저장한 형태.

저장한 모델을 읽어와서 실행(예측)

	import os
    import sklearn import svm, metris
    import joblib
    
    base_path = r'모델을 저장한 위치'
    savedir = os.path.join(base_path, '모델파일 이름')
    savefile = 'xor_freq.pkl'
    
    clf = joblib.load(os.path.join(savedir, savefile))
    
    test_data = [[0, 0],[1, 1],[0, 1],[1, 1],[0, 0]]
	pre = clf.predict(test_data)
	print(pre)	# 예측된 결과값

소감

과정 자체는 간단했지만 import부분이 헷갈린다.

profile
기록중

0개의 댓글