Машинное обучение — выбор модели — перекрестная проверка

искусственный интеллект

Это 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…