RDD、矩阵基础——2. RDD的统计操作
Statistics统计操作
首先读取数据,原数据:
//以空格分割,读取数据
val data_path = "file:/ipynotebook/pic_data.txt"
val data = sc.textFile(data_path).map(_.split(" "))
//里面的数据转成double类型
val data0 = data.map(f => f.map(f => f.toDouble))
//每行数组转换成Vector类型(向量)
import org.apache.spark.mllib.linalg.Vectors
val data1 =data0.map(f => Vectors.dense(f))
Mlib Statistics 是基础统计模块,针对RDD格式数据,
包括汇总统计、相关系数、分层抽样、假设检验、随机数据生成等
列统计汇总:
Statistics的colStats函数是列的统计方法
//计算每列的最大值、最小值、平均值、方差、L1范数、L2范数
import org.apache.spark.mllib.stat.Statistics
val stat1 = Statistics.colStats(data1)
stat1.max
stat1.min
stat1.mean
stat1.variance
stat1.normL1
stat1.normL2
相关系数:
//计算pearson、spearman相关系数
val corr1 = Statistics.corr(data1, "pearson")
val corr2 = Statistics.corr(data1, "spearman")
两组数据的pearson相关系数:
val x1 =sc.parallelize(Array(1.0, 2.0, 3.0, 4.0))
val y1 =sc.parallelize(Array(5.0, 6.0, 6.0, 6.0))
val corr3 = Statistics.corr(x1, y1, "pearson")
假设检验:
随机数生成:
MLUtils 用于加载、保存、处理数据
import org.apache.spark.mllib.util.MLUtils
1. 加载:
loadLibSVMFile
实例:
import org.apache.spark.mllib.util.MLUtils
val data = MLUtils.loadLibSVMFile(sc, "file:///ipynotebook/iris_libsvm.txt")
加载LIBSVM格式的数据返回RDD[RDD[LabeledPoint]格式格式的数据
LIBSVM格式:
{{{label: index1:value1 index2:value2 ... }}}
label代表标签,index1代表特征位置索引,value1代表特征
LabeledPoint格式:
(label: Double, features: Vector)
label代表标签,features代表特征向量
2. 保存:
saveAsLibSVMFile
将LabeledPoint格式数据以LIBSVM格式保存到文件
MLUtils.saveAsLibSVMFile(LabeledPoint格式RDD, "路径")
3. 添加偏置项:
appendBias
4. 计算距离:
fastSquaredDistance
快速计算向量距离,主要用于KMeans聚类算法中。
返回向量之间的平方欧氏距离
比如有两个点(a1,b1),(a2,b2),那么欧式距离平方为(a1-a2)^2 + (b1-b2)^2
5. 生成样本:
(详见SPARK MLLIB机器学习)
(1)生成KMeans的数据
generateKMeansRDD
主要用于生成KMeans的训练样本数据,格式为RDD[Array[Double]]
generateKMeansRDD(sc:SparkContext, numPoints:Int, k:Int, d:Int, r:Double, numpartions:Int = 2):RDD[Array[Double]]
sc:SparkContext
numPoints:聚类数
d:数据维度
r:初始中心分布的缩放因子
numPartitions:RDD分区数
实例:
随机生成40个样本,数据是三维的,聚类中心数是5
import org.apache.spark.mllib.util.KMeansDataGenerator
val KMeansRDD = KMeansDataGenerator.generateKMeansRDD(sc, 40, 5, 3, 1.0, 2)
也可按照MLlib分装方法进行调用,格式为:
KMeansGenerator <master> <output_dir> <num_point> <k> <d> <r> [<num_partitions>]
(2)生成线性回归的数据
generateLinearRDD
主要用于生成线性回归的训练样本数据,格式为RDD[LabeledPoint]
generateLinearRDD(sc:SparkContext, nexamples:Int, nfeatures:Int, eps:Double, nparts:Int = 2, intercept:Double = 0.0):RDD[LabeledPoint]
实例:
随机生成40个样本,数据是三维的
import org.apache.spark.mllib.util.LinearDataGenerator
val LinearRDD = LinearDataGenerator.generateLinearRDD(sc, 40, 3, 1.0, 2, 0.0)
(3)生成逻辑回归的数据
generateLogisticRDD
主要用于生成逻辑回归的训练样本数据,格式为RDD[LabeledPoint]
(4)其他数据生成
SVM、MFD样本数据
(详见SPARK MLLIB机器学习)