二十种特征变换方法及Spark MLlib调用实例ScalaJavapython二.docx
- 文档编号:4450722
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:24
- 大小:21.10KB
二十种特征变换方法及Spark MLlib调用实例ScalaJavapython二.docx
《二十种特征变换方法及Spark MLlib调用实例ScalaJavapython二.docx》由会员分享,可在线阅读,更多相关《二十种特征变换方法及Spark MLlib调用实例ScalaJavapython二.docx(24页珍藏版)》请在冰豆网上搜索。
二十种特征变换方法及SparkMLlib调用实例ScalaJavapython二
二十种特征变换方法及SparkMLlib调用实例(Scala/Java/python)
(二)
算法介绍:
VectorIndexer解决数据集中的类别特征Vector。
它可以自动识别哪些特征是类别型的,并且将原始值转换为类别指标。
它的处理流程如下:
1.获得一个向量类型的输入以及maxCategories参数。
2.基于原始数值识别哪些特征需要被类别化,其中最多maxCategories需要被类别化。
3.对于每一个类别特征计算0-based类别指标。
4.对类别特征进行索引然后将原始值转换为指标。
索引后的类别特征可以帮助决策树等算法处理类别型特征,并得到较好结果。
在下面的例子中,我们读入一个数据集,然后使用VectorIndexer来决定哪些特征需要被作为非数值类型处理,将非数值型特征转换为他们的索引。
调用示例:
Scala:
[plain]viewplaincopy
importorg.apache.spark.ml.feature.VectorIndexer
valdata=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
valindexer=newVectorIndexer()
.setInputCol("features")
.setOutputCol("indexed")
.setMaxCategories(10)
valindexerModel=indexer.fit(data)
valcategoricalFeatures:
Set[Int]=indexerModel.categoryMaps.keys.toSet
println(s"Chose${categoricalFeatures.size}categoricalfeatures:
"+
categoricalFeatures.mkString(","))
//Createnewcolumn"indexed"withcategoricalvaluestransformedtoindices
valindexedData=indexerModel.transform(data)
indexedData.show()
Java:
[java]viewplaincopy
importjava.util.Map;
importorg.apache.spark.ml.feature.VectorIndexer;
importorg.apache.spark.ml.feature.VectorIndexerModel;
importorg.apache.spark.sql.Dataset;
importorg.apache.spark.sql.Row;
Dataset
VectorIndexerindexer=newVectorIndexer()
.setInputCol("features")
.setOutputCol("indexed")
.setMaxCategories(10);
VectorIndexerModelindexerModel=indexer.fit(data);
Map
System.out.print("Chose"+categoryMaps.size()+"categoricalfeatures:
");
for(Integerfeature:
categoryMaps.keySet()){
System.out.print(""+feature);
}
System.out.println();
//Createnewcolumn"indexed"withcategoricalvaluestransformedtoindices
Dataset
indexedData.show();
Python:
[python]viewplaincopy
frompyspark.ml.featureimportVectorIndexer
data=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
indexer=VectorIndexer(inputCol="features",outputCol="indexed",maxCategories=10)
indexerModel=indexer.fit(data)
#Createnewcolumn"indexed"withcategoricalvaluestransformedtoindices
indexedData=indexerModel.transform(data)
indexedData.show()
Normalizer(正则化)
算法介绍:
Normalizer是一个转换器,它可以将多行向量输入转化为统一的形式。
参数为p(默认值:
2)来指定正则化中使用的p-norm。
正则化操作可以使输入数据标准化并提高后期学习算法的效果。
下面的例子展示如何读入一个libsvm格式的数据,然后将每一行转换为以及形式。
调用示例:
Scala:
[plain]viewplaincopy
importorg.apache.spark.ml.feature.Normalizer
valdataFrame=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
//NormalizeeachVectorusing$L^1$norm.
valnormalizer=newNormalizer()
.setInputCol("features")
.setOutputCol("normFeatures")
.setP(1.0)
vall1NormData=normalizer.transform(dataFrame)
l1NormData.show()
//NormalizeeachVectorusing$L^\infty$norm.
vallInfNormData=normalizer.transform(dataFrame,normalizer.p->Double.PositiveInfinity)
lInfNormData.show()
Java:
[java]viewplaincopy
importorg.apache.spark.ml.feature.Normalizer;
importorg.apache.spark.sql.Dataset;
importorg.apache.spark.sql.Row;
Dataset
spark.read().format("libsvm").load("data/mllib/sample_libsvm_data.txt");
//NormalizeeachVectorusing$L^1$norm.
Normalizernormalizer=newNormalizer()
.setInputCol("features")
.setOutputCol("normFeatures")
.setP(1.0);
Dataset
l1NormData.show();
//NormalizeeachVectorusing$L^\infty$norm.
Dataset
normalizer.transform(dataFrame,normalizer.p().w(Double.POSITIVE_INFINITY));
lInfNormData.show();
Python:
[python]viewplaincopy
frompyspark.ml.featureimportNormalizer
dataFrame=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
#NormalizeeachVectorusing$L^1$norm.
normalizer=Normalizer(inputCol="features",outputCol="normFeatures",p=1.0)
l1NormData=normalizer.transform(dataFrame)
l1NormData.show()
#NormalizeeachVectorusing$L^\infty$norm.
lInfNormData=normalizer.transform(dataFrame,{normalizer.p:
float("inf")})
lInfNormData.show()
StandardScaler
算法介绍:
StandardScaler处理Vector数据,标准化每个特征使得其有统一的标准差以及(或者)均值为零。
它需要如下参数:
1.withStd:
默认值为真,使用统一标准差方式。
2.withMean:
默认为假。
此种方法将产出一个稠密输出,所以不适用于稀疏输入。
StandardScaler是一个Estimator,它可以fit数据集产生一个StandardScalerModel,用来计算汇总统计。
然后产生的模可以用来转换向量至统一的标准差以及(或者)零均值特征。
注意如果特征的标准差为零,则该特征在向量中返回的默认值为0.0。
下面的示例展示如果读入一个libsvm形式的数据以及返回有统一标准差的标准化特征。
调用示例:
Scala:
[plain]viewplaincopy
importorg.apache.spark.ml.feature.StandardScaler
valdataFrame=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
valscaler=newStandardScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures")
.setWithStd(true)
.setWithMean(false)
//ComputesummarystatisticsbyfittingtheStandardScaler.
valscalerModel=scaler.fit(dataFrame)
//Normalizeeachfeaturetohaveunitstandarddeviation.
valscaledData=scalerModel.transform(dataFrame)
scaledData.show()
Java:
[java]viewplaincopy
importorg.apache.spark.ml.feature.StandardScaler;
importorg.apache.spark.ml.feature.StandardScalerModel;
importorg.apache.spark.sql.Dataset;
importorg.apache.spark.sql.Row;
Dataset
spark.read().format("libsvm").load("data/mllib/sample_libsvm_data.txt");
StandardScalerscaler=newStandardScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures")
.setWithStd(true)
.setWithMean(false);
//ComputesummarystatisticsbyfittingtheStandardScaler
StandardScalerModelscalerModel=scaler.fit(dataFrame);
//Normalizeeachfeaturetohaveunitstandarddeviation.
Dataset
scaledData.show();
Python:
[python]viewplaincopy
frompyspark.ml.featureimportStandardScaler
dataFrame=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
scaler=StandardScaler(inputCol="features",outputCol="scaledFeatures",
withStd=True,withMean=False)
#ComputesummarystatisticsbyfittingtheStandardScaler
scalerModel=scaler.fit(dataFrame)
#Normalizeeachfeaturetohaveunitstandarddeviation.
scaledData=scalerModel.transform(dataFrame)
scaledData.show()
MinMaxScaler
算法介绍:
MinMaxScaler通过重新调节大小将Vector形式的列转换到指定的范围内,通常为[0,1],它的参数有:
1.min:
默认为0.0,为转换后所有特征的下边界。
2.max:
默认为1.0,为转换后所有特征的下边界。
MinMaxScaler计算数据集的汇总统计量,并产生一个MinMaxScalerModel。
该模型可以将独立的特征的值转换到指定的范围内。
对于特征E来说,调整后的特征值如下:
如果,则。
注意因为零值转换后可能变为非零值,所以即便为稀疏输入,输出也可能为稠密向量。
下面的示例展示如果读入一个libsvm形式的数据以及调整其特征值到[0,1]之间。
调用示例:
Scala:
[plain]viewplaincopy
importorg.apache.spark.ml.feature.MinMaxScaler
valdataFrame=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
valscaler=newMinMaxScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures")
//ComputesummarystatisticsandgenerateMinMaxScalerModel
valscalerModel=scaler.fit(dataFrame)
//rescaleeachfeaturetorange[min,max].
valscaledData=scalerModel.transform(dataFrame)
scaledData.show()
Java:
[java]viewplaincopy
importorg.apache.spark.ml.feature.MinMaxScaler;
importorg.apache.spark.ml.feature.MinMaxScalerModel;
importorg.apache.spark.sql.Dataset;
importorg.apache.spark.sql.Row;
Dataset
.read()
.format("libsvm")
.load("data/mllib/sample_libsvm_data.txt");
MinMaxScalerscaler=newMinMaxScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures");
//ComputesummarystatisticsandgenerateMinMaxScalerModel
MinMaxScalerModelscalerModel=scaler.fit(dataFrame);
//rescaleeachfeaturetorange[min,max].
Dataset
scaledData.show();
Python:
[python]viewplaincopy
frompyspark.ml.featureimportMinMaxScaler
dataFrame=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
scaler=MinMaxScaler(inputCol="features",outputCol="scaledFeatures")
#ComputesummarystatisticsandgenerateMinMaxScalerModel
scalerModel=scaler.fit(dataFrame)
#rescaleeachfeaturetorange[min,max].
scaledData=scalerModel.transform(dataFrame)
scaledData.show()
MaxAbsScaler
算法介绍:
MaxAbsScaler使用每个特征的最大值的绝对值将输入向量的特征值转换到[-1,1]之间。
因为它不会转移/集中数据,所以不会破坏数据的稀疏性。
下面的示例展示如果读入一个libsvm形式的数据以及调整其特征值到[-1,1]之间。
调用示例:
Scala:
[plain]viewplaincopy
importorg.apache.spark.ml.feature.MaxAbsScaler
valdataFrame=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
valscaler=newMaxAbsScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures")
//ComputesummarystatisticsandgenerateMaxAbsScalerModel
valscalerModel=scaler.fit(dataFrame)
//rescaleeachfeaturetorange[-1,1]
valscaledData=scalerModel.transform(dataFrame)
scaledData.show()
Java:
[java]viewplaincopy
importorg.apache.spark.ml.feature.MaxAbsScaler;
importorg.apache.spark.ml.feature.MaxAbsScalerModel;
importorg.apache.spark.sql.Dataset;
importorg.apache.spark.sql.Row;
Dataset
.read()
.format("libsvm")
.load("data/mllib/sample_libsvm_data.txt");
MaxAbsScalerscaler=newMaxAbsScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures");
//ComputesummarystatisticsandgenerateMaxAbsScalerModel
MaxAbsScalerModelscalerModel=scaler.fit(dataFrame);
//rescaleeachfeaturetorange[-1,1].
Dataset
scaledData.show();
Python:
[python]viewplaincopy
fro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二十种特征变换方法及Spark MLlib调用实例ScalaJavapython二 二十种 特征 变换 方法 Spark MLlib 调用 实例 ScalaJavapython