Python/머신러닝-딥러닝

(머신러닝)타이타닉 데이터 셋으로 보는 Classification(분류)_3. KNN (K-최근접 이웃)

하방주인장 2023. 6. 6. 13:12

목차

     

    0. KNN

    K-Nearest Neighbor(KNN)란 가장 모여있는 어떤 이웃과 가까이 근접해있는지를 통해 라벨(정답)을 분류하는 방식으로, Classification(분류)에 사용되는 간단한 supervised machine learning(지도학습)이다. 간단한 그림으로 설명하자면,

    KNN은 '새로 들어온 ★이 ■ 그룹의 데이터와 가장 가까우니 ★은 ■ 그룹이다.' 라고 분류하는 방법으로 여기에서의 K는 몇 번째로 가까운 데이터까지 살펴볼 것인가를 정한 숫자이다.

     

    1. Modeling

    1-1. KNN_3

    1. feature 6

    feature_6 = ['Age', 'Fare', 'Parch', 'Pclass', 'Sex_num', 'SibSp']
    X_train = train_data[feature_6]
    
    # KNN_3 생성
    knn_3 = KNeighborsClassifier(n_neighbors=3)
    
    # train set으로 학습
    knn_3.fit(X_train.values, y_train)
    
    # 생성한 knn_3로 train set 예측
    y_pred = knn_3.predict(X_train)
    
    confusion_matrix(y_train, y_pred)
    # array([[492,  57],
    #        [ 85, 257]])
    
    accuracy_score(y_train, y_pred)
    # 0.8406285072951739
    
    # test set으로 예측하여 평가하기
    X_test = test_data[feature_6]
    model1 = knn_3.predict(X_test)
    knn3_model1 = pd.DataFrame()
    knn3_model1['PassengerId'] = test_data['PassengerId']
    knn3_model1['Survived'] = model1
    knn3_model1.to_csv('result/knn3_feature_6.csv', index=False)

    => 0.62679

     

    2. feauter 3

    feature_3 = ['Age', 'Sex_num', 'Pclass']
    X_train = train_data[feature_3]
    
    # KNN_3 생성
    knn_3 = KNeighborsClassifier(n_neighbors=3)
    
    # train set으로 학습
    knn_3.fit(X_train.values, y_train)
    
    # 생성한 knn_3로 train set 예측
    y_pred = knn_3.predict(X_train)
    
    confusion_matrix(y_train, y_pred)
    # array([[492,  57],
    #        [ 85, 257]])
    
    accuracy_score(y_train, y_pred)
    # 0.8406285072951739
    
    # test set으로 예측하여 평가하기
    X_test = test_data[feature_3]
    model1 = knn_3.predict(X_test)
    knn3_model1 = pd.DataFrame()
    knn3_model1['PassengerId'] = test_data['PassengerId']
    knn3_model1['Survived'] = model1
    knn3_model1.to_csv('result/knn3_feature_3.csv', index=False)

    => 0.73684

     

    1-2. KNN_5

    1. feature 6

    X_train = train_data[feature_6]
    knn_5 = KNeighborsClassifier(n_neighbors=5)
    knn_5.fit(X_train.values, y_train)
    y_pred = knn_5.predict(X_train)
    confusion_matrix(y_train, y_pred), accuracy_score(y_train, y_pred)
    # (array([[483,  66],
    #         [102, 240]], dtype=int64),
    # 0.8114478114478114)
    
    X_test = test_data[feature_6]
    model = knn_5.predict(X_test)
    knn5_model = pd.DataFrame()
    knn5_model['PassengerId'] = test_data['PassengerId']
    knn5_model['Survived'] = model
    knn5_model.to_csv('result/knn5_feature_6.csv', index=False)

    => 0.64114

     

    2. feauter 3

    X_train = train_data[feature_3]
    knn_5 = KNeighborsClassifier(n_neighbors=5)
    knn_5.fit(X_train.values, y_train)
    y_pred = knn_5.predict(X_train)
    confusion_matrix(y_train, y_pred), accuracy_score(y_train, y_pred)
    # (array([[492,  57],
    #         [ 92, 250]], dtype=int64),
    # 0.8327721661054994)
    
    X_test = test_data[feature_3]
    model = knn_5.predict(X_test)
    knn5_model = pd.DataFrame()
    knn5_model['PassengerId'] = test_data['PassengerId']
    knn5_model['Survived'] = model
    knn5_model.to_csv('result/knn5_feature_3.csv', index=False)

    =>  0.70334

     

    결과: KNN_3_feature_3 모델이 가장 좋은 모델이다.