#模型调优和模型融合
- 模型调优的基本方法
- 模型融合
- 代码实践
模型调优
模型调优,主要是寻找超参数,使得模型有更好的robust。
- 网格搜索
GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,还是试一试吧,后续可以再拿bagging再优化。 - 随机采样
数据规模大,精确的结果难以在一定时间计算出。
结果的些许的不精确能够被接受。
求取的结果是最优化(optimization)问题,有一个成本计算模型。 - 贝叶斯超参数优化
在贝叶斯调参过程中,假设参数组合是X,最终的评估结果为Y,通过什么样的X可以取得最优的Y,这个函数F(X)我们是不知道的,Y=F(X)。
于是可以假设这个寻找最优化参数的过程是一个高斯过程。高斯过程有个特点,就是当随机遍历一定的数据点并拿到结果之后,可以大致绘制出整个数据的分布曲线。
其基础理论就是不断通过先验点去预测后验知识
模型融合和代码实践
from sklearn.model_selection import GridSearchCV
params={'penalty':['l2','l1'],'C':[1,50,100,150]}
lr=LogisticRegression(C=120,dual=False)
lrsearch=GridSearchCV(estimator=lr,param_grid=params,scoring='f1_macro',n_jobs=1,cv=5,verbose=3)
lrsearch.fit(x_train,y_train)
print("the best parameters:",lrsearch.best_params_)
print("the best score:",lrsearch.best_score_)
print("the validation score:",lrsearch.score(x_validation,y_validation))
params={'C':[1,10,50,100]}
svm=LinearSVC(dual=True)
svmseach=GridSearchCV(estimator=svm,param_grid=params,scoring='f1_macro',n_jobs=1,cv=5,verbose=3)
svmseach.fit(x_train,y_train)
print("the best parameters:",svmseach.best_params_)
print("the best score:",svmseach.best_score_)
print("the validation score:",svmseach.score(x_validation,y_validation))
logis=LogisticRegression(C=150,dual=True)
svm=LinearSVC(C=10,dual=True)
algorithms = [logis,svm]
full_predictions = []
for alg in algorithms:
alg.fit(x_train, y_train)
predictions = alg.predict_proba(x_validation)
full_predictions.append(predictions)
y_prediction = (full_predictions[0] + full_predictions[1]) / 2
y_prediction = np.argmax(y_prediction, axis=1) + 1
f1 = f1_score(y_validation, y_prediction, average='micro')
print('The F1 Score: %.2f' % f1)
The F1 Score: 0.72