【机器学习】Sklearn 调试模型

来源:互联网 发布:精业本草官方淘宝店 编辑:程序博客网 时间:2024/06/05 17:04

1、过拟合

处理过拟合的方法有:

a>减少特征,降低模型的复杂度
b>减小调试参数
c>增加训练数据量

常用的调参方法就是通过在惩罚函数中新增一个正则化参数C来控制分类边界对样本的辨识度,如果是用权重的二次方,则是L2正则化,如果是|W|/C则是L1正则化。

L2损失函数:

X是训练集,W权重矩阵,b是偏置向量,y真实标签值def loss_func(X,W,b,y):    s = score(X,W,b)    p = softmax(s)    return -np.mean(cross_entropy(y,p))+np.mean(np.dot(w.T,w)/c)

2、欠拟合

处理方式正好和过拟合相反:

a>增加特征,增加模型的复杂度
b>减大调试参数

3、交叉验证

在训练数据上训练好模型,在测试数据看训练的效果,将测试集成绩最好的参数组合作为模型的参数,这种方法就是交叉验证。

但是为了防止特定的数据造成的偶然性,这里通过取交叉验证结果的平均值作为模型的参数成绩,这就是k折交叉算法。

import sklearnfrom sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import cross_val_score,KFolddata = datasets.load_iris()X = data['data']y = data['target']clf = KNeighborsClassifier()#直接算出每个交叉验证模型的得分,得到得分的数组,然后可以i取平均scores = cross_val_score(clf, data.data, data.target, cv=5)#print(scores.mean())#查看KFold的执行算法过程kf = KFold(n_splits = 5)#print(kf)#kf = KFold(len(y_train),n_folds =10)for train, test in kf.split(X):    #获取训练和测试数据    #print("%s %s" % (train, test))    X_train,X_test = X[train],X[test]    y_train,y_test = y[train],y[test]    print(X_train,X_test)

4、Gridsearch暴力寻参

可以通过设置一个参数搜索空间,暴力搜索所有的参数组合,可以同时寻找多个最优参数。

寻找最有参数搜索范围只要要两步:第一定义搜索范围,第二在数据中尝试所有的参数组合。

紧接上例,寻找KNN模型的参数K(近邻数量)的最价值:

from sklearn.grid_search import GridSearchCV params = dict(n_neighbors = list(range(1,13)))print(params)#grid_searchgsearch = GridSearchCV(estimator =clf,param_grid=params)gsearch.fit(X,y)print(gsearch.best_params_, gsearch.best_score_)

模型的调试目标是:平衡过拟合和欠拟合,通过GridSearch 比例搜索最佳的模型参数组合。

原创粉丝点击