电子毕业设计网站建设,如何制作公司宣传片,邗江建设局网站资料下载,做网站用的图片怎样压缩“特征提取决定模型上限#xff0c;模型的选择就是不断接近这个上限。”
在特征已经提取好的情况下#xff0c;也选择好了机器学习模型算法#xff0c;如何进一步提高模型的表现呢#xff1f;
Stacking方法就是一个可以帮助模型进一步提高的算法。
1、#xff08;大白话…“特征提取决定模型上限模型的选择就是不断接近这个上限。”
在特征已经提取好的情况下也选择好了机器学习模型算法如何进一步提高模型的表现呢
Stacking方法就是一个可以帮助模型进一步提高的算法。
1、大白话概念
类似于深度学习NNsStacking一般有两层机器学习模型第一层机器学习模型群可以被看成NNs中的神经元对原始的处理好的数据集进行训练输出新的特征给下一层的机器学习模型使用第二层机器学习模型的学习‘材料’就是上一层的输出第二层的输出是最后的预测结果。
多个模型的集合相当于NNs中的深层次的特征提取因此Stacking往往能够进一步提高预测结果的准确性。 2、实现过程
主要过程是下图 图中分两层第一层的输入是原始的Train data和Test data输出经过五折交叉验证输出的Predictors的纵向叠加叠加成和Train data相同的行数以及对Test data的预测结果取平均的值。第二层的输入是 经过五折交叉验证输出的Predictors作为训练集而对Test data的预测结果取平均的值作为测试集输出的是最后的预测结果。
图中有些许问题正确的图应该是下面 电脑上用鼠标画的很抽象别骂了哈哈哈
与上图的 区别就是第一层1st只表示了一个model1上面还有别的模型M2M3说明第一层的五折交叉验证其实是一个模型中的内容而不是分别的五个模型。第二层2nd中使用Mnext来表示。
假设Model1 输出 PTrain1和PTest1。那么其余的Model2这里的Model2不是图中第二层的Model2还是属于第一层的模型、Model3会输出PTrain2和PTest2、PTrain3和PTest3。
那么给下一层Mnext的训练集就为Train PTrain1 PTrain2 PTrain3测试集为 Test PTest1 PTest2 PTest3。横向拼接作为不同的特征DataFrame很常见的形式
用矩阵来表示就是 以防有人还是看不懂这里还有一个图结合前文应该能轻松读懂。Stacking可以由下图清晰表示出来 3、Python代码实现
def get_oof(clf, x_train, y_train, x_test):oof_train np.zeros((ntrain,)) oof_test np.zeros((ntest,))oof_test_skf np.empty((NFOLDS, ntest)) #NFOLDS行ntest列的二维arrayfor i, (train_index, test_index) in enumerate(kf): #循环NFOLDS次x_tr x_train[train_index]y_tr y_train[train_index]x_te x_train[test_index]clf.fit(x_tr, y_tr)oof_train[test_index] clf.predict(x_te)oof_test_skf[i, :] clf.predict(x_test) #固定行填充循环一次填充一行oof_test[:] oof_test_skf.mean(axis0) #axis0,按列求平均最后保留一行return oof_train.reshape(-1, 1), oof_test.reshape(-1, 1) #转置从一行变为一列
4、理论以及注意事项
1. 为什么Stacking可以提高性能呢
结合NNs我们可以理解为“因为第一层模型提取了更深层和结果更有相关性的特征”所以第二层的输出会更好。
2. 为什么要用交叉验证
k折交叉验证是为了防止过拟合。我们知道如果不断地对原始训练集进行特征提取和训练那么就比较容易造成过拟合特别是两层机器学习的情况下。其实结合NNs中的dropout机制就更能理解其内涵了。
3. Stacking的注意事项 3.1 模型有强有弱第一层应该选用强模型第二层选用弱模型线性模型LR进一步避免过拟合 3.2 第一层的模型应该尽量选用不同类型的模型以实现多方面的特征提取。第一层的基模型必须准而不同
欢迎留言和讨论