sklearn作为早期开源的机器学习算法库,难以预料到如今人工智能技术走进千家万户的应用状况,因此并未开放接入GPU进行运算的接口,即sklearn中的所有算法都不支持接入更多计算资源。因此当我们想要使用随机森林在巨量数据上进行运算时,很可能会遭遇计算资源短缺的情况。幸运的是,我们有两种方式解决这个问题:
增量学习是机器学习中非常常见的方法,在有监督和无监督学习当中都普遍存在。增量学习允许算法不断接入新数据来拓展当前的模型,即允许巨量数据被分成若干个子集,分别输入模型进行训练。
model1=model1.fit(X.iloc[:,:8],y)#注意,X有80个特征,X_fc只有8个特征,输入同一个模型的数据必须结构一致model1.estimators_#你发现了吗?model1中原始的树消失了,新的树替代了原始的树再让model1对加利福尼亚房价数据集进行训练,会发生什么呢?别忘了model1之前训练过加利福尼亚房价数据集:
sklearn的这一覆盖规则是交叉验证可以进行的基础,正因为每次训练都不会受到上次训练的影响,我们才可以使用模型进行交叉验证,否则就会存在数据泄露的情况。但在增量学习中,原始数据训练的树不会被替代掉,模型会一致记得之前训练过的数据,我们来看看详细情况:
不过,这里存在一个问题:虽然原来的树没有变化,但增量学习看起来并没有增加新的树——事实上,对于随机森林而言,我们需要手动增加新的树:
trainpath=r"../集成学习公开课数据集/Bigdata/bigdata_train.csv"testpath=r"../集成学习公开课数据集/Bigdata/bigdata_test.csv"2.设法找到csv中总数据量当我们决定使用增量学习时,数据应该是巨大到不可能直接打开查看、不可能直接训练、甚至不可能直接导入的(比如,超过20个G)。但如果我们需要对数据进行循环导入,就必须知道真实的数据量大概有多少,因此我们可以从以下途径获得无法打开的csv中的数据量:
2.如果数据没有索引,则使用pandas中的skiprows与nrows进行尝试:skiprows:本次导入跳过前skiprows行nrows:本次导入只导入nrows行例如,当skiprows=1000,nrows=1000时,pandas会导入1001-2000行当skiprows超出数据量的时候,就会报空值错误EmptyDataError。
1.定义模型:
reg=RFR(n_estimators=10,random_state=1412,warm_start=True#增量学习的过程很漫长,你可以选择展示学习过程,verbose=True#调用你的全部的资源进行训练,n_jobs=8)