13机器学习——决策树、随机森林

13机器学习——决策树、随机森林

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何划分是否能得到贷款?

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
猜谁是冠军?假设有32支球队
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
信息和消除不确定性是相联系的
信息熵越大,比如每个球队赢的概率都一样,那么不确定性也越大
当我得知一些信息的时候,比如每个队赢得的几率不同,不确定性就下降了

在这里插入图片描述
H(D)初始信息熵大小
在这里插入图片描述
针对银行贷款数据:
9/15:“是”的概率,
6/15:“否”的概率

H(D)= -(9/15×log(9/15)+6/15×log(6/15))

年龄有三个类别:青年,中年,老年,各占1/3
g(D,年龄)=H(D)-H(D’|年龄)=0.971-[1/3 ×H(青年)+1/3 ×H(中年)+1/3 ×H(老年)]

(信息熵都是针对类别来说的)
2/5:青年中类别“是”的比例
3/5:青年中类别“否”的比例
H(青年)=-(2/5×log(2/5)+3/5×log(3/5))

2/5:中年中类别“是”的比例
3/5:中年中类别“否”的比例
H(中年)=-(2/5×log(2/5)+3/5×log(3/5))

4/5:老年中类别“是”的比例
1/5:老年中类别“否”的比例
H(老年)=-(4/5×log(4/5)+1/5×log(1/5))

在这里插入图片描述
特征A3(有自己的房子)信息增益最大,所以作为决策树的第一个判定标准

决策树的分类依据之一:信息增益
在这里插入图片描述
基尼系数和信息增益相比,划分更加仔细
在这里插入图片描述
在这里插入图片描述
数据:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt

在这里插入图片描述

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier
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))

    return None

if __name__=="__main__":
    decision()

结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier,export_graphviz
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=['age','pclass1st','pclass=2nd','pclass=3rd','sex=female','sex=male'])
    return None

if __name__=="__main__":
    decision()

运行完就多出来一个tree.dot的文件
在这里插入图片描述
转换成图片:
在这里插入图片描述
可以设置树的深度:
dec=DecisionTreeClassifier(max_depth=8)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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)

    #随机森林进行预测(超参数调优)
    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()

结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值