코딩헤딩

[ML(머신러닝)] 머신러닝 기초 2 <하이퍼파라미터튜닝> 본문

머신러닝 | 딥러닝

[ML(머신러닝)] 머신러닝 기초 2 <하이퍼파라미터튜닝>

멈머이 2023. 12. 20. 22:10
728x90

https://coding-heading.tistory.com/81

 

[ML(머신러닝)] 생선구분하기 - 1 <K최근접이웃모델>

* 훈련 모델 처리 절차 1. 데이터 전처리 2. 데이터 정규화 3. 훈련 : 검증 : 테스트 데이터로 분류 (또는 훈련 : 테스트 데이터로 분류) - 6 : 2 : 2 또는 7 : 2 : 1, 데이터가 작은 경우에는 8 : 2 또는 7 : 3

coding-heading.tistory.com

* 위  글과 이어집니다.

 

<하이퍼파라메터>
 - 모델(클래스)의 속성 중에 사람이 직접 값을 지정해줘야 하는 변수들을 통칭

 

<하이퍼파라미터 튜닝>
 - 모델 성능을 향상하기 위한 방법
 - 과대적합(1) 또는 과소적합이 일어난 경우 튜닝 진행

* KNN 모델 생성하기

# n_neighbors : 이웃의 갯수 (하이퍼파라메터 속성)
kn20 = KNeighborsClassifier(n_neighbors=20)
kn20

 

 

* 모델 훈련시키기

kn20.fit(fish_data, fish_target)

 

 

* 훈련 정확도 확인하기

kn20.score(fish_data, fish_target)

# 매우좋은 성능을 보이는 모델이라고 표현한다.

결과 : 0.9795918367346939

- 0.9 : 좋음 / 0.95 : 매우 좋음

 

* 예측하기

kn20.predict([[30,600]])

결과 : array([1])

 

* 튜닝 진행

kn20.n_neighbors = 40
kn20.score(fish_data, fish_target)

결과 : 0.7142857142857143

kn20.n_neighbors = 15
kn20.score(fish_data, fish_target)

kn20.n_neighbors = 5
kn20.score(fish_data, fish_target)

결과 : 1.0

 

* 모델 생성

kn30 = KNeighborsClassifier()
kn30

 

* 훈련시키기

kn30.fit(fish_data, fish_target)

 

* 가장 성능이 좋은 하이퍼파라미터 튜닝하기

# 1보다 작은 가장 좋은 성능을 나타낼때 찾기

# 정확도가 가장 높을떄의 이웃의 갯수를 담을 변수
nCnt = 0
# 정확도가 가장 낮을떄의 이웃의 갯수를 담을 변수
nScore = 0

for n in range(3, len(fish_data),2):
    kn30.n_neighbors = n
    score = kn30.score(fish_data, fish_target)
    # print(f"{n} / {score}")

    ### 1보다 작은 정확도인 경우
    if score <1:
        ### nScore의 값이 score보다 작은 경우 담기
        if nScore < score:
            nScore = score
            nCnt = n

print(f"nCnt = {nCnt} / nScore = {nScore}")

### 모델의 성능이 가장 좋은 시점의 이수의 갯수를 추출하기 위한 하이퍼파라메터 튜님결과 
### 이웃의 갯수가 19개 였을때 가장 좋은 성능을 발휘 하는것으로 확인 됨.

결과 : nCnt = 19 / nScore = 0.9795918367346939

 

* 최종 검출

kn.n_neighbors = nCnt
kn.score(fish_data, fish_target)

결과 : 0.9795918367346939

kn.predict([[10,30]])

결과 : array([0])

728x90