k-최근접 이웃 알고리즘(k-NN)

k-NN이란 무엇입니까?



통계에서 k-nearest neighbors algorithm (k-NN)Evelyn FixJoseph Hodges에 의해 1951에서 개발되고 나중에 Thomas Cover에 의해 확장된 비모수적 분류 방법입니다. 분류 및 회귀에 사용됩니다. 두 경우 모두 입력에는 데이터 세트에 가까운 학습 모델이 포함됩니다. 출력은 k-NN이 분류 또는 회귀에 사용되는지 여부에 따라 달라집니다.
  • k-NN 분류에서 클래스 구성원의 출력입니다. 항목은 이웃의 과반수 투표로 나뉘고 가장 가까운 이웃과 k 중에서 가장 일반적인 범주가 할당됩니다. k = 1 이면 가장 가까운 이웃의 클래스에 개체가 제공됩니다.
  • k-NN 회귀에서 출력은 개체의 속성 값입니다. 이 값은 인접 이웃에 대한 평균값k입니다.

  • 데이터 세트



    모델에 사용된 데이터 세트는 “Fish.csv” 입니다. 데이터 세트는 159 rows7 columns로 구성됩니다.

    데이터 세트 설명



    데이터 세트에 사용되는 속성은 다음과 같습니다.
  • 무게
  • 길이1
  • 길이2
  • 길이3
  • 높이

  • 독립 속성



    데이터세트의 독립 속성은 다음과 같습니다.
  • 길이1
  • 길이2
  • 길이3
  • 높이

  • 종속 속성



    데이터세트의 종속 속성은 다음과 같습니다.
  • 무게

  • 대상 속성



    데이터세트의 대상 속성은 다음과 같습니다.
  • 무게

  • 모델을 훈련시키기 위해 다른 속성을 사용하여 물고기의 무게를 예측할 것입니다.

    데이터 세트 헤드




    from sklearn.metrics import mean_squared_error
    import matplotlib.pyplot as plt
    from math import sqrt
    from sklearn import neighbors
    from sklearn.model_selection import train_test_split
    import pandas as pd
    df = pd.read_csv('/content/Fish.csv')
    df.head()
    


    다음은 모델에 사용된 데이터 세트의 헤드입니다.



    데이터세트 전처리



    물고기의 무게를 예측하기 위해 속성Species이 필요하지 않기 때문입니다. 따라서 Species 속성을 삭제합니다.

    df.drop(['Species'], axis=1, inplace=True)
    df = pd.get_dummies(df)
    df
    


    최종 데이터 세트는 다음과 같습니다.



    모델 교육 및 테스트



    데이터 세트를 전처리한 후 모델 훈련을 위해 전처리된 데이터를 사용했습니다. 이를 위해 데이터를 분할하고 테스트용 데이터30%와 모델 교육용 데이터70%를 선택합니다. k up to 20에 대한 모델을 테스트하여 최소값Root Mean Square Error (RMSE)을 얻습니다.

    # Model Training
    train, test = train_test_split(df, test_size=0.3)
    x_train = train.drop('Weight', axis=1)
    y_train = train['Weight']
    x_test = test.drop('Weight', axis=1)
    y_test = test['Weight']
    
    %matplotlib inline
    
    # Model Testing
    rmse_val = []
    for K in range(20):
        K = K+1
        model = neighbors.KNeighborsRegressor(n_neighbors=K)
    
        # Model Fitting
        model.fit(x_train, y_train)
        pred = model.predict(x_test)
        error = sqrt(mean_squared_error(y_test, pred))
        rmse_val.append(error)
        print('RMSE value for K = ', K, 'is:', error)
    
    # Plotting RMSE values against value of K
    curve = pd.DataFrame(rmse_val)
    curve.plot()
    


    서로 다른 k 값에 대한 RMSE는 다음과 같습니다.



    RMSE가 k = 3에 대해 최소라는 것은 위의 그림에서 알 수 있습니다.

    RMSE value for k = 3 is: 47.21824893415052



    예측 결과



    그래서 우리는 물고기의 무게 예측에 k = 3를 사용했습니다. 대략 47 인 3에서 최소 RMSE를 얻습니다.

    # Model Fitting Minimum RMSE
    model = neighbors.KNeighborsRegressor(n_neighbors=3)
    model.fit(x_train, y_train)
    pred = model.predict(x_test)
    error = sqrt(mean_squared_error(y_test, pred))
    rmse_val.append(error)  # store rmse values
    print('RMSE value for K = ', 3, 'is:', error)
    
    # Prediction Results
    test['predicted weights'] = pred
    test
    


    예측 결과는 아래와 같습니다.



    참조


  • 데이터 세트 링크: View Fish Dataset
  • 다운로드 링크: Download Fish Dataset
  • GitHub 리포지토리: k-nearest neighbors algorithm (k-NN)
  • 좋은 웹페이지 즐겨찾기