sklearn学习笔记6:随机森林

一.RandomForestClassifier

n_estimator

  • 这是森林中树木的数量,即基评估器的数量
  • n_estimator越大,模型的效果往往越好,需要的计算量和内存也越大,训练的时间也会越来越长

random_state

  • 当random_state固定时,随机森林中生成的是一组固定的树,但每棵树依然是不一致的。这是用“随机挑选特征进行分枝”的方法得到的随机性,当这种随机性越大的时候,袋装法的效果一般会越来越好

bootstrap & oob_score

  • bootstrap参数默认True,代表采用这种有放回的随机抽样技术。通常这个参数不会被我们设置为False
  • 如果希望用袋外数据来测试,则需要在实例化时就将oob_score这个参数调整为True,训练完毕之后,我们可以用随机森林的另外一个重要属性:oob_score_来查看在袋外数据上测试的结果

二.RandomForestRegressor

所有的参数,属性和接口,全部和随机森林分类器一致,还是apply,fit,predict和score最为核心。仅有的不同就是回归树与分类树不纯度的指标,参数criterion不一致

随机森林没有predict_proba这个接口

criterion

  • 输入“mse”使用均方误差,这种方法通过使用叶子节点的均值来最小化L2损失
  • 输入“friedman_mse”使用费尔德曼均方误差,这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差
  • 输入“mae”使用绝对平均误差,这种指标使用叶子节点的中值来最小化L1损失

在回归树中,MSE不只是我们的分枝质量衡量指标,也是我们最常用的衡量回归树回归质量的指标,回归树的接口score返回的是R平方,并不是MSE,虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算“负均方误差”

三.案例:使用随机森林填补缺失值

对于一个有n个特征的数据来说,其中特征T有缺失值,我们就把特征T当作标签,其他的n-1个特征和原本的标签组成新的特征矩阵,那对于T来说,它没有缺失的部分,就是我们的Y_test,这部分数据既有标签也有特征,而它缺失的部分,只有特征没有标签,这就是我们需要预测的部分

  • 特征T不缺失的值对应的其它n-1个特征 + 本来的标签:X_train
  • 特征T不缺失的值:Y_train
  • 特征T缺失的值对应的其它n-1个特征 + 本来的标签:X_test
  • 特征T缺失的值:未知,我们需要预测的Y_test

这种做法,对于某一个特征大量缺失,其他特征却很完整的情况,非常适用

那如果数据中除了特征T之外,其他特征也有缺失值怎么办?

  • 遍历所有的特征,从缺失最少的开始进行填补(因为填补却是最少的特征所需要的准确信息最少)
  • 填补一个特征时,先将其他特征的缺失值用0代替,每完成一次回归预测,就将预测值放到原本的特征矩阵中,再继续填补下一个特征。每一次填补完毕,有缺失值的特征会减少一个,所以每次循环后,需要用0来填补的特征就越来越少。当进行到最后一个特征时(这个特征应该是所有特征中缺失值最多的),已经没有任何的其他特征需要用0来进行填补了,而我们已经使用回归为其他特征填补了大量有效信息,可以用来填补却是最多的特征
  • 遍历所有特征后,数据就完整,不再有缺失值了
sortindex = np.argsort(X_missing_reg.isnull().sum(axis=0)).values

for i in sortindex:

  #构建我们的新特征矩阵和新标签
  df = X_missing_reg
  fillc = df.iloc[:,i]
  df = pd.concat([df.iloc[:,df.columns != i],pd.DataFrame(y_full)],axis=1)

  #在新特征矩阵中,对含有缺失值的列,进行0的填补
  df_0 = SimpleImputer(missing_values = np.nan,
                       strategy = 'constant',fill_value = 0).fit_transform(df)

  #找出训练集和测试集
  Ytrain = fillc[fillc.notnull()]
  Ytest = fillc[fillc.isnull()]
  Xtrain = df_0[Ytrain.index,:]
  Xtest = df_0[Ytest.index,:]

  #用随机森林回归来填补缺失值
  rfc = RandomForestRegressor(n_estimators=100)
  rfc = rfc.fit(Xtrain,Ytrain)
  Ypredict = rfc.predict(Xtest)
 
  #将填补好的特征返回到我们的原始的特征矩阵中
  X_missing_reg.loc[X_missing_reg.iloc[:,i].isnull(),i] = Ypredict

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值