• 3주차 과제 : KNN-Classifier

    image image

    • 사용 언어 : python
    • 해결 날짜 : 2021-10-03

    • 코드 설명 :

      1.

      • pandas의 read_csv 함수로 iris.csv 파일을 읽어오고, 0~3열의 값들은 data로, 4열의 값들은 target으로 설정한다.
      • KNeighborsClassfier로 k의 개수를 설정해주고(1,5,10), training set과 test set으로 3:1로 랜덤하게 나눈 다음 훈련 데이터를 이용해 모델을 훈련하고(kn.fit), 훈련된 모델로 정확도를 측정하였다(kn.score).
      • 이 결과 K=1, 5, 10일 때 모두 정확도는 0.973…로 모두 동일하였다.

      2.

      • 1번과 마찬가지로 pandas의 read_csv 함수로 iris_mod.csv 파일을 읽어오고, 0~3열의 값들은 data로, 4열의 값들은 target으로 설정한다.
      • normalization 하기 전의 테스트 셑의 정확도는 1번과 동일하게 진행하였고, normalization 수행 후 테스트 셑의 정확도는 MinMaxScaler를 사용하여 normalization 수행 후 측정하였다.
      • MinMaxScaler를 사용한 이유는, 이번 과제에서 주어진 iris_mod가 데이터가 모여져 있기 보다는 넓게 분포되어 있기 때문에 사용하였다. 반대로 StandardScaler( (x – 평균) / 표준편차 )는 모여진 데이터에서 정확도가 높기 때문에 사용하지 않았다. 정규화 진행 후 정확도가 약 0.657에서 0.973으로 상당히 높아진 결과를 볼 수 있었다.
    • 코드

      # In[131]:
      
      import pandas as pd
      import numpy as np
      from sklearn.model_selection import train_test_split
      from sklearn.neighbors import KNeighborsClassifier
      
      df = pd.read_csv('C:/Users/rjsdu/OneDrive/바탕 화면/3-2/기계학습(박정희 교수님)/과제/3주차/iris.csv',
                      names=['Sepal length', 'Sepal width', 'Petal length', 'Petal width', 'Species'])
      data = df.iloc[:, :-1]
      target = df.iloc[:, -1]
      
      kn = KNeighborsClassifier(n_neighbors=1)
      train_input, test_input, train_target, test_target = train_test_split(data, target, random_state=0)
      kn.fit(train_input, train_target)
      print("K=1일 때 테스트 셑의 정확도: " + str(kn.score(test_input, test_target)))
      
      kn = KNeighborsClassifier(n_neighbors=5)
      train_input, test_input, train_target, test_target = train_test_split(data, target, random_state=0)
      kn.fit(train_input, train_target)
      print("K=5일 때 테스트 셑의 정확도: " + str(kn.score(test_input, test_target)))
      
      kn = KNeighborsClassifier(n_neighbors=10)
      train_input, test_input, train_target, test_target = train_test_split(data, target, random_state=0)
      kn.fit(train_input, train_target)
      print("K=10일 때 테스트 셑의 정확도: " + str(kn.score(test_input, test_target)))
      
      
      # In[151]:
      
      
      import pandas as pd
      import numpy as np
      from sklearn.model_selection import train_test_split
      from sklearn.neighbors import KNeighborsClassifier
      
      df = pd.read_csv('C:/Users/rjsdu/OneDrive/바탕 화면/3-2/기계학습(박정희 교수님)/과제/3주차/iris_mod.csv', header=None)
      data = df.iloc[:, :-1]
      target = df.iloc[:, -1]
      kn = KNeighborsClassifier(n_neighbors=1)
      
      train_input, test_input, train_target, test_target = train_test_split(data, target, random_state=0)
      kn.fit(train_input, train_target)
      print("K=1일 때 normalization 수행 전 테스트 셑의 정확도: " + str(kn.score(test_input, test_target)))
      
      from sklearn.preprocessing import MinMaxScaler
      scaler = MinMaxScaler()
      scaler.fit(data)
      data = scaler.transform(data)
      train_input, test_input, train_target, test_target = train_test_split(data, target, random_state=0)
      kn.fit(train_input, train_target)
      print("K=1일 때 normalization 수행 후 테스트 셑의 정확도: " + str(kn.score(test_input, test_target)))
      
      # from sklearn.preprocessing import StandardScaler
      # scaler = StandardScaler()
      # scaler.fit(data)
      # data = scaler.transform(data)
      # train_input, test_input, train_target, test_target = train_test_split(data, target, random_state=0)
      # kn.fit(train_input, train_target)
      # print("K=1일 때 normalization 수행 후 테스트 셑의 정확도: " + str(kn.score(test_input, test_target)))