机器学习 决策树和随机森林

决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

源代码:

from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier,export_graphviz
import pandas as pd

def decision():
    """
    决策树对坦坦尼克号进行预测生死
    """
    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_train=dict.transform(x_train.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=lst','pclass=2nd','pclsdd=3rd','女性','男性'])
    
    return None

if __name__=="__main__":
    decision()

运行:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
准确率:

在这里插入图片描述

信息的度量和作用:

假设有三十二支球队,猜谁是冠军。
在这里插入图片描述
每猜一次给一块钱,告诉我是否猜对了,那么我我需要多少钱才能知道谁是冠军?
我们可以把求编上号,从1到32.然后提问:冠军在1-16号嘛?依次询问,只需要五次,就可以知道结果。
log32=5比特。
在这里插入图片描述
信息熵:
在这里插入图片描述
在这里插入图片描述

信息和消除不确定性是相联系的

信息增益:当得知一个特征条件之后,减少的信息熵的大小。
在这里插入图片描述

信息增益的计算:
在这里插入图片描述
例:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
决策树的分类依据之一:信息增益。
基尼系数:划分更加仔细。

常见决策树使用的算法:
在这里插入图片描述

sklearn决策树API:

在这里插入图片描述

例:
在这里插入图片描述
数据网址:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
分类模型:
在这里插入图片描述

决策树的结构、本地保存

在这里插入图片描述
在这里插入图片描述
树的结构:
在这里插入图片描述

决策树的优缺点:

在这里插入图片描述
剪枝:
在这里插入图片描述

随机森林

随机森林:是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
在这里插入图片描述
过程:
单个树:(N个样本,M个特征)

  1. 随机在N个样本中选择一个样本,重复N次。
  2. 随机在M个特征中选出m个特征。

多个决策树:(10棵决策树,样本,特征大多不一样)
随机又放回的抽样,采取bootstrap抽样。

为什么要随机抽样:
在这里插入图片描述

为什么要有放回的抽样:

在这里插入图片描述

集成学习方法:
在这里插入图片描述

随机森林API

在这里插入图片描述

源代码:

from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.ensemble import RandomForestClassifier
import pandas as pd

def decision():
    """
    决策树对坦坦尼克号进行预测生死
    """
    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_train=dict.transform(x_train.to_dict(orient="records"))
    # print(x_train)
    

    
    #用随机森林去预测(超参数调优)
    rf = RandomForestClassifier{"n_estimators":[120,200,300,500,5800,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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值