1. 붓꽃 데이터 Load¶
In [5]:
from sklearn.datasets import load_iris
iris_datasets = load_iris()
print(type(iris_datasets), iris_datasets.keys())
In [17]:
print(iris_datasets['data'].shape)
iris_datasets['data']
Out[17]:
In [13]:
iris_datasets['feature_names']
Out[13]:
In [18]:
# label(답)
print(iris_datasets['target'].shape)
iris_datasets['target']
Out[18]:
In [19]:
# 0: setosa, 1:versicolor, 2:virginica
iris_datasets['target_names']
Out[19]:
1.1 iris_data(Bunch) 변환¶
- Pandas의 DataFrame 객체로 변환
In [20]:
import pandas as pd
iris_df = pd.DataFrame(iris_datasets['data'], columns=iris_datasets['feature_names'])
iris_df.head()
Out[20]:
In [21]:
iris_df.tail()
Out[21]:
In [22]:
# iris_df 에 target 컬럼을 추가
iris_df['target'] = iris_datasets['target']
iris_df.head()
Out[22]:
In [23]:
iris_df.tail()
Out[23]:
In [26]:
print(type(iris_datasets['target_names']))
print(iris_datasets['target_names'])
dict(enumerate(iris_datasets['target_names']))
Out[26]:
In [28]:
# iris_df['target']와 같은 표기법
iris_df.target
Out[28]:
In [29]:
# iris_df 애 'label' 컬럼을 추가
iris_df['label'] = iris_df.target.replace(dict(enumerate(iris_datasets['target_names'])))
In [31]:
iris_df.head()
Out[31]:
In [32]:
iris_df.tail()
Out[32]:
In [34]:
iris_df.iloc[:,0:4].head()
Out[34]:
2. Train data 와 Test data로 분류하기¶
- train data는 머신러닝 Model을 만들 때(즉, 학습을 할 때) 사용하는 data
- test data 해당 Model이 얼마나 잘 동작하는 지(즉, 예측할 때) 평가할 때 사용하는 data
- 수학의 함수에서 입력을 x, 출력을 y f(x) = y
- 입력데이터는 대문자 X로 표기, 레이블은 y로 표기한다.
- X_train, y_train, X_test, y_test
- X_train(훈련데이터)는 75%, X_test(테스트데이터)는 25%
In [63]:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_df.iloc[:,0:4],iris_df['target'], random_state=10)
In [64]:
# 훈련데이터의 입력데이터와 레이블(답) 건수
print(X_train.shape)
print(y_train.shape)
In [65]:
# 테스트데이터의 입력데이터와 레이블(답) 건수
print(X_test.shape)
print(y_test.shape)
In [58]:
# X_train, X_test, y_train, y_test = train_test_split(iris_df.iloc[:,0:4],iris_df['target'], test_size=0.33)
# print(X_train.shape)
# print(y_train.shape)
# print(X_test.shape)
# print(y_test.shape)
3. 학습방법(Model 선택)¶
- K-NN(nearest neighbors) 최근접 이웃 분류기 사용
- k지수 - 이웃의 갯수는 3으로 설정
- 학습하기 model.fit(X_train, y_train)
- 예측하기 model.predict(X_test)
In [66]:
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)
model
Out[66]:
In [67]:
# 학습하기
model.fit(X_train, y_train)
Out[67]:
In [68]:
# 모델을 평가하기(예측하기)
y_predict = model.predict(X_test)
y_predict
Out[68]:
In [69]:
# 예측한 답(y_predict)과 실제 답(y_test)을 비교
import numpy as np
print('테스트 세트의 정확도 {:.2f}'.format(np.mean(y_predict == y_test)))
In [70]:
print('테스트 세트의 정확도 score함수 사용 {:.2f}'.format(model.score(X_test, y_test)))
In [75]:
# n_neighbors 갯수를 다르게 설정해서 model을 여러번 생성 할때
train_accuracy = []
test_accuracy = []
neighbors_settions = range(1, 20, 2)
for neighbor in neighbors_settions:
print(neighbor)
model = KNeighborsClassifier(n_neighbors=neighbor)
model.fit(X_train, y_train)
train_accuracy.append(model.score(X_train, y_train))
test_accuracy.append(model.score(X_test, y_test))
print(train_accuracy)
print(test_accuracy)
In [81]:
%matplotlib inline
import matplotlib.pyplot as plt
plt.plot(neighbors_settions, train_accuracy, label='train accuracy')
plt.plot(neighbors_settions, test_accuracy, label='test accuracy')
plt.ylabel('accuracy')
plt.xlabel('n_neighbors')
plt.legend()
Out[81]:
In [ ]:
In [ ]:
'Python > MachineLearning' 카테고리의 다른 글
Machine Learning(ML)_Taitanic예제 (0) | 2020.08.18 |
---|---|
Machine Learning(ML) (0) | 2020.08.17 |