处理数据-处理数据处理算法。
而且我不得不每天与最多样化的人一起工作,因此我决定列出一系列出版物中最受欢迎的一个。
本文重点介绍用于处理数据的最常见采样技术。
简单随机抽样
假设您要进行选择,其中每个元素被选择的可能性相等。
下面我们从数据集中选择100个这样的元素。
sample_df = df.sample(100)
分层抽样
假设我们需要估算选举中每位候选人的平均票数。 投票在三个城市进行:
一百万工人居住在A市
200万艺术家住在B城市
300万老年人居住在C市
如果我们尝试在整个人口中抽取同样可能的60个人样本,那么相对于不同城市,他们肯定会不均衡,因此存在偏差,这将导致预测中的严重错误。
如果我们分别从城市A , B和C分别抽取10、20和30个人作为样本,那么误差将很小。
在Python中,可以这样完成:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.25)
储层采样
我喜欢这个问题的表述:
假设您有一堆未知大小的元素,只能重复一次。
创建一种算法,从流中随机选择一个元素,就好像可以等概率选择任何元素一样。
怎么做?
假设我们需要从一个无限流中选择5个对象,以便可以平等地选择流中的每个元素。
import random def generator(max): number = 1 while number < max: number += 1 yield number
从数学上讲,有可能证明每个元素的选择可能性均等。
怎么了
在数学方面,最好尝试以一种特殊情况开始解决方案。
因此,让我们看一下由3个元素组成的流,我们只需要选择2个即可。
我们看到第一个元素,将其保存在列表中,因为储罐中仍有空间。 我们看到第二个元素,将其保存在列表中,因为储罐中仍有空间。
我们看到第三个要素。 在这里变得更加有趣。 我们将以2/3的概率保存第三个元素。
现在让我们看一下保存第一个元素的最终可能性:
第一个元素从储层中移位的概率等于要选择的第三个元素的概率,乘以是将被选择用于移位的两个元素中第一个元素的概率。 那就是:
2/3 * 1/2 = 1/3
也就是说,将保存第一个元素的最终概率:
1-1/3 = 2/3
可以将相同的逻辑应用于第二个元素,将来随着存储量的增加将其扩展到更多个元素。
也就是说,每个元素将以2/3的概率保存,或者通常情况下为k / n 。
随机欠采样和过采样
来源生活中经常会出现不平衡的数据集。
这种情况下广泛使用的方法称为重采样(有时在俄语翻译中称为“重采样”-大约翻译) 。 它的本质在于从太大的集合中删除元素(欠采样)和/或在不足够大的集合中添加更多元素(过采样)。
让我们从创建一些不平衡的集合开始。
from sklearn.datasets import make_classification X, y = make_classification( n_classes=2, class_sep=1.5, weights=[0.9, 0.1], n_informative=3, n_redundant=1, flip_y=0, n_features=20, n_clusters_per_class=1, n_samples=100, random_state=10 ) X = pd.DataFrame(X) X['target'] = y
现在,我们可以像这样执行随机欠采样和过采样:
num_0 = len(X[X['target']==0]) num_1 = len(X[X['target']==1]) print(num_0,num_1)
使用不平衡学习进行Andersamping和过采样
不平衡学习 (imblearn)是一个python库,用于处理不平衡数据集的问题。
它包含几种不同的重采样方法。
一个 使用Tomek链接进行Andersampling:
提供的一种方法称为Tomek链接。 在这种情况下,“链接”是来自附近不同类别的元素对。
使用该算法,我们最终将从更大的集合中删除对元素,这将使分类器更好地工作。
来源
from imblearn.under_sampling import TomekLinks tl = TomekLinks(return_indices=True, ratio='majority') X_tl, y_tl, id_tl = tl.fit_sample(X, y)
b。 使用SMOTE进行过采样:
在SMOTE(综合少数群体过采样方法)中,我们在较小的集中创建与现有元素非常接近的元素。
来源 from imblearn.over_sampling import SMOTE smote = SMOTE(ratio='minority') X_sm, y_sm = smote.fit_sample(X, y)
但是在imblearn中,还有其他欠采样方式(集群质心,NearMiss等)和过采样方式(ADASYN和bSMOTE),它们也可能有用。
结论
算法是数据科学的血液。
采样是处理数据中最重要的领域之一,上面仅给出了简要的概述。
精心选择的抽样策略可以使整个项目顺利进行。 选择不当会导致错误的结果。 因此,必须明智地做出选择。