python决策树算法怎么实现

  介绍

这篇文章将为大家详细讲解有关python决策树算法怎么实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强> 1,步骤

计算数据集年代中的每个属性的熵H (xi)

选取数据集年代中熵值最小(或者信息增益最大,两者等价)的属性

在决策树上生成该属性节点

使用剩余结点重复以上步骤生成决策树的属性节点

<强> 2,实例

 import  numpy  as  np
  import 数学
  得到collections  import 计数器
  ,
  #,创建数据
  def  create_data ():
  ,,,X1 =, np.random.rand (50, 1) * 100
  ,,,X2 =, np.random.rand (50, 1) * 100
  ,,,X3 =, np.random.rand (50, 1) * 100
  ,,,,
  ,,,def  f (x):
  ,,,,,,,return  2, if  x 祝辞,70,else  1, if  x 祝辞,40,else  0
  ,,,,
  ,,,y =, X1  +, X2  + X3
  ,,,Y =, Y 在150年
  ,,,Y =, Y  + 0
  ,,,r =,地图(f, X1)
  ,,,X1 =,列表(右)
  ,,,,
  ,,,r =,地图(f, X2)
  ,,,X2 =,列表(右)
  ,,,,
  ,,,r =,地图(f, X3)
  ,,,X3 =,列表(右)
  ,,,x =, np.c_ (X1, X2, X3,, Y)
  ,,,return  x,, (& # 39; courseA& # 39;,, & # 39; courseB& # 39;,, & # 39; courseC& # 39;】
  ,
  ,
  #,计算集合信息熵的函数
  def  calculate_info_entropy(数据):
  ,,,n =, len(数据集)
  ,,,#,我们用计数器统计一下Y的数量
  ,,,labels =,计数器(数据集(:,,1))
  ,,,entropy  0.0=,
  ,,,#,套用信息熵公式
  ,,,for  k, v 拷贝labels.items ():
  ,,,,,,,prob =, v /n
  ,,,,,,,entropy  -=, prob  *, math.log(概率,2)
  ,,,return 熵
  ,
  #,实现拆分函数
  def  split_dataset(数据集,idx):
  ,,#,idx是要拆分的特征下标
  ,,,splitData =, defaultdict(列表)
  ,,,for  data 拷贝数据集:
  ,,,,,,#,这里删除了idx这个特征的取值,因为用不到了
  ,,,,,,,splitData[数据[idx]] .append (np.delete(数据,idx))
  ,,,return 列表(splitData.values()),列表,(splitData.keys ())
  ,
  #,实现特征的选择函数
  def  choose_feature_to_split(数据):
  ,,,n =, len(数据集[0])1
  ,,,m =, len(数据集)
  ,,,#,切分之前的信息熵
  ,,,entropy =, calculate_info_entropy(数据集)
  ,,,bestGain  0.0=,
  ,,,feature =1
  ,,,for 小姐:拷贝范围(n):
  ,,,,,,#,根据特征我切分
  ,,,,,,,,,split_data _ =, split_dataset(数据集,,我)
  ,,,,,,,new_entropy  0.0=,
  ,,,,,,,#,计算切分后的信息熵
  ,,,,,,,for  data 拷贝split_data:
  ,,,,,,,,,,,prob =, len(数据),/m
  ,,,,,,,,,,,new_entropy  +=, prob  *, calculate_info_entropy(数据)
  ,,,,,,,#,获取信息增益
  ,,,,,,,gain =entropy 作用;new_entropy
  ,,,,,,,if  gain 祝辞,bestGain:
  ,,,,,,,,,,,bestGain =,
  ,,,,,,,,,,,feature =我
  ,,,return 特性
  ,
  #,决策树创建函数
  def  create_decision_tree(数据集,feature_names):
  ,,,dataset =, np.array(数据集)
  ,,,counter =,计数器(数据集(:,,1))
  ,,,#,如果数据集值剩下了一类,直接返回
  ,,,if  len(柜台),==,1:
  ,,,,,,,return 数据集[0,1]
  ,,,,
  ,,,#,如果所有特征都已经切分完了,也直接返回
  ,,,if  len(数据集[0]),==,1:
  ,,,,,,,return  counter.most_common (1) [0] [0]
  ,,,,
  ,,,#,寻找最佳切分的特征
  ,,,fidx =, choose_feature_to_split(数据集)
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

python决策树算法怎么实现