分类算法-决策树与随机森林

    xiaoxiao2023-10-02  165

    1.决策树分类算法原理

    1.1 概述

    决策树(decision tree)——是一种被广泛使用的分类算法。

    相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置

    在实际应用中,对于探测式的知识发现,决策树更加适用

    1.2 算法思想

    1.2.1 找对象案例

    通俗来说,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

         

    这个女孩的决策过程就是典型的分类树决策。

    实质:通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见

     

    1.2.2 银行贷款案例

    你如何去划分是否能得到贷款?

     

    决策树分类算法的关键就是根据“先验数据”构造一棵最佳的决策树,用以预测未知数据的类别

    决策树:是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

     

    1.3 信息熵

     

    1.4 信息增益

    信息增益的计算:

    2.常见决策树使用的算法

    3.sklearn决策树API

    4.决策树的结构和本地保存

    5.决策树的优缺点以及改进

    优点:

    简单的理解和解释,树木可视化。

    需要很少的数据准备,其他技术通常需要数据归一化,

    缺点:

    决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。

    决策树可能不稳定,因为数据的小变化可能会导致完全不同的树 被生成

    改进:

    减枝cart算法

    随机森林

    6.集成学习方法-随机森林

    6.1 集成学习方法

    集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

    6.2 什么是随机森林

    定义:在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

    6.3 算法

    6.4 集成学习API

    7.随机森林的优点

    在当前所有算法中,具有极好的准确率能够有效地运行在大数据集上能够处理具有高维特征的输入样本,而且不需要降维 能够评估各个特征在分类问题上的重要性对于缺省值问题也能够获得很好得结果

    8.代码

    # coding=utf-8 _author_ = 'liuzc' from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.feature_extraction import DictVectorizer from sklearn.ensemble import RandomForestClassifier import pandas as pd def decision(): """ 决策树对泰坦尼克号进行预测生死 :return: None """ # 获取数据 titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt") # 处理数据,找出特征值和目标值 x = titan[['pclass', 'age', 'sex']] y = titan['survived'] print(x) # 缺失值处理 x['age'].fillna(x['age'].mean(), inplace=True) # 分割数据集到训练集合测试集 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25) # 进行处理(特征工程)特征-》类别-》one_hot编码 dict = DictVectorizer(sparse=False) x_train = dict.fit_transform(x_train.to_dict(orient="records")) print(dict.get_feature_names()) x_test = dict.transform(x_test.to_dict(orient="records")) # print(x_train) # 用决策树进行预测 # dec = DecisionTreeClassifier() # dec.fit(x_train, y_train) # # 预测准确率 # print("预测的准确率:", dec.score(x_test, y_test)) # # 导出决策树的结构 # export_graphviz(dec, out_file="./tree.dot", feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性']) # 随机森林进行预测 (超参数调优) rf = RandomForestClassifier() param = {"n_estimators": [120, 200, 300, 500, 800, 1200], "max_depth": [5, 8, 15, 25, 30]} # 网格搜索与交叉验证 gc = GridSearchCV(rf, param_grid=param, cv=2) gc.fit(x_train, y_train) print("准确率:", gc.score(x_test, y_test)) print("查看选择的参数模型:", gc.best_params_) return None if __name__ == "__main__": decision()

     

    最新回复(0)