spark机器学习 一构建机器学习系统

本内容都是基于ml-100k数据集操作

1 数据特征分析

from pyspark.sql import SparkSession
from pyspark.sql import Row
import matplotlib.pyplot as plt
import numpy as np

spark = SparkSession.builder.appName("pyhton").config("spark.some.config.option","some-value").getOrCreate()

sc = spark.sparkContext
userrdd = sc.textFile("D:/hadoop/spark/ml-100k/u.user").map(lambda line:line.split("|"))

df = userrdd.map(lambda field:Row(name=field[0],age=int(field[1]),gender=field[2],occupation=field[3],zip=field[4]))

schemauser = spark.createDataFrame(df)
schemauser.createOrReplaceTempView("user")

age = spark.sql("select age from user")
ages = age.rdd.map(lambda p:p.age).collect()

plt.hist(ages,bins=20,color='lightblue',normed=True)

# 选择用户职业数据
count_occp = spark.sql("select occupation,count(occupation) as cnt from user group by occupation order by cnt")
count_occp.show(5)

# 获取职业名称及职业数 以及画出各职业总数图形
# 把运行结果转为RDD
x_axis = count_occp.rdd.map(lambda p:p.occupation).collect()
y_axis = count_occp.rdd.map(lambda p:p.cnt).collect()

pos = np.arange(len(x_axis))
width = 1.0

# 隐式新增一个figure,或为当前figure新增一个axes

ax = plt.axes()
# 设置x轴刻度
ax.set_xticks(pos + (width  / 2))
# 为对应刻度打标签
ax.set_xticklabels(x_axis)
plt.bar(pos,y_axis,width,color='orange')
# x轴上的标签旋转30度
plt.xticks(rotation=90)
# 获取当前figure的应用
fig = plt.gcf()

fig.set_size_inches(10,10)

输出:

用户年龄分布图

查看职业前五行数据

用户职业分布图

2 特征分布及相关性分析

3 对比分析

4数据可视化

5 数据预处理

数据预处理能够提高数据质量还能提高模型的性能。

数据预处理过程:数据清理、数据变换、数据集成、数据归约。

 

数据清理:它的主要任务是填补缺失值、光滑噪声数据、处理奇异数据、纠正错误数据、删除重复数据、删除唯一性属性、去除不相关字段或特征、处理不一致数据等。噪声数据的处理方法分为分箱、聚类等。

数据变换:对数据进行规范化、离散化、衍生指标、类别特征数值化、平滑噪声等都属于数据变换。

spark自带的数据变换算法:

数据预处理算法功能简介
特征提取TF-IDF统计文档的词频----逆向文件频率(TF-IDF)
Word2Vec将文档转换为向量
特征转换
 
Tokenization将文本划分为独立个体
StopWordsRemover删除了所有停用词
PCA使用PCA方法可以对变量集合进行降维
StringIndexer将字符串列编码为标签索引列
OneHotEncoder将标签指标映射为二值(0或1)向量
Normalizer规范每个向量以具有单位范数
StandardScaler标准化每个特征使得其具有统一的标准差以及均值为0,方差为1
VectorAssembler将给定的多列表组合成一个单一的向量列

数据集成:是将多文件或者多数据库中的数据进行合并,然后存放在一个一致的数据存储中。它一般通过join、union或merge等关键字把两个或多个数据集放在一起。

spark sql中有三种join方法:

  • broadcast hash join:如果join的表中有一张大表和一张较小的表,可以把小表广播分发到大表所在分区节点上,分别并发第与其上的分区记录进行hash join;
  • shuffle hash join:如果两张表都不小,对数据量较大的表进行广播分发就不合适,这种情况下,可以根据join key相同必然分区相同的原理,将两张表分别按照join key进行重新分区,这样就可以将join分而治之,划分为很多小join,充分利用集群资源并行化;
  • sort merge join:对数据量较大的表也可以考虑使用sort merge join方法,先将大表根据join key进行重新分区,两张表会分布到整个集群,以便分布式并行处理,然后,对单个分区节点的两表数据分别进行排序,最后,对排好序的两张分区表数据执行join操作。

 

数据规约:通过数据规约技术删除或减少冗余属性(或维)、精简数据集等,使规约后的数据比原数据小,但仍然接近于保持原数据的完整性,且结果与规约前结果相同或几乎相同。

spark 自带的数据选择算法和功能简介:

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值