SparkML机器学习之特征工程(二)特征转化(Binarizer、StandardScaler、MaxAbsScaler、Normalizer、N

  • 时间:
  • 浏览:9

假设淘宝现在有个需求,我得根据年龄来进行物品推荐,把60 以上的人分为老年,60 以下分为非老年人,没有 亲戚亲戚让你要们 根据二值化还要很简单的把60 以上的定为1,60 以下的定为0。原本就方便亲戚亲戚让你要们 后续的推荐了。Binarizer统统我根据阈值进行二值化,大于阈值的为1.0,小于等于阈值的为0.0

输出结果:

运行结果为:

为哪几个要有正则化?统统我为了处里过拟合。来看一下正则化是为社 计算的:

为哪几个数据还要归一化?以房价预测为案例,房价(y)通常与离市中心距离(x1)、面积(x2)、楼层(x3)有关,设y=ax1+bx2+cx3,没有 abc统统我亲戚亲戚让你要们 还要重点处里的参数。或者有个现象图片,面积一般数值是比较大的,60 平甚至更多,而距离一般是否是几公里而已,b参数假使 一些变化都能对房价产生巨大影响,而a的变化对房价的影响相对就小统统了。显然这会影响最终的准确性,毕竟距离原本个非常大的影响因素啊。 统统, 还要使用特性的归一化, 取值跨度大的特性数据, 亲戚亲戚让你要们 浓缩一下, 跨度小的括展一下, 使得亲戚让你要们 的跨度尽量统一

归一化统统我将所有特性值都等比地缩小到0-1或者-1到1之间的区间内。其目的是为了使特性是否是相同的规模中。

有完后 亲戚亲戚让你要们 你要给定分类标准,还要让spark自动给亲戚亲戚让你要们 分箱。

输出结果为:

为哪几个要转化数据呢,统统我要让它成为有效的特性,或者原始数据是统统脏数据无用数据的。常用的最好的法子是标准化,归一化,特性的离散化等等。比如我输入的数据是一段话,我得把它切分为八个 个单词进行分析,这统统我四种 转化。

输出结果为:

当亲戚亲戚让你要们 的输入数据为文本(一段话)的完后 ,亲戚亲戚让你要们 会想把亲戚让你要们 切分为单词再进行数据处里,这完后 就要用到Tokenizer类了。

输出结果为:

输出结果为:

运行结果:

输出结果为:

有完后 要对特性值进行一些多项式的转化,比如平方啊,三次方啊等等,那就用到了PolynomialExpansion。

对于同八个 特性,不同的样本中的取值或者会相差非常大,一些异常小或异常大的数据会误导模型的正确训练;另外,或者数据的分布很分散也会影响训练结果。以上四种 最好的法子都体现在方差会非常大。此时,亲戚亲戚让你要们 还要将特性中的值进行标准差标准化,即转换为均值为0,方差为1的正态分布。或者特性非常稀疏,或者有几滴 的0(现实应用中统统特性都具有这俩 特点),Z-score 标准化的过程几乎统统我八个 除0的过程,结果不可预料。统统在训练模型完后 ,一定要对特性的数据分布进行探索,并考虑是否是有必要将数据进行标准化。基于特性值的均值(mean)和标准差(standard deviation)进行数据的标准化。它的计算公式为:标准化数据=(原数据-均值)/标准差。标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

输出结果:

亲戚亲戚让你要们 都很喜欢sql一段话,简单好用又熟悉,没有 Spark ML很人性化的为亲戚亲戚让你要们 提供了SQLTransformer类,使得亲戚亲戚让你要们 能用亲戚亲戚让你要们 熟悉的SQL来做特性转化。它支持SparkSql中的所有select选折 一段话,sum(),count(),group by,order by等等还要用!形如"SELECT ...FROM __THIS__"。'__THIS__'代表输入数据的基础表。

N-Gram认为语言中每个单词只与其前面长度 N-1 的上下文有关。主要分为bigram和trigram,bigram假设下八个 词的出現依赖它前面的八个 词,trigram假设下八个 词的出現依赖它前面的八个 词。在SparkML中用NGram类实现,setN(2)为bigram,setN(3)为trigram。

现在淘宝的需求变了,亲戚让你要们 人太好 把人分为60 以上和60 以下太不精准了,应该分为20岁以下,20-60 岁,60 -40岁,36-60 岁,60 以上,没有 就得用到数值离散化的处里最好的法子了。离散化统统我把特性进行适当的离散处里,比如上方所说的年龄是个连续的特性,或者我把它分为不同的年龄阶段统统我把它离散化了,原本更能助 亲戚亲戚让你要们 分析用户行为进行精准推荐。Bucketizer能方便的将一堆数据分成不同的区间。