【原】Spark之机器学习(Python版)(一)——聚类
kmeans聚类相信大家都已经很熟悉了。在Python里我们用kmeans通常调用Sklearn包(当然自己写也很简单)。那么在Spark里能不能也直接使用sklean包呢?目前来说直接使用有点困难,不过我看到spark-packages里已经有了,但还没有发布。不过没关系,PySpark里有ml包,除了ml包,还可以使用MLlib,这个在后期会写,也很方便。
首先来看一下Spark自带的例子:
from pyspark.mllib.linalg import Vectors
from pyspark.ml.clustering import KMeans
from pyspark.sql import SQLContext
from pyspark.mllib.linalg import Vectors
#导入数据
data = [(Vectors.dense([0.0, 0.0]),), (Vectors.dense([1.0, 1.0]),),(Vectors.dense([9.0, 8.0]),), (Vectors.dense([8.0, 9.0]),)]
df = sqlContext.createDataFrame(data, ["features"])
#kmeans模型
kmeans = KMeans(k=2, seed=1)
model = kmeans.fit(df)
#簇心数量
centers = model.clusterCenters()
len(centers)
#
#训练模型
transformed = model.transform(df).select("features", "prediction")
rows = transformed.collect()
rows[0].prediction == rows[1].prediction
#True
rows[2].prediction == rows[3].prediction
# True
这个例子很简单,导入的数据是四个稠密向量(可以自己在二维向量里画一下),设定了两个簇心,最后验证预测的结果是否正确,显示为True,证明预测正确。算法中具体的参数可以参考API中的说明。然而实际生产中我们的数据集不可能以这样的方式一条条写进去,一般是读取文件,关于怎么读取文件,可以具体看我的这篇博文。这里我们采用iris数据集(不要问我为什么又是iris数据集,因为真的太方便了)来给大家讲解一下。
我的数据集是csv格式的,而Spark又不能直接读取csv格式的数据,这里我们有两个方式,一是我提到的这篇博文里有写怎么读取csv文件,二是安装spark-csv包(在这里下载),github地址在这里。按照步骤安装可以了。这里友情提示一下大家,github的安装方法是:
$SPARK_HOME/bin/spark-shell --packages com.databricks:spark-csv_2.11:1.4.0
如果报错了,可以把 --packages 换成 --jars,如果还是不行,在加一个 common-csv.jars包放到lib下面就可以了。我因为这个耽误了不少时间,不过具体问题也得具体分析。
安装好这个包以后,就可以读取数据了
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
data = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('iris.csv')
data.show()
读取数据以后,我们来看一下数据集:
+------+------------+-----------+------------+-----------+-------+
|row.id|Sepal.Length|Sepal.Width|Petal.Length|Petal.Width|Species|
+------+------------+-----------+------------+-----------+-------+
| 1| 5.1| 3.5| 1.4| 0.2| 0|
| 2| 4.9| 3.0| 1.4| 0.2| 0|
| 3| 4.7| 3.2| 1.3| 0.2| 0|
| 4| 4.6| 3.1| 1.5| 0.2| 0|
| 5| 5.0| 3.6| 1.4| 0.2| 0|
| 6| 5.4| 3.9| 1.7| 0.4| 0|
| 7| 4.6| 3.4| 1.4| 0.3| 0|
| 8| 5.0| 3.4| 1.5| 0.2| 0|
| 9| 4.4| 2.9| 1.4| 0.2| 0|
| 10| 4.9| 3.1| 1.5| 0.1| 0|
| 11| 5.4| 3.7| 1.5| 0.2| 0|
| 12| 4.8| 3.4| 1.6| 0.2| 0|
| 13| 4.8| 3.0| 1.4| 0.1| 0|
| 14| 4.3| 3.0| 1.1| 0.1| 0|
| 15| 5.8| 4.0| 1.2| 0.2| 0|
| 16| 5.7| 4.4| 1.5| 0.4| 0|
| 17| 5.4| 3.9| 1.3| 0.4| 0|
| 18| 5.1| 3.5| 1.4| 0.3| 0|
| 19| 5.7| 3.8| 1.7| 0.3| 0|
| 20| 5.1| 3.8| 1.5| 0.3| 0|
+------+------------+-----------+------------+-----------+-------+
only showing top 20 rows
第二步:提取特征
我们在上一步导入的数据中label是String类型的,但在Spark中要变成数值型才能计算,不然就会报错。可以利用StringIndexer功能将字符串转化为数值型
from pyspark.ml.feature import StringIndexer feature = StringIndexer(inputCol="Species", outputCol="targetlabel")
target = feature.fit(data).transform(data)
target.show()
targetlabel这一列就是Species转化成数值型的结果
+------+------------+-----------+------------+-----------+-------+-----------+
|row.id|Sepal.Length|Sepal.Width|Petal.Length|Petal.Width|Species|targetlabel|
+------+------------+-----------+------------+-----------+-------+-----------+
| 1| 5.1| 3.5| 1.4| 0.2| 0| 0.0|
| 2| 4.9| 3.0| 1.4| 0.2| 0| 0.0|
| 3| 4.7| 3.2| 1.3| 0.2| 0| 0.0|
| 4| 4.6| 3.1| 1.5| 0.2| 0| 0.0|
| 5| 5.0| 3.6| 1.4| 0.2| 0| 0.0|
| 6| 5.4| 3.9| 1.7| 0.4| 0| 0.0|
| 7| 4.6| 3.4| 1.4| 0.3| 0| 0.0|
| 8| 5.0| 3.4| 1.5| 0.2| 0| 0.0|
| 9| 4.4| 2.9| 1.4| 0.2| 0| 0.0|
| 10| 4.9| 3.1| 1.5| 0.1| 0| 0.0|
| 11| 5.4| 3.7| 1.5| 0.2| 0| 0.0|
| 12| 4.8| 3.4| 1.6| 0.2| 0| 0.0|
| 13| 4.8| 3.0| 1.4| 0.1| 0| 0.0|
| 14| 4.3| 3.0| 1.1| 0.1| 0| 0.0|
| 15| 5.8| 4.0| 1.2| 0.2| 0| 0.0|
| 16| 5.7| 4.4| 1.5| 0.4| 0| 0.0|
| 17| 5.4| 3.9| 1.3| 0.4| 0| 0.0|
| 18| 5.1| 3.5| 1.4| 0.3| 0| 0.0|
| 19| 5.7| 3.8| 1.7| 0.3| 0| 0.0|
| 20| 5.1| 3.8| 1.5| 0.3| 0| 0.0|
+------+------------+-----------+------------+-----------+-------+-----------+
only showing top 20 rows
最后一步:模型训练和验证
from pyspark.sql import Row
from pyspark.ml.clustering import KMeans
from pyspark.mllib.linalg import Vectors #把数据格式转化成稠密向量
def transData(row):
return Row(label=row["targetlabel"],
features=Vectors.dense([row["Sepal.Length"],
row["Sepal.Width"],
row["Petal.Length"],
row["Petal.Width"]])) #转化成Dataframe格式
transformed = target.map(transData).toDF()
kmeans = KMeans(k=3)
model = kmeans.fit(transformed) predict_data = model.transform(transformed) train_err = predict_data.filter(predict_data['label'] != predict_data['prediction']).count()
total = predict_data.count()
print traing_err, total, float(train_err)/total
到这一步就结束了。总结一下,用pyspark做机器学习时,数据格式要转成需要的格式,不然很容易出错。下周写pyspark在机器学习中如何做分类。
【原】Spark之机器学习(Python版)(一)——聚类的更多相关文章
- Spark之机器学习(Python版)(一)——聚类
https://www.cnblogs.com/charlotte77/p/5437611.html
- 【原】Spark之机器学习(Python版)(二)——分类
写这个系列是因为最近公司在搞技术分享,学习Spark,我的任务是讲PySpark的应用,因为我主要用Python,结合Spark,就讲PySpark了.然而我在学习的过程中发现,PySpark很鸡肋( ...
- Spark入门(Python版)
Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到”大数据(Big Data)”广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰富生态系统,允许使用 ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
- Spark入门:Spark运行架构(Python版)
此文为个人学习笔记如需系统学习请访问http://dblab.xmu.edu.cn/blog/1709-2/ 基本概念 * RDD:是弹性分布式数据集(Resilient Distributed ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
- Python机器学习(1):KMeans聚类
Python进行KMeans聚类是比较简单的,首先需要import numpy,从sklearn.cluster中import KMeans模块: import numpy as np from sk ...
- Spark ML机器学习
Spark提供了常用机器学习算法的实现, 封装于spark.ml和spark.mllib中. spark.mllib是基于RDD的机器学习库, spark.ml是基于DataFrame的机器学习库. ...
- Mac 配置Spark环境scala+python版本(Spark1.6.0)
1. 从官网下载Spark安装包,解压到自己的安装目录下(默认已经安装好JDK,JDK安装可自行查找): spark官网:http://spark.apache.org/downloads.html ...
随机推荐
- Win10桌面预览版14316更新内容大全
下载更新: 安装之后右下角: Win10桌面预览版14316更新内容: Windows上运行乌班图Bash:通过设置开启开发者模式,更新和安全>面向开发人员.然后搜索"Wi ...
- 总结:如何使用redis缓存加索引处理数据库百万级并发
前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...
- Javascript单例模式概念与实例
前言 和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式.代理模式.观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构 ...
- .NET4.5新特性之异步编程(Async和Await)的使用
一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计
目 录 第十三章 中英文版本切换设计... 2 13.1 不用自带的资源文件的理由... 2 13.2 配置文件... 2 13.3 语言 ...
- Android 手机卫士10--应用管理器
1.添加不同类型条目 class MyAdapter extends BaseAdapter{ //获取数据适配器中条目类型的总数,修改成两种(纯文本,图片+文字) @Override public ...
- 解决springmvc+mybatis+mysql中文乱码问题【转】
这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...
- 这个图片切换动画只用CSS3实现
体验效果:http://hovertree.com/texiao/css3/39/ 这是一个使用纯CSS3实现的图文切换效果,没使用js脚本.点击左右箭头或者索圆点引按钮可以切换内容. 本特效中使用到 ...
- html5 canvas首屏自适应背景动画循环效果代码
模板描述:html5 canvas首屏自适应背景动画循环效果代码 由于动态图太大,怕以后服务器受不了,所以现在都改为静态图了,大家点击演示地址一样的,希望大家喜欢,你们的支持就是小海的动力!! 欢迎大 ...
- iOS - 捕获应用程序崩溃日志
作为一名iOS移动应用开发者,为了确保你的应用程序正确无误,在将应用程序提交到应用商店之前,你必定会进行大量的测试工作:而且在你测试的过程中应用程序运行的很好,但是在应用商店上线之后,还是有用户抱怨应 ...