数据分析 数据预处理

本文介绍了数据预处理的几种方法,包括log转换右偏分布数据、使用MyStandardScaler进行归一化以及多线程处理大数据。还讨论了内存管理、特征降维和离散化策略。在模型训练部分,提到了使用贝叶斯优化的hyperopt搜索最优参数,而非GridSearchCV,以适应大数据场景。
摘要由CSDN通过智能技术生成

1. 数据预处理

1. log(1+x)处理右偏分布数据

  1. log transformation 处理label的right-skewed右偏分布数据,使得一些很大值偏向中心,接近正态分布。但自变量是否需要log处理需要看情况…。参考链接
    ln ⁡ Y i = β 1 + β 2 ln ⁡ X i + ϵ i \ln{Y_i} = \beta_1 + \beta_2 \ln{X_i} + \epsilon_i lnYi=β1+β2lnXi+ϵi
  2. 得到的label也可以进行归一化处理
class MyStandardScaler(object):
    def __init__(self, identity=False, epsilon=1e-8):
        self.identity = identity
        self.mean_ = 0.
        self.scale_ = 1.
        self.epsilon = epsilon

    def fit(self, X):
        if not self.identity:
            self.mean_ = np.mean(X, axis=0)
            self.scale_ = np.std(X, axis=0)
        else:
            self.epsilon = 0.

    def fit_transform(self, X):
        self.fit(X)
        return self.transform(X)

    def transform(self, X):
        return (X - self.mean_) / (self.scale_ + self.epsilon)

    def inverse_transform(self, X):
        return X * (self.scale_ + self.epsilon) + self.mean_

2. 分片+Pool多线程处理数据

  1. 使用Pool进行多线程处理,先对数据分片,然后用map对所有片同时处理。
def parallelize_df_func(df, func, num_partitions=NUM_PARTITIONS, n_jobs=N_JOBS):
    df_split = np.array_split(df, num_partitions)
    pool = Pool(n_jobs)
    df = pd.concat(pool.map(func, df_split))
    pool.close()
    pool.join()
    return df

3. 内存和速度

  1. 使用gc.collect清除释放内存,避免多次主动调用该函数,待了解。
gc.collect()
  1. 使用hash trick对输入空间的特征进行降维,与kernel trick实现输入到输出是线性映射的作用相反,待了解。PCA由于数据量实在太大而不太适合使用。

4. 离散化数据,热编码

  1. label encoder, label binarizer, onehot encoder.
  2. label encoder 处理成连续数字,label binarizer与onehot encoder区别在于 前者处理单列,后者可以处理多列,另外后者返回sparse matrix,如果label是多支label,可以用MultiLabelBinarizer.

2. 训练模型

  1. 使用贝叶斯优化hyperopt进行搜索最优参数。GridSearchCV暴力网格搜索不适合数据量大的情况。

from hyperopt import fmin, tpe, hp
best = fmin(
    fn=lambda x: x,
    space=hp.uniform('x', 0, 1),
    algo=tpe.suggest,
    max_evals=100,
    trials=Trials())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值