Защо е важно да изберете внимателно техника за вземане на проби в машинното обучение?

Извадката е съществена част от процеса на машинно обучение. В тази статия ще проучим значението на вземането на проби в машинното обучение и как то може да повлияе на точността и ефективността на модел на машинно обучение.

Алгоритмите за машинно обучение разчитат на данни, за да учат и правят прогнози. В повечето случаи количеството налични данни за обучение на модел за машинно обучение е огромно и е невъзможно да се използват всички за обучение. Тук се намесва извадката. Извадката е процес на избиране на представителна подгрупа от данни от по-големия набор от данни, която да се използва за обучение на модела за машинно обучение.

Има няколко причини, поради които вземането на проби е важно в машинното обучение:

Извадката ни позволява да обучим модела за машинно обучение с управляемо количество данни. Както бе споменато по-рано, количеството налични данни за обучение на модели за машинно обучение често е огромно и използването на всички тях може да бъде скъпо от изчислителна гледна точка и отнема много време. Извадката ни позволява да изберем представителна подгрупа от данни, която е достатъчно голяма, за да обучи модела ефективно, но достатъчно малка, за да бъде управляема.

Извадката може да подобри производителността на модела за машинно обучение. Една добре подбрана извадка може да осигури на модела по-балансирано и разнообразно представяне на данните, което може да подобри способността му да обобщава към нови данни. Това може да доведе до по-точни прогнози и по-добро цялостно представяне на модела.

Вземането на проби може да намали шансовете за прекомерно оборудване. Пренастройването е често срещан проблем при машинното обучение, където моделът научава основните модели в данните за обучение твърде добре и не успява да обобщи към нови данни. Това може да доведе до лоша производителност на невидяни данни. Вземането на проби може да помогне за предотвратяване на пренастройването, като предостави на модела по-разнообразна и представителна извадка от данни.

Извадката може да ни помогне да се справим с небалансирани набори от данни. Небалансираните набори от данни са тези, в които данните не са равномерно разпределени в различни класове. Например, в набор от данни за отлив на клиенти, броят на клиентите, които са се оттеглили, може да бъде значително по-малък от тези, които не са се оттеглили. В такива случаи моделът може да бъде предубеден към класата на мнозинството, което води до лошо представяне на класата на малцинството. Вземането на проби може да ни помогне да балансираме набора от данни и да подобрим производителността на модела в малцинствения клас.

Има няколко различни техники за вземане на проби, които могат да се използват в машинното обучение, включително произволно вземане на проби, стратифицирано вземане на проби и вземане на клъстерни проби. Изборът на техника за вземане на проби ще зависи от специфичните характеристики на данните и целите на модела за машинно обучение.

Някои примери за статистически техники за мащабиране на вашата извадка

Случайна извадка

В статистиката произволната извадка е техника за извадка, при която всеки член на популацията има равен и независим шанс да бъде избран за извадката. Това гарантира, че извадката е представителна за популацията и позволява да се направят валидни изводи за популацията въз основа на данните от извадката.

Случайната извадка е важна концепция в статистиката, тъй като позволява на изследователите да изучават представителна подгрупа от популацията, а не цялата популация. Това често е по-практично и рентабилно от изучаването на цялото население.

За да приложат произволна извадка, изследователите обикновено използват генератор на произволни числа, за да изберат членове на популацията за извадката. Това гарантира, че всеки член на населението има равен шанс да бъде избран.

Случайното вземане на проби се използва широко в различни области, включително пазарни проучвания, обществено здраве и социални науки. Това е основен инструмент за гарантиране на валидността и надеждността на резултатите от изследванията.

Точкови оценки на параметрите на населението

При дадена крайна съвкупност N, средната стойност и дисперсията на оценителя на средната стойност се дават заедно от:

Освен това оценителят на пропорцията също се коригира, когато се изчислят средната стойност и дисперсията на оценителя на пропорцията:

Оценка на параметрите на популацията чрез доверителен интервал

За средната стойност първо изчисляваме нейната граница на грешка, след което ще се опитаме да оформим нашата статистика в доверителния интервал, знаейки, че нашата статистика следва Z разпределение (центрирано намалено по Гаус).

В този случай този доверителен интервал се определя от:

За пропорцията процедираме по същия начин с този доверителен интервал, даден от:

Изчисляване на произволната извадка в Python

Пример за техниката на произволна извадка в машинното обучение би бил избирането на подмножество от данни от по-големия набор от данни на случаен принцип, без конкретни критерии. Например, ако имаме набор от данни от 1000 записа на клиенти, можем да използваме техниката на произволна извадка, за да изберем произволно подмножество от 100 записа за обучение на модела за машинно обучение.

За да реализираме произволна извадка, можем да използваме функцията random.sample() в Python. Тази функция приема два аргумента: набора от данни и броя на записите, които искаме да изберем. Например, следният код избира произволна извадка от 100 записа от набора от данни:

import random

# Select a random sample of 100 records
sample = random.sample(dataset, 100)

Техниката за произволно вземане на проби е проста и лесна за прилагане, но може не винаги да дава най-добри резултати. Извадката, избрана с помощта на тази техника, може да не е представителна за целия набор от данни, което може да повлияе на точността и производителността на модела за машинно обучение.

При по-специфична употреба можем да използваме произволна извадка, за да разделим набор от данни на набор за обучение и тестов набор в Python, използвайки библиотеката scikit-learn:

# Import the necessary libraries
from sklearn.model_selection import train_test_split

# Load the dataset
data = np.loadtxt('dataset.txt')

# Split the data into a training set and a test set
train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)

Стратифицирана извадка

Стратифицираната извадка е техника за извадка, при която популацията се разделя на различни подгрупи или слоеве въз основа на споделени характеристики. След това се избира извадка от всяка страта, като се гарантира, че извадката е представителна за цялата популация.

Целта на стратифицираната извадка е да се намали отклонението и да се подобри точността на извадката. Чрез разделяне на популацията на слоеве и избиране на извадка от всяка страта, можем да гарантираме, че извадката е по-представителна за популацията и че всяка подгрупа е адекватно представена в извадката.

Например, ако изучаваме ефектите на ново лекарство върху кръвното налягане, може да разделим населението по възраст и пол. След това бихме избрали извадка от всяка страта, като извадка от мъже и жени във всяка възрастова група. Това гарантира, че извадката е представителна за цялата популация и намалява шансовете за отклонение.

Стратифицираната извадка обикновено се използва в научни изследвания, анкети и други усилия за събиране на данни. Това е важен инструмент за гарантиране на валидността и надеждността на резултатите от изследванията.

Точкови оценки на параметрите на населението

На първо място, ние определяме числата за страта от извадката и съвкупността, като отбелязваме, че:

След това имайте предвид, че методът се извършва процедурно, както следва:
- Изчислете параметъра на всяка подизвадка спрямо всяка страта
- Приложете стратифицирания оценител, свързан с този параметър

Средната стойност на стратифицирания оценител и неговата дисперсия се дават по формулите:

Няма да пропуснем да изчислим стратифицираната оценка на пропорцията, която не се различава много от стратифицираната оценка на средната:

Оценка на параметрите на популацията чрез доверителен интервал

Както е дефинирано в предишния раздел, определянето на доверителния интервал зависи от изчисляването на границата на грешка.
Така получаваме съответно за средната стойност и пропорцията един и същ доверителен интервал.

Изчисляване на стратифицираната извадка в Python

За да извършите стратифицирана извадка в Python, можете да използвате библиотеката sklearn. Ето пример как да го направите:

from sklearn.model_selection import StratifiedShuffleSplit

# create the data
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# create the labels
labels = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

# create the stratified shuffle split object
stratified_shuffle_split = StratifiedShuffleSplit(n_splits=1, test_size=0.5)

# split the data into train and test sets
for train_index, test_index in stratified_shuffle_split.split(data, labels):
    X_train, X_test = data[train_index], data[test_index]
    y_train, y_test = labels[train_index], labels[test_index]

# print the train and test sets
print(X_train, y_train)
print(X_test, y_test)

Това ще създаде стратифициран разделен обект за разбъркване, който произволно ще раздели данните на два набора: набор за обучение и набор за тестване. Разделянето ще бъде стратифицирано, което означава, че съотношението на етикетите в двата набора ще бъде същото като съотношението на етикетите в оригиналните данни.

В примера по-горе данните са разделени на два набора със съотношение 50/50. Наборът за обучение ще има 5 елемента с етикет 1 и 5 елемента с етикет 2, а тестовият набор ще има същото съотношение на етикети.

Можете да регулирате параметъра test_size, за да промените съотношението на разделянето. Например, настройката му на 0,8 ще създаде обучителен набор с 80% от данните и тестов набор с 20% от данните.

Процедура за оптимално и пропорционално разпределение на стратифицирана проба

Пропорционалното разпределение и оптималното разпределение са два метода за определяне на размера на извадката за стратифицирана извадка.

Пропорционалното разпределение е прост метод за определяне на размера на извадката за всяка страта (подгрупа) в стратифицирана извадка. Това включва разделяне на общия размер на извадката на броя на стратите и след това разпределяне на равен брой проби за всяка страта. Например, ако имате общ размер на извадката от 100 и 5 страти, бихте разпределили 20 проби за всяка страта. Този метод гарантира, че всяка страта е представена в извадката пропорционално на нейния размер в популацията.

Оптималното разпределение е по-сложен метод за определяне на размера на извадката за всяка страта в стратифицирана извадка. Това включва изчисляване на размера на извадката за всяка страта въз основа на прецизността и нивото на достоверност, желани за общата извадка. Целта на оптималното разпределение е да се сведе до минимум общият размер на извадката, като същевременно се постигне желаната прецизност и ниво на увереност. Този метод може да доведе до неравни размери на извадката за различните слоеве, но може да бъде по-ефективен от пропорционалното разпределение, тъй като включва само необходимия брой проби във всяка страта, за да се постигне желаната точност и ниво на надеждност.

Като цяло пропорционалното разпределение е прост и лесен за прилагане метод за стратифицирана извадка, но може да не винаги е най-ефективният метод. Оптималното разпределение е по-сложен метод, но може да бъде по-ефективен и да осигури по-точни резултати.

Сравнение на ефективността между различни техники за извадка

Функция на вероятността

Има няколко начина за сравняване на ефективността на различните техники за вземане на проби. Един от начините е да се оцени качеството на пробите, генерирани от всяка техника, като се използва метрика като логаритмична вероятност или объркване. Това може да ви даде представа колко добре всяка техника е в състояние да улови основното разпределение на данните.

Друг начин за сравняване на ефективността на различните техники за вземане на проби е да ги използвате за генериране на проби и след това да ги оцените качествено. Това може да включва визуално изследване на пробите, слушане на аудио проби или изпробване на проби в задача надолу по веригата, за да видите колко добре се представят.

Освен това можете да сравните изчислителната ефективност на различни техники за вземане на проби, като измерите колко време отнема генерирането на даден брой проби. Това може да бъде полезно, ако работите с големи набори от данни и се нуждаете от техника за вземане на проби, която може да генерира проби бързо.

Като цяло, най-добрият начин за сравняване на ефективността на различни техники за вземане на проби ще зависи от вашите конкретни цели и естеството на данните, с които работите.

За да сравните ефективността на различни техники за вземане на проби, използвайки вероятност в Python, ще трябва да внедрите техниките за вземане на проби, които искате да сравните, и след това да проведете експерименти, за да оцените тяхната ефективност. За да направите това, ще трябва да дефинирате функция на вероятността, която измерва качеството на пробите, произведени от всяка техника, и след това да използвате тази функция, за да оцените ефективността на всяка техника върху набор от тестови данни. След това можете да сравните резултатите от тези оценки, за да определите коя техника се представя най-добре според мярката за вероятност.

Ето пример за това как можете да приложите това в Python:

# Define a likelihood function that takes a sample and returns a score
def likelihood(sample):
  # Calculate the likelihood of the sample using a Gaussian distribution
  mean = 0
  stddev = 1
  likelihood = 1 / (stddev * math.sqrt(2 * math.pi)) * math.exp(-0.5 * (sample - mean) ** 2 / stddev ** 2)
  return likelihood

# Define a function that generates samples using a given sampling technique
def sample_using_technique(technique, num_samples):
  # Initialize the Markov chain with a random sample
  sample = random.random()
  
  # Run the Markov chain for the specified number of iterations
  samples = []
  for i in range(num_samples):
    # Generate a new sample using the Markov chain transition probability
    new_sample = sample + random.gauss(0, 0.5)
    
    # Accept the new sample with a certain probability
    accept_prob = min(1, likelihood(new_sample) / likelihood(sample))
    if random.random() < accept_prob:
      sample = new_sample
      
    # Store the current sample
    samples.append(sample)
  
  return samples

# Define a function that evaluates the performance of a sampling technique
# using the likelihood function
def evaluate_technique(technique):
  # Generate samples using the specified technique
  samples = sample_using_technique(technique)
  
  # Evaluate the performance of the technique using the likelihood function
  scores = [likelihood(sample) for sample in samples]
  
  # Return the average score
  return sum(scores) / len(scores)

# Define a list of sampling techniques to compare
techniques = [technique1, technique2, technique3, ...]

# Evaluate the performance of each technique
performances = [evaluate_technique(technique) for technique in techniques]

# Print the results
for i, technique in enumerate(techniques):
  print(f"Technique {technique.name}: performance = {performances[i]}")

Имайте предвид, че това е само прост пример за това как можете да сравните ефективността на различни техники за вземане на проби, използвайки вероятност в Python. На практика може да се наложи да дефинирате по-сложни функции на вероятността и да използвате по-сложни методи за оценка и сравняване на ефективността на различните техники.

Формула за MSE (средна квадратична грешка)

Средната квадратична грешка (MSE) е мярка за разликата между два комплекта проби. Обикновено се използва за оценка на ефективността на техника за вземане на проби чрез сравняване на пробите, произведени от техниката, с набор от референтни проби.

За да изчислите MSE в Python, ще трябва да дефинирате функция, която приема два набора от проби като вход и връща MSE. Тази функция обикновено претърсва извадките във всеки набор, изчислява разликата между съответните извадки във всеки набор, повдига разликите на квадрат и след това взема средната стойност на разликите на квадрат.

Ето пример за това как можете да приложите това в Python:

# Define a function that calculates the mean squared error between two sets of samples
def mse(samples1, samples2):
  # Calculate the squared difference between corresponding samples
  squared_differences = [(s1 - s2) ** 2 for (s1, s2) in zip(samples1, samples2)]
  
  # Return the average of the squared differences
  return sum(squared_differences) / len(squared_differences)

# Define a set of reference samples
reference_samples = [0.1, 0.2, 0.3, ...]

# Generate samples using the technique to be evaluated
technique_samples = sample_using_technique(technique, num_samples)

# Calculate the MSE between the reference samples and the technique's samples
mse_value = mse(reference_samples, technique_samples)

# Print the MSE value
print(f"MSE = {mse_value}")

Отново имайте предвид, че това е само прост пример за това как можете да използвате MSE, за да оцените производителността на техника за вземане на проби в Python. На практика може да се наложи да дефинирате по-сложни функции и да използвате по-сложни методи за сравняване на пробите, получени чрез различни техники за вземане на проби. Конкретните детайли на внедряването ще зависят от проблема, който се опитвате да разрешите, и свойствата на данните, с които работите.

Заключение

В заключение, вземането на проби е решаваща техника в машинното обучение, тъй като позволява на алгоритмите ефективно да изследват пространството от възможни решения и да намират добри решения на сложни проблеми. Различните техники за вземане на проби имат различни силни и слаби страни и изборът на правилната техника за даден проблем може да бъде предизвикателство. Сравняването на ефективността на различни техники за вземане на проби може да бъде трудно, тъй като има много различни фактори, които могат да повлияят на ефективността на техниката. Въпреки това използването на показатели като вероятност и средна квадратна грешка може да помогне за оценка на качеството на пробите, произведени от дадена техника, и да сравни ефективността на различни техники. Като цяло, разбирането и ефективното прилагане на техниките за вземане на проби е важно умение за всеки, който работи в областта на машинното обучение.