import random
# BMI를 계산해 결과를 반환하는 함수
def calc_bmi(h, w):
bmi = w / (h/100) ** 2
if bmi < 18.5: return "thin"
if bmi < 25: return "normal"
return "fat"
# 출력 파일 준비
fp = open("bmi.csv","w",encoding="utf-8")
fp.write("height,weight,label\r\n")
# 무작위 데이터 생성
cnt = {"thin":0, "normal":0, "fat":0}
for i in range(20000):
h = random.randint(120,200)
w = random.randint(35, 80)
label = calc_bmi(h, w)
cnt[label] += 1
fp.write("{0},{1},{2}\r\n".format(h, w, label))
fp.close()
print("ok,", cnt)
from sklearn import svm, metrics
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
# 1단계 - 키와 몸무게 데이터 읽기
tbl = pd.read_csv('bmi.csv')
tbl.head()
# 2단계 - 칼럼을 잘라 정규화
label = tbl["label"]
w = tbl['weight'] / 100 # 최대 100kg이라 가정
h = tbl['height'] / 200 # 최대 200cm이라 가정
wh = pd.concat([w, h], axis = 1)
label.head()
wh.head()
# 3단계 - 전용 데이터와 테스트 데이터 분리
data_train, data_test, label_train, label_test = train_test_split(wh, label)
# 4단계 - 학습
clf = svm.SVC()
clf.fit(data_train, label_train)
# 5단계 - 데이터 예측
predict = clf.predict(data_test)
# 6단계 - 결과 테스트
ac_score = metrics.accuracy_score(label_test, predict)
cl_report = metrics.classification_report(label_test, predict)
print('정답률:', ac_score)
print('리포트:', cl_report)
import matplotlib.pyplot as plt
import pandas as pd
# pandas로 csv 파일 읽기
tbl = pd.read_csv('bmi.csv', index_col=2)
# 그래프 그리기
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
# 임의의 색으로 칠하기
def scatter(lbl, color):
b = tbl.loc[lbl]
ax.scatter(b['weight'],b['height'], c=color, label=lbl)
scatter('fat', 'red')
scatter('normal', 'yellow')
scatter('thin', 'blue')
ax.legend()
plt.show()
# 1단계 - 데이터 읽기
tbl = pd.read_csv('bmi.csv')
# 2단계 - 정규호ㅠㅏ
label = tbl['label']
w = tbl['weight'] / 100
h = tbl['height'] / 200
wh = pd.concat([w, h], axis=1)
# 3단계 - 학습 전용 데이터와 테스트 전용 데이터 분리
data_train, data_test, label_train, label_test = train_test_split(wh, label)
# 4단계 - 데이터 학습하기
clf = svm.LinearSVC()
clf.fit(data_train, label_train)
# 5단계 - 데이터 예측
predict = clf.predict(data_test)
# 6단계 - 결과 테스트
ac_score = metrics.accuracy_score(label_test, predict)
cl_report = metrics.classification_report(label_test, predict)
print('정답률:', ac_score)
print('리포트: \n', cl_report)