【机器学习】Sklearn 调试模型

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 sklearn
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score,KFold

data = 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_search
gsearch = GridSearchCV(estimator =clf,param_grid=params)
gsearch.fit(X,y)
print(gsearch.best_params_, gsearch.best_score_)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值