网格搜索法
网格搜索法是一种通过遍历给定的参数组合来优化模型的算法。针对每个参数组合来测试时,要对模型的表现进行量化,从而最后选出分数最高的参数组合。
实现网格搜索法:
class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, fit_params=None, n_jobs=None, iid=’warn’, refit=True, cv=’warn’, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=’warn’)
def gride_search(model,para):
grid = GridSearchCV(model,para,cv = 5,scoring = 'accuracy',n_jobs = 4)
grid = grid.fit(x_train,y_train)
if hasattr(model,'decision_function'):
y_predict_pro = grid.decision_function(x_test)
y_default_predict_pro = model.decision_function(x_test)
else:
y_predict_pro = grid.predict_proba(x_test)[:,1]
y_default_predict_pro = model.predict_proba(x_test)[:,1]
print (grid.best_score_)
print (model.get_params)
print (grid.best_params_)
如何评分-交叉验证法
交叉验证法是给模型评分的经典算法。
在K折交叉验证中,我们用到的数据是训练集中的所有数据。将训练集的所有数据平均划分成K份(通常选择K=10),取第K份作为验证集,验证集就像用来估计高考分数的模拟题,余下的K-1份作为交叉验证的训练集。
针对每个参数组合进行实验时,都要进行k折交叉验证,这样得到k个验证分数,k个验证分数的均值就是这个模型的验证分数。
结合网格搜索法,获得验证分数最高的参数组合,训练就是最优模型。
模型融合
使用stacking策略进行模型集成。
from mlxtend.classifier import StackingClassifier
lr_model = LogisticRegression()
svm_model = LinearSVC()
lgbm_model = lgb.sklearn.LGBMClassifier()
dt_model = DecisionTreeClassifier()
sclf = StackingClassifier(classifiers=[lr_model,svm_model,lgbm_model],meta_classifier=dt_model)
sclf.fit(x_train,y_train)
for clf,label in zip([lr_model,svm_model,lgbm_model,sclf],['逻辑回归','SVM','LightGBM','StackingClassifier']):
scores = cross_val_score(clf,x_train,y_train,cv = 5,scoring='accuracy')
print("Accuracy: %0.2f (+/- %0.2f) [%s]"% (scores.mean(), scores.std(), label))