Это 18-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
1. Теория перекрестной проверки
Перекрестная проверка
Точность модели обычно легко определить путем сравнения прогнозируемых результатов с фактическими результатами. Ошибка обобщения модели (будь то переоснащение) относительно сложна. Перекрестная проверка является распространенным средством оценки ошибки обобщения модели.
Конкретные шаги
Метод перекрестной проверки сначала делит данные на k взаимоисключающих подмножеств одинакового размера. Затем для обучения каждый раз выбирается k-1 подмножеств, а оставшееся используется в качестве тестового множества. Таким образом, выполняется k раз обучения и тестирования, и, наконец, возвращается среднее значение k раз результатов тестирования. Стабильность и точность перекрестной проверки во многом зависят от значения k, и наиболее часто используемое значение k равно 10. Этот метод перекрестной проверки также называется «к-кратной перекрестной проверкой».
оставить один
Метод исключения по одному является частным случаем перекрестной проверки, он делит m выборок на m подмножеств, и только одна выборка берется в качестве тестовой выборки за раз, а все остальные являются обучающими выборками. Поскольку метод исключения одного из них берет только одну выборку за раз, каждая обучающая модель очень близка к модели, которую необходимо оценить, поэтому она считается более точной. Но не рекомендуется использовать его в случае слишком большого количества данных.
2. Набор данных для перекрестной проверки
cross_value_score
Параметры: (алгоритм, набор данных, результат, резюме, оценка)
-
Когда cv представляет собой целое число k, оно делится на k частей в соответствии с методом k-кратной перекрестной проверки.
-
подсчет очков: специальный метод подсчета очков, по умолчанию нет
- точность: точность
- вспоминать: вспоминать
- f1: средняя точность и полнота
In [1]:
#导入数据集
from sklearn import datasets
iris = datasets.load_iris()
# 应用svm算法
from sklearn import svm
clf = svm.SVC(kernel='linear', C=1)
#交叉验证评估
from sklearn.model_selection import cross_val_score
# 进行5折交叉验证
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
scores
3. Перекрестная проверка для разделения набора данных
k-кратная перекрестная проверка
In [8]:
from sklearn.model_selection import KFold
import numpy as np
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
# 使用这里的n_splits设置k值
kf = KFold(n_splits=2)
# 得到训练集特征X[train_index](二维集合),结果y[train_index](集合)
# 得到测试集特征X[test_index](二维集合),结果y[test_index](集合)
for train_index, test_index in kf.split(X):
print("train_index", train_index, "test_index",test_index)
train_X, train_y = X[train_index], y[train_index]
test_X, test_y = X[test_index], y[test_index]
p-кратная k-кратная перекрестная проверка
In [9]:
from sklearn.model_selection import RepeatedKFold
import numpy as np
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
# 使用这里的n_splits设置k值,n_repeats设置重复次数
kf = RepeatedKFold(n_splits=2, n_repeats=2, random_state=0)
for train_index, test_index in kf.split(X):
print('train_index', train_index, 'test_index', test_index)
оставить один
In [10]:
from sklearn.model_selection import LeaveOneOut
X = [1, 2, 3, 4]
loo = LeaveOneOut()
for train_index, test_index in loo.split(X):
print('train_index', train_index, 'test_index', test_index)
Примечание. Используйте LeavePOut(p=n) вместо LeaveOneOut(), чтобы оставить значения p.
Использованная литература:
«Машинное обучение» Чжоу Чжихуа
blog.CSDN.net/QQ_32590631…