欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

决策树算法及其应用案例

程序员文章站 2024-02-16 13:17:22
...

决策树算法主要分为三类:
ID3、C4.5、CART算法
以ID3算法为例:
决策树算法及其应用案例

对上表某图书销量进行预测.
思考:建立测试模型,各个变量数据权重?数据的转化?
重点在于:计算各个信息熵(数据预处理),可参考百度百科内容
决策树算法模块:
关注点:对数据需要进行预处理,转化为结构化数据,然后进行分析处理,信息熵的计算,权重大小的比较
数据的预处理模块:

#数据的处理模块
fname="C:/Users/Administrator/Desktop/pandashesuanfa/lesson.csv"
df=pd.read_csv(fname)               #备注:需要将csv文件转为utf-8格式再进行读取文件
#print(df)

x=df.iloc[:,1:5].as_matrix()   #提取变量值,并转化为数组
y=df.iloc[:,5].as_matrix()  #等价于df.iloc[:,5:6]


for i in range(0,len(x)):       #遍历所有数据
    for j in range(0,len(x[i])):
        thisdata=x[i][j]
        if(thisdata=="是" or thisdata=="多" or thisdata=="高"):
            x[i][j]=int(1)  #1的类型转为整型
        else:
            x[i][j]=int(-1)
for i in range(0,len(y)):
    thisdata=y[i]
    if(thisdata=="高"):
        y[i]=1
    else:
        y[i]=-1
'''
容易错的地方:直接拿数据进行训练
原因dtype=object类型不对,
首先应该转化格式,将x,y转化为数据框,然后转化为数组并指定格式
'''
xf=pd.DataFrame(x)
yf=pd.DataFrame(y)
x2=xf.as_matrix().astype(int)
y2=yf.as_matrix().astype(int)

建立决策树模块:

#建立决策树
from sklearn.tree import  DecisionTreeClassifier as DTC
dtc=DTC(criterion="entropy")
dtc.fit(x2,y2)

#方法一:通过代码实现输出预测结果数据,如下
import numpy as np
x3=np.array([[1,-1,-1,1],[1,1,1,1,],[-1,1,-1,1],[-1,-1,1,1]])  #预测四个数据的销量高低
rst=dtc.predict(x3)   #利用决策树的方法predict进行计算
print(rst)              #得出[ 1  1 -1 -1]四个预测结果:高,高,低,低

'''
#方法二:可视化决策树,人工根据决策树图形进行分析预测结果
from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
with open("tree.dot","w") as file:      #以写入的方式创建并打开
    file=export_graphviz(dtc,feature_names=["shizhan","keshishu","chu3333xiao","ziliao"],out_file=file)
'''
输出结果:[ 1  1 -1 -1]:高、高、低、低

完整代码如下: 

#决策树ID3算法
import pandas as pd
'''
fname="C:/Users/Administrator/Desktop/pandashesuanfa/lesson1.xls"
df=pd.read_excel(fname)
编译通过
'''
fname="C:/Users/Administrator/Desktop/pandashesuanfa/lesson.csv"
df=pd.read_csv(fname)               #备注:需要将csv文件转为utf-8格式再进行读取文件
#print(df)

x=df.iloc[:,1:5].as_matrix()   #提取变量值,并转化为数组
y=df.iloc[:,5].as_matrix()  #等价于df.iloc[:,5:6]
for i in range(0,len(x)):       #遍历所有数据
    for j in range(0,len(x[i])):
        thisdata=x[i][j]
        if(thisdata=="是" or thisdata=="多" or thisdata=="高"):
            x[i][j]=int(1)  #1的类型转为整型
        else:
            x[i][j]=int(-1)
for i in range(0,len(y)):
    thisdata=y[i]
    if(thisdata=="高"):
        y[i]=1
    else:
        y[i]=-1
'''
容易错的地方:直接拿数据进行训练
原因dtype=object类型不对,
首先应该转化格式,将x,y转化为数据框,然后转化为数组并指定格式
'''
xf=pd.DataFrame(x)
yf=pd.DataFrame(y)
x2=xf.as_matrix().astype(int)
y2=yf.as_matrix().astype(int)
#建立决策树
from sklearn.tree import  DecisionTreeClassifier as DTC
dtc=DTC(criterion="entropy")
dtc.fit(x2,y2)

#方法一:通过代码实现输出预测结果数据,如下
import numpy as np
x3=np.array([[1,-1,-1,1],[1,1,1,1,],[-1,1,-1,1],[-1,-1,1,1]])  #预测四个数据的销量高低
rst=dtc.predict(x3)   #利用决策树的方法predict进行计算
print(rst)              #得出[ 1  1 -1 -1]四个预测结果:高,高,低,低

'''
#方法二:可视化决策树,人工根据决策树图形进行分析预测结果
from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
with open("tree.dot","w") as file:      #以写入的方式创建并打开
    file=export_graphviz(dtc,feature_names=["shizhan","keshishu","chu3333xiao","ziliao"],out_file=file)
'''