林轩田 机器学习技法 作业3 决策树 随机森林 分类问题(DecisionTree RandomForest)14-17题 python2.7
训练集来自
http://www.csie.ntu.edu.tw/~htlin/course/ml15fall/hw7/hw7_train.dat
测试集来自
http://www.csie.ntu.edu.tw/~htlin/course/ml15fall/hw7/hw7_test.dat
在处理决策树的分类使用的是基尼不纯度。
参考了https://www.cnblogs.com/xbf9xbf/p/4716834.html这位朋友的代码。这里表示感谢!
决策树流程图如下所示
图是自己画的,欢迎大家指点
随机森林流程图如下所示
代码可能还不够简洁,欢迎大家提意见。
#encoding=utf8
import numpy as np
import math
from random import *
class TreeNode:
def __init__(self,index,value):
self.index=index
self.value=value
self.sign=0
self.left=None
self.right=None
def read_input_data(path):
x = []
y = []
for line in open(path).readlines():
items = line.strip().split(' ')
tmp_x = []
for i in range(0,len(items)-1): tmp_x.append(float(items[i]))
x.append(tmp_x)
y.append(float(items[-1]))
return np.array(x),np.array(y)
def Gini(label):
m=np.shape(label)[0]
if m==0:
return 0
positive_num=sum(label==1)
negative_num=sum(label==-1)
if (positive_num+negative_num)==0 :return 0
return 1-(positive_num/float(m))**2-(negative_num/float(m))**2
##统计完全树的节点,叶子节点不需要统计进去
def internal_node(node):
leftNum