import math
# 전체 엔트로피 공식으로 계산
P_slow = 0.5
P_fast = 0.5
Entropy = - P_slow * math.log(P_slow, 2) - P_fast * math.log(P_fast, 2)
Entropy
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
from sklearn.model_selection import train_test_split
# 1단계 - 디이터 읽기
mr = pd.read_csv('pyml_rev_examples/ch4/mushroom.csv', header=None)
mr.head(3)
# 2단계 - 데이터 내부의 기호를 숫자로 변환
label = []
data = []
attr_list = []
for row_index, row in mr.iterrows():
# 라벨(독여부) 생성
label.append(row.loc[0])
row_data=[]
# 나머지 데이터로
for v in row.loc[1:]:
row_data.append(ord(v)) # ord() : 특정 한 문자를 아스키 코드 값으로 변환
data.append(row_data)
data[:1]
# 3단계 - 학습 전용과 테스트 전용으로 데이터 분리
data_train, data_test, label_train, label_test = train_test_split(data,label)
# 4단계 - 데이터학습
clf = RandomForestClassifier()
clf.fit(data_train, label_train)
# 5단계 - 데이터 예측
predict = clf.predict(data_test)
predict
# 6단계 - 결과 테스트
ac_score = metrics.accuracy_score(label_test, predict)
cl_report = metrics.classification_report(label_test, predict)
print('정답률:', ac_score)
print('리포틔:', cl_report)
test_dict = {'dic': {}, 'cnt':0}
test_dict['dic']['x'] = 0
test_dict['dic']
test_dict['dic']['y'] = 0
test_dict['dic']
# 데이터 내부의 분류 변수 전개
label = []
data = []
attr_list = []
for row_index, row in mr.iterrows():
label.append(row.loc[0])
exdata = []
for col, v in enumerate(row.loc[1:]):
if row_index == 0:
attr = {'dic':{},'cnt':0}
attr_list.append(attr)
else:
attr = attr_list[col]
d = [0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0]
if v in attr['dic']:
idx = attr['dic'][v]
else:
idx = attr['cnt']
attr['dic'][v] = idx
attr['cnt'] += 1
d[idx] = 1
exdata += d
data.append(exdata)
mr.head(3)
data_train, data_test, label_train, label_test = train_test_split(data,label)
clf = RandomForestClassifier()
clf.fit(data_train, label_train)
predict = clf.predict(data_test)
ac_score = metrics.accuracy_score(label_test, predict)
ac_score