-
3주차 과제 : KNN-Classifier
- 사용 언어 : 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)))