使用决策树做预测的基本思路及注意事项

每天学习一点点,开始啦!

记录自己的成长史,哈哈哈😄😃😁

导入的路径书写格式:

  1. 直接复制路径在路径前加字母r,如:pd.read_csv(r'C:\Program Files');
  2. 将复制的路径的下划线改为向左的下划线,如:pd.read_csv('C:/Program Files');

基本思路:

  1. 导入需要用到的库
  2. 导入数据集,探索数据
  3. 对数据进行预处理
  4. 提取标签和特征矩阵,分测试集和训练集
  5. 导入模型,粗略地看一下结果
  6. 在不同max_depth下观察模型的拟合状况,调参(效果仍然不太理想)
  7. 用网格搜索调整参数

注意事项:

1、在第三步对数据进行预处理时,可以删除缺失值过多的列和对观察判断来说和预测值y没有关系的列;

      对于数据的分类(二分类和多分类)

       二分类变量类型的转变:

# 决策树无法处理文字,将分类变量变成数值型变量
# 将二分类变量转换成数值型变量
# astype能够将一个pandas对象准换为某种类型,和apply(int(x))不同,
# astype可以将文本转换成数字,用这个方式可以很便捷地将二分类特征转换为0~1
# 这里是指里面已经是布尔类型了,将这个类型转换为int类型,因为布尔型就是指true是1,false是0
# loc[:,'Sex']是指所有的行,Sex这一列取出来;
data.loc[:,'Sex'] = (data['Sex'] == 'male').astype('int')

    多分类变量类型的转变(以三分类做说明):

# 将三分类变量转换为数值型变量
labels = data['Embarked'].unique().tolist()  # 将数组变为列表
# apply 指的是在这一列执行我指定的操作
# 相当于将“Embarked”的每一行数据取列表的项的索引
data['Embarked'] = data['Embarked'].apply(lambda x: labels.index(x))  
# 查看处理后的数据集
data.head()

2、在第四步,应当修正测试集和训练集的索引,相当于将索引转换成从0开始递增的索引。很重要!!!!必须要修改

可以做一个循环,如:

for i in [Xtrain,Xtest,Ytrain,Ytest]:
    i.index = range(i.shape[0])

3、在第7步,一般都到第6步就结束了,当模型十分不理想时,利用网格搜索,但网格搜索时间长,需要对进行的搜索的范围进行一个规定,否则,机器会被跑死的。

如:

import numpy as np
gini_thresholds = np.linspace(0,0.5,20) # 从某个区间取出有顺序的20个数,随机的
# entropy_thresholds = np.linspace(0,1,20)
# parameters是指一串参数和这些参数对应的,我们希望网络搜索来搜索的参数的取值范围,它是个字典
# 这个是一个一个的参数的名字对应的参数的取值的字典,一个个拿出来进行匹配
parameters = {'splitter':('best','random')
              ,'criterion':("gini","entropy")
              ,"max_depth":[*range(1,10)]
              ,'min_samples_leaf':[*range(1,50,5)]
              ,'min_impurity_decrease':[*np.linspace(0,0.5,20)] # 在不使用网格搜索时,基本很难界定
             }
clf = DecisionTreeClassifier(random_state=25)
# 第一个参数是想要进行网路搜索的模型,告诉他有着某些参数的列表,第三个交叉验证的次数
GS = GridSearchCV(clf, parameters, cv=10)
# 用训练集进行fit
GS.fit(Xtrain,Ytrain)

# 从我们输入的参数和参数值的列表中,返回最佳组合
GS.best_params_

# 网格搜索后的模型的评判标准
GS.best_score_

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值