from sklearn.neighbors import KNeighborsRegressor
X, Y = mglearn.datasets.make_wave(n_samples=40)
X_train,X_test, y_train, y_test = train_test_split(X, Y, random_state=0)
reg = KNeighborsRegressor(n_neighbors=3)
reg.fit(X_train, y_train)
print(reg.predict([[3]]))
print(reg.score(X_test, y_test))
[0.91241374]
0.8344172446249605
✔ 본 포스팅은 ICT COG Academy의 기본반 0일차 강의를 정리한 내용입니다.
1.0 mglearn
import mglearn
# mglearn의 make_forge 데이터셋을 활용한 분류모델
X, y = mglearn.datasets.make_forge()
plt.scatter(X[:,0], X[:, 1], c=y, s=60, cmap=mglearn.cm2)
plt.show()
# mglearn의 make_forge 데이터셋을 활용한 회귀모델
X, y = mglearn.datasets.make_wave(n_samples=40)
plt.plot(X, y, 'o')
plt.show()
2.0 KNN 도입
- test data가 가장 가까운 train data의 그룹으로 분류된다.
- 가장 가까운 k개의 그룹 중, 다수결로 분류된다.
- 가까운 정도는 유클리드거리(L1 distance)로 계산한다.
- 특성이 다른 변수라면, 단순한 유클리드 거리상으로 비교가 안 되므로 데이터전처리로 표준화가 필요하다.
2.1 KNN - 분류
(1) KNN의 K에 따라 분류선의 변화 확인
- 코드
⇒ k가 커질수록, 분류선은 완만, 일반화됨.
(2) K에 따른 train, test data 의 분류정확도
- 코드
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target,
stratify = cancer.target, random_state=11)
# stratify = y : 원래 데이터레이블 분포와 유사하게 추출하기 위해
# 데이터를 계층으로 나누고 추출
train_score, test_score = [], []
K = range(1, 11) # KNN 을 1~10까지
for k in K:
knn = KNeighborsClassifier(n_neighbors=k).fit(X_train, y_train)
train_score.append(knn.score(X_train, y_train))
test_score.append(knn.score(X_test, y_test))
plt.plot(K, train_score, label='train')
plt.plot(K, test_score, label='test')
plt.legend()
plt.xlabel('k: 1~10')
plt.grid()
plt.show()
⇒ K가 커질수록 train data 분류정확도는 떨어지나, test data 분류정확도는 올라간다. 과적합을 줄임.
2.2 KNN - 회귀
(0) 회귀모델 설명
(0)-1. 정의 : 종속변수의 특성을 가장 잘 나타낼 수 있는 예측모델 (선형 or 비선형 함수)을 구해 독립변수를 예측.
ex) (공부시간, 성적) 데이터를 나타내는 예측모델을 구하기
(0)-2. 종류
선형 회귀 모델 (선형: 수식이 직선)
선형 회귀 (LinearRegression) 모델, 라쏘 (Lasso) 모델, 릿지 (Ridge) 모델
비선형 회귀 모델 (비선형: 수식이 곡선)
k-최근접 이웃 (KNeighborsRegressor) 모델 , 의사 결정 나무 (DecisionTreeRegressor) 모델 , 서포트 벡터 머신 (SVR) 모델
(1) KNN Regressor 로 회귀모델 구하기
-
코드
from sklearn.neighbors import KNeighborsRegressor
X, Y = mglearn.datasets.make_wave(n_samples=40)
X_train,X_test, y_train, y_test = train_test_split(X, Y, random_state=0)
reg = KNeighborsRegressor(n_neighbors=3)
reg.fit(X_train, y_train)
print(reg.predict([[3]]))
print(reg.score(X_test, y_test))
[0.91241374]
0.8344172446249605
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
line = np.linspace(-3, 3, 1000).reshape(-1, 1)
for k, ax in zip([1, 3, 9], axes):
reg = KNeighborsRegressor(n_neighbors=k).fit(X,Y)
ax.plot(X,Y,'o', color='r')
ax.plot(line, reg.predict(line), color='#00D9FF')
plt.show()
'코딩 독학 > ICT COG Academy 2기' 카테고리의 다른 글
[19, 20일차] 그래프그리기 (matplotlib) (0) | 2020.11.06 |
---|---|
[18일차] matplotlib (0) | 2020.11.04 |
[14일차] 넘파이함수 (0) | 2020.10.29 |
[13일차] 지역변수/전역변수, try/except, 넘파이 시작 (0) | 2020.10.28 |
[12일차] def() (0) | 2020.10.27 |
댓글