def bmi(label,color):
d = data.loc[label]
plt.scatter(d['Height'],d['Weight'],c = color, label = label)
data.index.unique()
bmi('Extreme Obesity','red')
bmi('Obesity','blue')
bmi('Overweight','green')
bmi('Normal','yellow')
bmi('Weak','purple')
bmi('Extremely Weak','orange')
plt.legend()
plt.show()
모델링
-문제와 답으로 데이터 분리
X=data[['Height','Weight']]
y=data.index
print('문제데이터', X.shape)
print('정답데이터', y.shape)
display(X.head())
X_train=X[:350]
y_train=y[:350]
X_test=X[350:]
y_test=y[350:]
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)
knn = kn(n_neighbors=5)
knn.fit(X_train,y_train)
pre = knn.predict(X_test)
acs(pre,y_test)*100
print(f"{acs(pre,y_test)*100:.2f}%")
knn.score(X_test,y_test)*100
iris 붓꽃데이터
목표
knn : 유유상종에 맞는 붓꽃판별
knn 모델을 사용하여 이웃의 숫자를 조정해 최적의 모델을 만들어보자
붓꽃데이터 : 꽃잎의 넓이, 길이 / 받침의 넓이, 길이 4가지 특성으로 모델 생성
3개의 클래스(정답 데이터)를 가진다
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier as kn
from sklearn.metrics import accuracy_score as acs
iris_data = load_iris()
iris_data.keys()
iris_data['data']
iris_data['data'][:5]
iris_data['feature_names']
iris_data['target']
iris_data['target_names']
print(iris_data['DESCR'])
print(iris_data['DESCR'])
print(iris_data['DESCR'])
데이터 셋 구성하기
문제데이터 DataFrame 으로 변경
문제(X)와 답(y)으로 분리
훈련 (X_train,y_train) / 테스트 (X_test,y_test) 분리
iris_df = pd.DataFrame(iris_data['data'],columns=iris_data['feature_names'])
iris_df
X=iris_df
y=iris_data['target']
from sklearn.model_selection import train_test_split
X_train,y_train,X_test,y_test=train_test_split(X,y, test_size=0.3)
X_train,y_train,X_test,y_test=train_test_split(X,y, test_size=0.3,random_state=0)
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)