0%

Cross Validation

Hey

Machine Learning notes

Cross Validation

有关交叉验证的sklearn的方法和原理

cross_val_score

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# cross_val_score 用训练集来评估模型的好坏,注意交叉验证都是使用的是训练集来进行测验,而不是测试集
# 其返回的是,几折交叉验证就返回几个模型训练的评估分数
from sklearn.model_selection import cross_val_score
# 这里的model(),传入的是个模型实例,后传入的两个数据集合,cv表示交叉验证的次数,scoring表示评价方法
cross_val_score(model(),X_train,y_train,cv=3,scoring="accuracy")


# 下面则使用python实现一个cross_val_score函数
from sklearn.model_selection import StratifiedKFold
from sklean.base import clone
# 将数据集划分为几份
skfolds = StratifiedKFold(n_splits=3,random_state=42)
for train_index,test_index in skfolds.split(X_train,y_train):
# 克隆原来模型
clone_clf = clone(model())
X_train_folds = X_train[trian_index]
y_train_folds = y_train[train_index]
X_test_folds = X_train[test_index]
y_test_folds= y_train[test_index]
clone_clf.fit(X_train_folds,y_train_folds)
y_pred = clone_clf.predict(X_test_folds)
n_correct = sum(y_pred == y_test_folds)
print(n_correct / len(y_pred) )

cross_val_predict

1
2
3
4
"""
就像 cross_val_score(),cross_val_predict()也使用 K 折交叉验证。它不是返回一个评估分数,而是返回基于每一个测试折做出的一个预测值。这意味着,对于每一个训练集的样例,你得到一个干净的预测(“干净”是说一个模型在训练过程当中没有用到测试集的数据)。"""
from sklearn.model_selection import cross_val_predict
y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)