Colab/머신러닝

06. K-최근접 이웃 회귀 K-NN Regression

HicKee 2023. 3. 6. 16:20

 

 
 
 

k-최근접 이웃 회귀(KNN)

기본적으로 분류이지만 회귀도 가능하다
데이터 가 주어졌을 때, X에 가장 가까운 K개의 A와 B 중에서 근처에 더 많은 갯수의 Class(A or B)로 판단하는 것
 

 

 
k-nearest neighbor(kNN)알고리즘
지도학습
홀수로 하는 것이 좋다
데이터 X가 주어졌을 때, X에 가장 가까운 K개의 데이터 값을 평균내서 값을 예측하는 것

데이터 범위 밖의 새로운 데이터는 예측이 불가능
 

 

(10+9+8)/3의 결과값인 9로 예측
 

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
iris_df = load_iris()
x = iris_df['data'] 
y = iris_df['target']
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.3, random_state=123)
pd.DataFrame(x_train).head()
model = KNeighborsClassifier()
model.fit(x_train,y_train)

x_pred = np.array([[7,3.2,5.3,1.6]])
y_pred = model.predict(x_pred)
iris_df['target_names'][y_pred]
더보기

array(['versicolor'], dtype='<U10')

 

y_pred = model.predict(x_test)
for i in range(0, len(y_pred)):
  y_pred2 = y_pred[i]
  print(f'{x_test[i]}:{iris_df["target_names"][y_pred2]}')
더보기

[6.3 2.5 4.9 1.5]:virginica
[6.8 3.  5.5 2.1]:virginica
[6.4 2.8 5.6 2.2]:virginica
[5.6 3.  4.1 1.3]:versicolor
[4.9 3.6 1.4 0.1]:setosa
[6.  3.  4.8 1.8]:virginica
[6.3 2.3 4.4 1.3]:versicolor
[4.4 3.2 1.3 0.2]:setosa
[4.4 2.9 1.4 0.2]:setosa
[5.5 2.6 4.4 1.2]:versicolor
[6.9 3.1 5.1 2.3]:virginica
[5.5 4.2 1.4 0.2]:setosa
[5.2 2.7 3.9 1.4]:versicolor
[6.5 3.  5.5 1.8]:virginica
[7.7 3.  6.1 2.3]:virginica
[6.5 3.  5.8 2.2]:virginica
[5.5 3.5 1.3 0.2]:setosa
[4.3 3.  1.1 0.1]:setosa
[6.1 2.9 4.7 1.4]:versicolor
[4.8 3.  1.4 0.3]:setosa
[5.2 3.4 1.4 0.2]:setosa
[6.3 2.8 5.1 1.5]:virginica
[4.8 3.4 1.9 0.2]:setosa
[6.1 3.  4.9 1.8]:virginica
[5.1 3.8 1.6 0.2]:setosa
[5.4 3.4 1.7 0.2]:setosa
[5.4 3.4 1.5 0.4]:setosa
[5.6 2.8 4.9 2. ]:virginica
[7.7 3.8 6.7 2.2]:virginica
[5.  3.6 1.4 0.2]:setosa
[7.4 2.8 6.1 1.9]:virginica
[6.  2.2 5.  1.5]:virginica
[4.7 3.2 1.6 0.2]:setosa
[5.1 3.5 1.4 0.2]:setosa
[6.  2.2 4.  1. ]:versicolor
[5.  2.3 3.3 1. ]:versicolor
[7.9 3.8 6.4 2. ]:virginica
[5.4 3.9 1.7 0.4]:setosa
[5.4 3.9 1.3 0.4]:setosa
[5.8 2.7 3.9 1.2]:versicolor
[5.  2.  3.5 1. ]:versicolor
[5.  3.2 1.2 0.2]:setosa
[6.8 3.2 5.9 2.3]:virginica
[6.7 3.  5.2 2.3]:virginica
[5.8 2.7 5.1 1.9]:virginica

model.score(x_test,y_test)
더보기

0.9777777777777777