Каждый энтузиаст машинного обучения, когда он работает с выборкой данных, которая слишком мала, чтобы повысить точность модели, использует метод перекрестной проверки.
Метод повторной выборки с перекрестной проверкой является индикатором качества любого количества, полученного из данных. Он использует разные части данных для тестирования и обучения модели на разных итерациях. Он в основном используется в условиях, когда целью является прогнозирование, и когда нужно оценить, насколько точно прогностическая модель будет работать на практике.
Многие статистические данные, основанные на небольших выборках, дают необъективные оценки; обычно главный член систематической ошибки пропорционален 1/n, где n — размер выборки. Следовательно, среднее значение результатов, основанных на нескольких подвыборках, вероятно, более смещено, чем один результат, основанный на всех данных, по крайней мере, в той мере, в какой отдельные выборки малы. Складной нож предлагает способы установить разумные пределы уверенности в сложных ситуациях.
Техника складного ножа была разработана Морисом Кенуем (1924–1973) в 1949 году и усовершенствована в 1956 году. Джон Тьюки расширил эту технику в 1958 году и предложил название «складной нож», потому что, как и физический складной нож (компактный складной нож), это грубый и готовый инструмент, который может импровизировать решение множества проблем, даже если конкретные проблемы могут быть более эффективно решены с помощью специально разработанного инструмента.
Мы можем создать несколько выборок из исходного набора данных и рассчитать нашу статистику для каждой из выборок, а затем агрегировать их, чтобы получить общую оценку. В то время как в Bootstrap выборка выполняется с заменой, здесь мы используем повторную выборку с пропуском.
Оценка интересующей величины с помощью складного ножа — это среднее значение значений, которые вы получаете из каждой выборки складного ножа, где вы пропускаете одно наблюдение.
grades = np.array([ 98, 97, 87.4, 93, 90.5, 88.3, 88.75, 82, 89, 72]) # Leaving one observation out from grades to get the jackknife sample and store the mean grades mean_grades= [] n = len(grades) index = np.arange(n) for i in range(n): jk_sample = np.mean(grades[index != i]) mean_grades.append(jk_sample) # The jackknife estimate is the mean of the mean grades from each sample mean_grades_jk = np.mean(np.array(mean_grades)) print("Jackknife estimate of the mean = {}".format(mean_grades_jk)) Jackknife estimate of the mean = 88.595
Дисперсия оценки складного ножа в n-1 раз превышает дисперсию оценок отдельной выборки складного ножа, где n — количество наблюдений в исходной выборке.
Для расчета 95% доверительного интервала складного ножа можно использовать медиану.
# Leaving one observation out to get the jackknife sample and store the median grade median_grades = [] for i in range(n): jk_sample = grades[index != i] median_grades.append(np.median(jk_sample)) median_grades = np.array(median_grades) # Calculating jackknife estimate and it's variance jk_median_grade = np.mean(median_grades) jk_var = (n-1)*np.var(median_grades) # Assuming normality, calculate lower and upper 95% confidence intervals jk_lower_ci = jk_median_grade - 1.96*np.sqrt(jk_var) jk_upper_ci = jk_median_grade + 1.96*np.sqrt(jk_var) print("Jackknife 95% CI lower = {}, upper = {}".format(jk_lower_ci, jk_upper_ci)) Jackknife 95% CI lower = 88.14, upper = 89.61
Спасибо за прочтение!