skew_dummies方法

这是实现将数据正态分布化,然后整体One-Hot化的代码

class skew_dummies(BaseEstimator, TransformerMixin):
    def __init__(self,skew=0.5):    
        self.skew = skew               # 设置偏度阈值
    
    def fit(self,X,y=None):
        return self
    
    def transform(self,X):
        # pandas select_dtypes方法挑选出目标类型的列
        # 这里挑出所有数值类型的数据,select_dtypes返回的是一个DataFrame
        X_numeric=X.select_dtypes(exclude=["object"])
        # 使用apply方法在lambda运算时传入的x都是series,计算出每个特征下的偏度,返回的结果是一个Series
        skewness = X_numeric.apply(lambda x: skew(x))
        # abs(skewness) >= self.skew是根据Series支持boolean索引的原理.然后用index拿到skewness的索引(因为skewness是Series,索引实际上就是列标签)
        skewness_features = skewness[abs(skewness) >= self.skew].index
        # 进行正态分布化
        X[skewness_features] = np.log1p(X[skewness_features])
        # 对整个X数据集进行One Hot编码
        X = pd.get_dummies(X)
        return X
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容