交叉验证训练的模型用哪个呢?

来源:8-6 验证数据集与交叉验证

人土土zzzzz

2018-10-11

老师,交叉验证把训练数据集分成三份,然后可以训练出三个模型,三个模型的参数(比如线性回归的theta参数)很可能不一样,那请问最终要用哪个模型的参数呢?

写回答

1回答

liuyubobobo

2018-10-12

交叉验证的目的是更准确的获得模型的参数,而不是训练出最终模型。你没有理解交叉验证的过程:)


对于一组参数,假设叫p1。交叉验证把数据分成了三份,假设叫a,b,c。

用ab训练,c做测试,会得到一个这组参数p1训练出的模型的得分,假设叫score_ab;

用ac训练,b做测试,会得到一个这组参数p1训练出的模型的得分,假设叫score_ac;

用bc训练,a做测试,会得到一个这组参数p1训练出的模型的得分,假设叫score_bc;

我们在课程中用的cross_val_score,返回的就是这三个score


score_ab,score_ac和score_bc的平均值,叫做score1。这个score1,可以更好的描述参数p1的效果。因为,此时,我们得到这个score,一定程度刨除了随机化分数据及带来的影响。(所有的数据都有机会即当训练数据集,又当测试数据集)。


如果,再来一组参数p2,我们可以使用同样的这种方式,计算出score2。

我们比较score1和score2的高低,就可以知道这两组参数谁更好。我们最终要用更好的那组参数:)


请再仔细理解一下课程中以knn为例使用交叉验证找模型参数的代码:

best_k, best_p, best_score = 0, 0, 0for k in range(2, 11):
    for p in range(1, 6):
        knn_clf = KNeighborsClassifier(weights="distance", n_neighbors=k, p=p)
        scores = cross_val_score(knn_clf, X_train, y_train) # 理解这里!
        score = np.mean(scores) #理解这里!
        if score > best_score:
            best_k, best_p, best_score = k, p, score
            print("Best K =", best_k)print("Best P =", best_p)print("Best Score =", best_score)


加油!:)

2
8
慕运维2948618
回复
liuyubobobo
谢谢老师
2019-04-28
共8条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程