<jupyter_start><jupyter_text>https://blog.csdn.net/weixin_41712499/article/details/82875574  Normalization(正则化、规范化) and Scaler(归一化)  normalizer主要用于样本；scaler 主要用于特征 正则化的过程是将每个样本缩放到单位范数（每个样本的范数为1），如果后面要使用如二次型（点积）或者其它核方法计算两个样本之间的相似性这个方法会很有用。对于两个TF-IDF向量的l2-norm进行点积，就可以得到这两个向量的余弦相似性。Normalization主要思想是对每个样本计算其p-范数，然后对该样本中每个元素除以该范数，这样处理的结果是使得每个处理后样本的p-范数（l1-norm,l2-norm）等于1。  补充 ![image.png](attachment:image.png)<jupyter_code>import numpy as np
x = np.arange(-4, 5).reshape((3, 3))
x<jupyter_output><empty_output><jupyter_text>Normalization<jupyter_code>from sklearn.preprocessing import Normalizer
normalizer = Normalizer(norm='l2')
normalizer.fit(x)
normalizer.transform(x)
from sklearn.preprocessing import normalize<jupyter_output><empty_output><jupyter_text>最大值置为1（除以最大值）<jupyter_code>normalize(x, 'max')
normalize(x, 'max', axis=0)<jupyter_output><empty_output><jupyter_text>向量的1范数：元素绝对值和为1<jupyter_code>normalize(x, 'l1', axis=0)<jupyter_output><empty_output><jupyter_text>向量的2范数：元素平方和为1<jupyter_code>normalize(x, 'l2', axis=0)<jupyter_output><empty_output><jupyter_text>Scaler(归一化)  StandardScaler：Z-Score标准化: 均值为0，方差为1Z-Score通过（x-μ）/σ将两组或多组数据转化为无单位的Z-Score分值，使得数据标准统一化，提高了数据可比性，削弱了数据解释性。 公式为：(X-mean)/std  计算时对每个属性/每列分别进行。将数据按期属性（按列进行）减去其均值，并处以其方差。得到的结果是，对于每个属性/每列来说所有数据都聚集在0附近，方差为1。实现时，有两种不同的方式： 使用sklearn.preprocessing.StandardScaler类，使用该类的好处在于可以保存训练集中的参数（均值、方差）直接使用其对象转换测试集数据。<jupyter_code>x
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler().fit(x)
scaler.mean_
scaler.scale_
# 方差
scaler.var_
scaler.transform(x)<jupyter_output>/Users/luoyonggui/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py:595: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.
  warnings.warn(msg, DataConversionWarning)<jupyter_text>使用sklearn.preprocessing.scale()函数，可以直接将给定数据进行标准化。<jupyter_code>from sklearn.preprocessing import scale
scale(x)<jupyter_output>/Users/luoyonggui/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py:595: DataConversionWarning: Data with input dtype int64 was converted to float64 by the scale function.
  warnings.warn(msg, DataConversionWarning)<jupyter_text>MinMaxScaler除了上述介绍的方法之外，另一种常用的方法是将属性缩放到一个指定的最大和最小值（通常是1-0）之间，这可以通过preprocessing.MinMaxScaler类实现。使用这种方法的目的包括：1、对于方差非常小的属性可以增强其稳定性。2、维持稀疏矩阵中为0的条目。<jupyter_code>from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(x)
# 原始的每个特征值范围
scaler.data_range_
scaler.transform(x)<jupyter_output><empty_output><jupyter_text>处理时间数据  提取每个时间字段的月，日，weekday<jupyter_code>for i in date_cols:
    df2[f'{i}_day'] = df2[i].dt.day
    df2[f'{i}_month'] = df2[i].dt.month
    df2[f'{i}_weekday'] = df2[i].dt.weekday<jupyter_output><empty_output><jupyter_text>日期间隔<jupyter_code>import itertools
for s, e in itertools.combinations(date_cols, 2):
    df2[f'{e}-{s}'] = (df2[e] - df2[s]).dt.days
    num_cols.append(f'{e}-{s}')<jupyter_output><empty_output><jupyter_text>删除时间字段<jupyter_code>df2.drop(columns=date_cols, inplace=True)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1280026324448832, 'fraction_numerical': 0.025008226390259954, 'mean_word_length': 11.16, 'pattern_counts': {'":': 0, '<': 43, '<?xml version=': 0, '>': 43, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '497180', 'license': 'Apache-2.0', 'n_tokens_mistral': 1592, 'n_tokens_neox': 1656, 'n_words': 117, 'path': 'feature_engineering/data_preprocessing.ipynb', 'repo_name': 'mayi140611/mayiexamples', 'size': '3039'}