본문 바로가기
Machine Learning/분류모델

iris 데이터를 활용한 KNN 분류 실습 [ numpy : np.bincount( ) , pandas : .value_counts( ) ]

by leehii 2022. 8. 3.

 

1. 데이터 확인

 

2. 데이터 정리 (데이터프레임 화 / 문제와 답으로 분리 / 훈련 셋과 테스트 셋 분리 및 균형 확인 )

 

3. 데이터 분석 (시각화등)

 

4. 모델링 (모델객체 생성 -> 하이퍼 파라미터 조정 / 모델 학습 / 모델 예측 / 모델 성능 평가)

 

 

 

 

sklearn 에서 KNN분류모델인 KNeighborsClassifie

정확도 측정도구인 metrics.accuracy_score(테스트의 답, 예측값)

 

여기서 예측값이란

모델명.predict(훈련셋의 문제)로 예측한 값을 말함

 

그리고  훈련셋과 테스트 셋의 비율을 나눠주는 train_test_split

 

 

 

딕셔너리 형태로 key 값과 value 값이 있는걸 확인할 수 있음

 

딕셔너리 key 값을 불러오는 .keys()

value 값을 불러올땐 .values()

둘다 불러올땐 .items()

 

 

numpy 라이브러리의 .shape -->> 배열의 크기를 확인하는 함수 (1차원은 데이터 개수, 2차원은 행열의 개수를 출력함)

 

(p.s)

.size -->> 내부 데이터 개수 확인

.ndim -->> 몇 차원인지 확인

.dtype -->> 무슨 타입인지 확인

 

display : print와 비슷한 역할을 하는 함수

 

150개의 row, 4개의 column, 2차원형태임을 확인 가능함

 

 

 

 

위에서 numpy 라이브러리의 .shape 함수를 통해

문제데이터의 구성이 150개의 row와 4개의 column인 것을 확인했고

 

해당 4개의 column이 무엇인지 확인함

 

 

같은 방식으로 답 데이터의 정보도 확인함

 

이 부분은 사실 그렇게까지 중요한 부분은 아님

 

해당 데이터들에 대한 설명들이 나와있음

 

 

 

위에서 확인한 데이터를 보기편하게 DataFrame화 해주는 작업 + 

학습을 위한 작업

 

문제데이터를 DataFrame화하고

컬럼명에 문제명(=특성=독립변수=X=feature)을 넣어줌

 

(ps)

답  = 레이블 = target = lable

으로 부른다

 

 

문제와 답이 나눠져있는 데이터라서 별도의 인덱싱 / 슬라이싱 작업은 필요없고

 DataFrame화 한 문제데이터(특성=독립변수=feature)를 X에,

답 데이터(=레이블= target=lable)을 y에 담아주고

 

.shape로 담아준 데이터의 크기를 꼭 확인한다!!!

 

150개의 row가 정상적으로 확인되고

2차원 형태인 문제 데이터는 4개의 컬럼이 있는것이 정상적으로 보인다

 

훈련 셋과 테스트 셋을 7:3 비율로 나눠주기 위해

train_test_split 함수를 사용한다

 

test_size=0.3 부분이 테스트할 데이터의 비율이며

random_state는 수행할때마다 동일한 결과를 얻기위해 적용하는 부분이다

 

train_test_split 함수가 정렬된 상태의 데이터를 일반화하기 위해 데이터를 섞어주는데

이 섞인 데이터의 상태를 고정하기위해 할당하는 것이므로 안의 값은 몇이든 크게 상관없다

 

.shape를 통해 확인해보면 7:3 비율로 나뉜것이 확인된다

 

 

y_train은 array형태의 배열형태, 즉 numpy 형태이다

이값을 세기위해서는 np.bincount(변수명)를 사용한다.

pandas에서는 변수명.value_counts()가 같은 기능을 한다

 

보통은 7:3비율로 나누지만 균형이 깨질수있으므로 균형을 확인한다

 

답(0, 1, 2)의 수가 34, 36, 35개인데 이때 7:3비율을 조정할 경우 좀더 균형이 맞을수도 있다

 

위의 케이스는 7.5 :2.5로 조정할 경우 답이 37개, 38개, 37개로 좀더 균형있다

 

scatter_matrix를 이용한 산점도 행렬을 표현함

 

figsize는 그래프의 크기이며 (x축길이, y축길이)

c는 color의 약자이며

alpha는 투명도를 의미한다

 

 

 

 

KneighborsClassifier로 KNN모델 객체를 생성하고 안의 하이퍼 파라미터는 자주 쓰는 3이나 5로 준다 

(나중에 조정할 것임)

 

이후 모델명.fit(학습할 문제, 학습할 값)으로 학습을 시키고

 

모델명.predict(테스트할 문제)로 예측한후

 

metrics.accuracy_score(테스트 답, 예측값)로 정확도를 확인한다

 

이때 

 

예측한 값이 0, 1, 2의 데이터로 보이면 확인이 어려우므로

다음과 같이 확인할 수 있다

 

KNN 모델의 하이퍼 파라미터인 n_neighbors의 값을 for문을 돌려서  정확도값을 리스트에 저장한다

 

훈련 데이터의 정확도와 테스트 데이터의 정확도를 저장한 list 2개를 

plt.plot(x축 리스트, y축 리스트)

를 이용해서 그래프 두 개로 표현한다