티스토리 뷰
반응형
지난번 R를 활용한 KNN 실습을 해보았고 이번에는 Python 언어를 활용하여 KNN 실습을 하였다.
실습 과정은 데이터의 분포를 먼저 살펴보고 적절한 K를 찾아 KNN 알고리즘을 활용하여 모델을 만들어 보고자 한다.
Python 코드
사용한 라이브러리 및 기본 데이터 셋팅
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.decomposition import PCA
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split, cross_val_score
# load Iris datasets
iris = datasets.load_iris()
# X는 data 배열의 2열까지 출력
X = iris.data[:, :2]
y = iris.target
2차원 그래프로 데이터 살펴보기
#x축 y축 범위 설정
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
plt.figure(figsize=(8,6))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1, edgecolor='k')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.show()
Sepal length와 width의 변화에 따라 target이 달라진다. 이를 3D로도 살펴보았다.
3차원 그래프로 데이터 살펴보기
fig = plt.figure(figsize=(8,6))
ax = Axes3D(fig, elev=-150, azim=100)
X_reduced = PCA(n_components=3).fit_transform(iris.data)
ax.scatter(X_reduced[:,0], X_reduced[:,1], X_reduced[:,2], c=y, cmap=plt.cm.Set1, edgecolor='k', s=40)
ax.set_title("My First three PDA directions")
ax.set_xlabel("1st eigenvector")
ax.w_xaxis.set_ticklabels([])
ax.set_ylabel("2nd eigenvector")
ax.w_yaxis.set_ticklabels([])
ax.set_zlabel("3rd eigenvector")
ax.w_zaxis.set_ticklabels([])
plt.show()
3D로 보면 명확하게 구분되어 있는 것을 확인할 수 있다.
적절한 K 값 찾기
train_acc = []
test_acc = []
for n in range(1,15):
clf = KNeighborsClassifier(n_jobs=-1, n_neighbors=n)
clf.fit(x_train, y_train)
prediction = clf.predict(x_test)
train_acc.append(clf.score(x_train, y_train))
test_acc.append((prediction==y_test).mean())
plt.figure(figsize=(12, 9))
plt.plot(range(1, 15), train_acc, label='TRAIN set')
plt.plot(range(1, 15), test_acc, label='TEST set')
plt.xlabel("n_neighbors")
plt.ylabel("accuracy")
plt.xticks(np.arange(0, 16, step=1))
plt.legend()
plt.show()
그래프에서 보면 Train과 Test 결과가 가장 높은 11번으로 K값을 지정하는 것이 가장 좋다고 나온다. 즉, 한 데이터가 입력되었을 때 주변 11개의 데이터를 보고 판단하는 것이 가장 분류 결과가 잘 나온다는 뜻이다.
K값을 적용 후 정확도 산정
clf = KNeighborsClassifier(n_neighbors=11)
clf.fit(x_train, y_train)
print("clf.score : {0:.3f}".format(clf.score(x_train, y_train)))
prediction = clf.predict(x_test)
print("(pred == y_test) score: {0:.3f}".format((prediction==y_test).mean()))
print("cross_val_score : {0:.3f}".format(cross_val_score(clf, x_train, y_train, cv=10).mean()))
결과 값 |
학습으로는 정확도가 0.830으로 나왔고 test 데이터를 입력하였을 떄는 0.789의 정확도가 나왔다.
반응형
'AI & BigData > Basic' 카테고리의 다른 글
[Python] 파이참 프로젝트에 아나콘다 가상환경 적용하기 (0) | 2022.09.20 |
---|---|
R를 활용한 KNN 실습 (iris 데이터) (0) | 2020.12.27 |
R, Python을 활용한 Paired Sample t-test (대응 표본 t 검정) (0) | 2020.12.15 |
R, Python을 활용한 Independence two Sample t-test (독립 표본 t 검정) (0) | 2020.12.13 |
R, Python을 활용한 One Sample t-test (단일 표본 t 검정) (0) | 2020.12.12 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 분산시스템
- t검정
- llm
- 자료구조
- 리눅스
- 우선순위큐
- LangChain
- 시간초과
- 프로그래머스
- Python
- t-test
- java
- 보안기사
- Ai
- linux
- 딥러닝
- 카카오페이
- 그리디
- FastAPI
- 카카오페이면접후기
- 코딩테스트
- lightsail
- 보안
- 파이썬
- 정보보안
- 정보보안기사
- 백준
- synflooding
- 다이나믹프로그래밍
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함