10 мощных методов выборки данных с примерами кода

Выборка данных – важнейший метод анализа данных и машинного обучения. Он включает в себя выбор подмножества точек данных из более крупного набора данных, чтобы сделать значимые выводы или построить модели. В этой статье мы рассмотрим различные методы выборки данных и предоставим примеры кода на Python для демонстрации их реализации. Давайте погрузимся!

  1. Простая случайная выборка.
    Простая случайная выборка предполагает случайный выбор точек данных из набора данных без какой-либо систематической ошибки. Вот пример фрагмента кода на Python с использованием модуля random:
import random
def simple_random_sampling(data, sample_size):
    return random.sample(data, sample_size)
# Usage
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sample_size = 5
sample = simple_random_sampling(data, sample_size)
print(sample)
  1. Систематическая выборка.
    Систематическая выборка включает в себя выбор точек данных из набора данных через фиксированные интервалы. Вот пример фрагмента кода на Python:
def systematic_sampling(data, sample_size):
    n = len(data)
    k = n // sample_size
    indices = [i * k for i in range(sample_size)]
    return [data[i] for i in indices]
# Usage
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sample_size = 5
sample = systematic_sampling(data, sample_size)
print(sample)
  1. Стратифицированная выборка.
    Стратифицированная выборка предполагает разделение набора данных на однородные группы, называемые стратами, а затем выборку из каждой страты. Вот пример фрагмента кода на Python:
from sklearn.model_selection import train_test_split
def stratified_sampling(data, labels, sample_size):
    train_data, _, _, _ = train_test_split(data, labels, train_size=sample_size, stratify=labels)
    return train_data
# Usage
data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
labels = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
sample_size = 5
sample = stratified_sampling(data, labels, sample_size)
print(sample)
  1. Кластерная выборка.
    Кластерная выборка включает в себя разделение набора данных на кластеры и случайный выбор целых кластеров для выборки. Вот пример фрагмента кода на Python:
def cluster_sampling(data, clusters, sample_size):
    selected_clusters = random.sample(clusters, sample_size)
    samples = []
    for cluster in selected_clusters:
        samples.extend(cluster)
    return samples
# Usage
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
clusters = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
sample_size = 5
sample = cluster_sampling(data, clusters, sample_size)
print(sample)
  1. Избыточная выборка.
    Избыточная выборка предполагает увеличение представленности классов меньшинства в наборе данных для устранения дисбаланса классов. Вот пример фрагмента кода на Python с использованием библиотеки imbalanced-learn:
from imblearn.over_sampling import RandomOverSampler
def oversampling(data, labels):
    sampler = RandomOverSampler()
    return sampler.fit_resample(data, labels)
# Usage
data = [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
labels = [0, 0, 1, 1, 1]
oversampled_data, oversampled_labels = oversampling(data, labels)
print(oversampled_data)
print(oversampled_labels)
  1. Недостаточная выборка.
    Недостаточная выборка предполагает уменьшение представленности большинства классов в наборе данных для устранения дисбаланса классов. Вот пример фрагмента кода на Python с использованием библиотеки imbalanced-learn:
from imblearn.under_sampling import RandomUnderSampler
def undersampling(data, labels):
    sampler = RandomUnderSampler()
    return sampler.fit_resample(data, labels)
# Usage
data = [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
labels = [0, 0, 1, 1, 1]
undersampled_data, undersampled_labels = undersampling(data, labels)
print(undersampled_data)
print(undersampled_labels)
  1. Стратифицированная случайная выборка.
    Стратифицированная случайная выборка сочетает в себе концепции стратифицированной выборки и простой случайной выборки. Вот пример фрагмента кода на Python:
from sklearn.model_selection import train_test_split
def stratified_random_sampling(data, labels, sample_size):
    train_data, _, train_labels, _ = train_test_split(data, labels, train_size=sample_size, stratify=labels)
    return train_data, train_labels
# Usage
data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
labels = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
sample_size = 5
sample_data, sample_labels = stratified_random_sampling(data, labels, sample_size)
print(sample_data)
print(sample_labels)
  1. Выборка по квотам.
    Выборка по квотам включает в себя выбор фиксированного количества точек данных из определенных подгрупп на основе заранее определенных квот. Вот пример фрагмента кода на Python:
def quota_sampling(data, quotas):
    samples = []
    for group, quota in quotas.items():
        group_data = [d for d in data if d['group'] == group]
        samples.extend(random.sample(group_data, quota))
    return samples
# Usage
data = [
    {'id': 1, 'group': 'A'},
    {'id': 2, 'group': 'A'},
    {'id': 3, 'group': 'B'},
    {'id': 4, 'group': 'B'},
    {'id': 5, 'group': 'C'},
    {'id': 6, 'group': 'C'},
]
quotas = {'A': 2, 'B': 1, 'C': 1}
sample = quota_sampling(data, quotas)
print(sample)
  1. Последовательная выборка.
    Последовательная выборка включает в себя выбор точек данных по одной с учетом информации, полученной из предыдущих выборок. Вот пример фрагмента кода на Python:
def sequential_sampling(data, sample_size):
    samples = []
    for i in range(sample_size):
        sample = random.choice(data)
        samples.append(sample)
        data.remove(sample)
    return samples
# Usage
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sample_size = 5
sample = sequential_sampling(data, sample_size)
print(sample)
  1. Выборка по важности.
    Выборка по важности включает в себя выборку точек данных с распределением вероятностей, отличным от исходного распределения, для оценки свойств исходного распределения. Вот пример фрагмента кода на Python:
def importance_sampling(data, probabilities, sample_size):
    samples = random.choices(data, weights=probabilities, k=sample_size)
    return samples
# Usage
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
probabilities = [0.1, 0.2, 0.05, 0.25, 0.1, 0.05, 0.15, 0.03, 0.06, 0.01]
sample_size = 5
sample = importance_sampling(data, probabilities, sample_size)
print(sample)

Выборка данных играет жизненно важную роль в извлечении ценной информации и построении моделей на основе больших наборов данных. В этой статье мы рассмотрели различные методы выборки данных, включая простую случайную выборку, систематическую выборку, стратифицированную выборку, кластерную выборку, передискретизацию, недостаточную выборку, стратифицированную случайную выборку, выборку по квотам, последовательную выборку и выборку по важности. Понимая и используя эти методы, вы сможете принимать обоснованные решения при анализе и моделировании данных. Удачной выборки!