机器学习4 决策树 概念总结和简单实践

第四章  决策树  概念图解

机器学习4 决策树 概念总结和简单实践

 

第一遍sklearn直接上手实践:

习题4.3 基于信息增益的决策树对西瓜集进行分类:

西瓜集表4.3如下:

色泽 根蒂 敲声 纹理 脐部 触感 密度 含糖率 好坏
青绿 蜷缩 浊响 清晰 凹陷 硬滑 0.697 0.46 好瓜
乌黑 蜷缩 沉闷 清晰 凹陷 硬滑 0.744 0.376 好瓜
乌黑 蜷缩 浊响 清晰 凹陷 硬滑 0.634 0.264 好瓜
青绿 蜷缩 沉闷 清晰 凹陷 硬滑 0.608 0.318 好瓜
浅白 蜷缩 浊响 清晰 凹陷 硬滑 0.556 0.215 好瓜
青绿 稍蜷 浊响 清晰 稍凹 软粘 0.403 0.237 好瓜
乌黑 稍蜷 浊响 稍糊 稍凹 软粘 0.481 0.149 好瓜
乌黑 稍蜷 浊响 清晰 稍凹 硬滑 0.437 0.211 好瓜
乌黑 稍蜷 沉闷 稍糊 稍凹 硬滑 0.666 0.091 坏瓜
青绿 硬挺 清脆 清晰 平坦 软粘 0.243 0.267 坏瓜
浅白 硬挺 清脆 模糊 平坦 硬滑 0.245 0.057 坏瓜
浅白 蜷缩 浊响 模糊 平坦 软粘 0.343 0.099 坏瓜
青绿 稍蜷 浊响 稍糊 凹陷 硬滑 0.639 0.161 坏瓜
浅白 稍蜷 沉闷 稍糊 凹陷 硬滑 0.657 0.198 坏瓜
乌黑 稍蜷 浊响 清晰 稍凹 软粘 0.36 0.37 坏瓜
浅白 蜷缩 浊响 模糊 平坦 硬滑 0.593 0.042 坏瓜
青绿 蜷缩 沉闷 稍糊 稍凹 硬滑 0.719 0.103 坏瓜

sklearn直接调参代码:

# first round -- sklearn
import pandas as pd
import numpy as np
data = pd.read_csv('./CH4 TABLE4-3.csv', delimiter=',') 
data1 = data[['色泽','根蒂','敲声','纹理','脐部','触感','密度','含糖率','好坏']]
# change label to data format
data2 = data1.replace(['青绿','蜷缩','浊响','清晰','凹陷','硬滑','乌黑','稍蜷','沉闷','稍糊','稍凹','软粘','浅白','硬挺','清脆','模糊','平坦','好瓜','坏瓜'],[1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,1,0])

X =np.array(data2.iloc[:,0:8]) #X varible
y = np.array(data2.iloc[:,8])  # target class : bad or good

from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
# 基于信息增益的决策树训练
clf = DecisionTreeClassifier(criterion='entropy',splitter='best')
clf.fit(X,y)
# 决策树可视化
import pydotplus
from IPython.display import Image  
dot_data = tree.export_graphviz(clf, out_file=None, 
                         feature_names=['color','root','knock',' texture','umbilical','feel','density','sweety'],  
                         class_names=['Bad','Good'],  
                         filled=True, rounded=True,  
                         special_characters=True)  
graph = pydotplus.graph_from_dot_data(dot_data)  
Image(graph.create_png()) 

# 预测值与训练值对比---百分百匹配训练集,过拟合
from sklearn import metrics
y_pred = clf.predict(X)
print(metrics.classification_report(y,y_pred))