【大数据分析】MLlib:线性回归实例


现在使用MLlib的API实现下载房屋数据集,准备数据,拟合线性回归模型,使用模型预测示例目标值的过程。

分析和准备数据

从在线存储库下载房屋数据集(housing.data)(GitHub),并使用以下代码加载数据:

val housingLines = sc.textFile("first-edition/ch07/housing.data", 6)
val housingVals = housingLines.map(x => Vectors.dense(x.split(",").map(_.trim().toDouble)))

为housingLines RDD使用了6个分区,但是可以根据集群环境选择其他值。现在已将数据解析并作为Vector对象使用。

分析数据分布

要了解数据,可以先对它进行汇总,可以从相应的RowMatrix对象获取该值:

val housingMat = new RowMatrix(housingVals)
val housingStats = housingMat.computeColumnSummaryStatistics()
housingStats.min

或者可以使用Statistics对象达到目的:

import org.apache.spark.mllib.stat.Statistics
val housingStats=Statistics.colStats(housingVals)

然后可以使用获取的MultivariateStatisticalSummary对象来检查矩阵每列中的平均值(mean)、最大值(max)和最小值(min),使用normL1和normL2方法获取每个列的L1范数和L2范数,使用variance方法获得每列的方差。
方差:是数据离散程度的度量,等于所有值与它们的平均值的平方差的均值。
标准差:是方差的二次方根。
协方差:是衡量两个变量相关的程度。

分析列余弦相似性

val housingColSims = housingMat.columnSimilarities()
//UTILITY METHOD FOR PRETTY-PRINTING MATRICES
def printMat(mat:BM[Double]) = {
   
   print("            ")
   for(j <- 0 to mat.cols-1)
   		print("%-10d".format(j));
   println
   for(i <- 0 to mat.rows-1) {
    
	   	print("%-6d".format(i)); 
   		for(j <- 0 to mat.cols-1) 
   			print(" %+9.3f".format(mat(i, j))); 
   println
   }
}
printMat(toBreezeD(housingColSims))
/* SHOULD GIVE:
            0         1         2         3         4         5         6         7         8         9         10        11        12        13
0         +0,000    +0,004    +0,527    +0,052    +0,459    +0,363    +0,482    +0,169    +0,675    +0,563    +0,416    +0,288    +0,544    +0,224
1         +0,000    +0,000    +0,122    +0,078    +0,334    +0,467    +0,211    +0,673    +0,135    +0,297    +0,394    +0,464    +0,200    +0,528
2         +0,000    +0,000    +0,000    +0,256    +0,915    +0,824    +0,916    +0,565    +0,840    +0,931    +0,869    +0,779    +0,897    +0,693
3         +0,000    +0,000    +0,000    +0,000    +0,275    +0,271    +0,275    +0,184    +0,190    +0,230    +0,248    +0,266    +0,204    +0,307
4         +0,000    +0,000    +0,000    +0,000    +0,000    +0,966    +0,962    +0,780    +0,808    +0,957    +0,977    +0,929    +0,912    +0,873
5         +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,909    +0,880    +0,719    +0,906    +0,982    +0,966    +0,832    +0,949
6         +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,672    +0,801    +0,929    +0,930    +0,871    +0,918    +0,803
7         +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,485    +0,710    +0,856    +0,882    +0,644    +0,856
8         +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,917    +0,771    +0,642    +0,806    +0,588
9         +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,939    +0,854    +0,907    +0,789
10        +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,957    +0,887    +0,897
11        +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,000    +0,799    +0,928
12        +0,000    +0,000    +0,000    +0,000    +0
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值