Изменения

Перейти к: навигация, поиск

Кросс-валидация

2171 байт добавлено, 19:32, 4 сентября 2022
м
rollbackEdits.php mass rollback
<tex>T^l = F_1 \cup \dots \cup F_k, |F_i| \approx \frac{l}{k},
\\ CV_k = \frac{1}{k} \sum_{i=1}^{k} Q(\mu(T^l \setminus F_i),F_i) \to min </tex>.
 
<font color="green"># Пример кода для k-fold кросс-валидации:
'''# Пример классификатора, cпособного проводить различие между всего лишь двумя
'''# классами, "пятерка" и "не пятерка" из набор данных MNIST</font>
'''import''' numpy '''as''' np
'''from''' sklearn.model_selection '''import''' StratifiedKFold
'''from''' sklearn.datasets '''import''' fetch_openml
'''from''' sklearn.base '''import''' clone
'''from''' sklearn.linear_model '''import''' SGDClassifier
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist["data"], mnist["target"]
y = y.astype(np.uint8)
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
y_train_5 = (y_train == 5) <font color="green"> # True для всех пятерок, False для всех остальных цифр. Задача опознать пятерки</font>
y_test_5 = (y_test == 5)
sgd_clf = SGDClassifier(random_state=42)<font color="green"> # классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)</font>
<font color="green"># Разбиваем обучающий набора на 3 блока</font>
# выработку прогнозов и их оценку осуществляем на каждом блоке с использованием модели, обученной на остальных блоках</font>
skfolds = StratifiedKFold(n_splits=3, random_state=42)
for train_index, test_index in skfolds.split(X_train, y_train_5):
clone_clf = clone(sgd_clf)
X_train_folds = X_train[train_index]
y_train_folds = y_train_5[train_index]
X_test_fold = X_train[test_index]
y_test_fold = y_train_5[test_index]
clone_clf.fit(X_train_folds, y_train_folds)
y_pred = clone_clf.predict(X_test_fold)
n_correct = sum(y_pred == y_test_fold)
print(n_correct / len(y_pred))
<font color="green"># print 0.95035
# 0.96035
# 0.9604</font>
=== t×k-fold кросс-валидация ===
1632
правки

Навигация