1.原理

        决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

        分类与回归树(CART——Classification And Regression Tree)) 是一种非常有趣并且十分有效的非参数分类和回归方法。它通过构建二叉树达到预测目的。

分类与回归树CART 模型最早由Breiman 等人提出,已经在统计领域和数据挖掘技术中普遍使用。它采用与传统统计学完全不同的方式构建预测准则,它是以二叉树的形式给出,易于理解、使用和解释。由CART 模型构建的预测树在很多情况下比常用的统计方法构建的代数学预测准则更加准确,且数据越复杂、变量越多,算法的优越性就越显著。模型的关键是预测准则的构建,准确的。

2.代码

2.1 iris CART决策树分类

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris


def decisionTreeClassifacitionDemo():
    '''
    function:决策树CART分类DEMO
    :return:
    '''
    # 准备数据集
    iris = load_iris()
    # 获取特征集和分类标识
    features = iris.data
    labels = iris.target
    print(">>features:", features[0])
    print("labels:", labels[0])
    # 随机抽取33%的数据作为测试集
    train_features, test_features, train_labels, test_labels =\
        train_test_split(features, labels, test_size=0.33, random_state=0)
    # 创建CART分类树
    clf = DecisionTreeClassifier(criterion='gini')
    # 拟合构造CART分类树
    clf = clf.fit(train_features, train_labels)
    # 用CART分类树做预测
    test_predicts = clf.predict(test_features)
    # 预测结果与测试集对比
    accu = accuracy_score(test_labels, test_predicts)
    print("CART accuracy:", accu)

if __name__ == "__main__":

    decisionTreeClassifacitionDemo()

2.2 波士顿房价 CART决策树回归

from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.tree import DecisionTreeRegressor

def decisionTreeRegressionDemo():
    '''
    function:决策树CART回归DEMO
    :return:
    '''
    #准备数据集
    boston = load_boston()
    #显示数据名字
    print("data name:", boston.feature_names)
    #获取特征
    features = boston.data
    # 获取房价
    prices = boston.target
    #随机抽取33%的数据集作为测试集、其余作为训练集
    train_features, test_features, train_price, test_price = \
        train_test_split(features, prices, test_size=0.33)
    #创建CART回归树
    cart = DecisionTreeRegressor()
    #构造Cart回归树
    cart.fit(train_features, train_price)
    #预测测试集结果评价
    predict_price = cart.predict(test_features)
    #测试集的评价结果
    mean_squared_error_value = mean_squared_error(test_price, predict_price)
    mean_absolute_error_value = mean_absolute_error(test_price, predict_price)
    print("回归树二乘偏差均值:", mean_squared_error_value, "回归树绝对值偏差:", mean_squared_error_value)
    pass

if __name__ == "__main__":
    decisionTreeRegressionDemo()
    pass

待续》》》