特征的转换_03-标准化,归一化,正则化

本文介绍了特征转换中的三个重要概念:1. 标准化(StandardScaler)用于将数据转化为均值为0,方差为1的正态分布;2. 归一化,包括MinMaxScaler和MaxAbsScaler,分别将数据缩放到0-1和-1到1区间;3. 正则化(Normalizer)通过范数规则化避免过拟合问题。文中提供了Spark MLlib和Spark ML中实现这些转换的代码示例。
摘要由CSDN通过智能技术生成

1.标准化StandardScaler

1.1 概述

我们知道,在训练模型的时候,要输入features,即因子,也叫特征。对于同一个特征,不同的样本中的取值可能会相差非常大,一些异常小或异常大的数据会误导模型的正确训练;另外,如果数据的分布很分散也会影响训练结果。以上两种方式都体现在方差会非常大。此时,我们可以将特征中的值进行标准差标准化,即转换为均值为0,方差为1的正态分布。所以在训练模型之前,一定要对特征的数据分布进行探索,并考虑是否有必要将数据进行标准化。

标准差标准化也叫作Z-zero标准化,经过处理的数据会符合标准正态分布,即均值为0,方差为1。转化函数为:

x* = (x - μ) /σ

公式中标准化后的值x* 等于 原来的值x先减去原数据的均值μ,然后在除以原数据的标准差σ。最后得到的新的数据的均值就是0,方差/标准差为1.

注:是否要进行标准化,要根据具体实验定。如果特征非常稀疏,并且有大量的0(现实应用中很多特征都具有这个特点),Z-score 标准化的过程几乎就是一个除0的过程,结果不可预料。

1.2 spark代码

1.2.1 基于RDD
SparkMLLIB提供了基于RDD的函数接口:

1.参数的设置
在mllib封装的StandardScaler方法中需要设置两个参数:
(1)withMean: 这是一个布尔类型的参数,可输入true,表示转化为均值为0,要注意的是它输出的结果是密集的,所以输入的数据不能是稀疏的,否则会报错哒。另外也可以设置false,表示对均值不做变化,如果不设置,默认是false.
(2)withStd:这也是一个布尔类型的参数,输入true表示将数据规模化到方差为1,默认情况下为true.

2.用法
mllib在StandardScaler中提供了一份fit 的方法,输入的参数是RDD[Vector].这个方法会对数据进行描述性统计,并输出一个模型,用这个模型来讲输入数据转换成方差为1或/和均值为0的特征数据(均值是否需要变成0是可以自己调整参数决定的)
另外,模型的输入也可以是一个Vector,无论输入哪种格式,计算后的结果会都会输出一个RDD[Vector]

3.代码与方法解读

package com.mllib.featureextraction

import org.apache.spark.mllib.feature.StandardScaler
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.{SparkContext, SparkConf}

/**
  * Created by wangcao on 2016/7/29.
  */
object StandardScaler {
   

  def main (args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("StandardScaler").setMaster("local")
    val sc = new SparkContext(conf)

    val data = MLUtils.loadLibSVMFile(sc, "C:\\Users\\Administrator\\Downloads\\sample_libsvm_data.txt")

    //1.不设置任何参数,自动是默认的withMean=False and withStd=True
    //注:new StandardScaler().只有一个fit的方法,fit里可传入一个Vector 或 RDD[Vector]
    //使用fit生成的是一个StandardScalerModel
    val scaler1 = new StandardScaler().fit(data.map(x => x.features))

    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值