【投稿】Machine Learning With Spark Note 1:数据基本处理

来源:互联网 发布:阿里云注册的域名解析 编辑:程序博客网 时间:2024/06/06 23:57

本文为数盟特约作者投稿,欢迎转载,请注明出处“数盟社区”和作者

博主简介:段石石,1号店精准化推荐算法工程师,主要负责1号店用户画像构建,喜欢钻研点Machine Learning的黑科技,对Deep Learning感兴趣,喜欢玩kaggle、看9神,对数据和Machine Learning有兴趣咱们可以一起聊聊,个人博客: hacker.duanshishi.com

接入公共数据库

很用于机器学习模型的数据库有很多,包括:

  • UCI机器学习源:http://archive.ics.uci.edu/ml/
  • Amazon AWS公共数据集:http://aws.amazon. com/publicdatasets/
  • Kaggle:http://www.kaggle.com/competitions
  • KDnuggets:http://www.kdnuggets.com/datasets/index.html

在本章中,我们使用一个经典的电影数据集MovieLens(http://files.grouplens.org/datasets/ movielens/ml-100k.zip)

了解数据

下载MovieLens数据集:

NewImage

解压,检查下数据格式:

NewImageNewImage

NewImage

u.user存储用户基本信息,u.item存储电影基本信息,u.data存储user_id,movie_id,rating,timestamp信息。

使用Python notebook看看用户数据

将数据拷到对应路径

 

NewImage

计算数据当中的基本信息,比如用户总数、性别总数(应该是2吧)、职业数、zip数目:

 

NewImage

计算用户的年纪的基本分布:

 

NewImage

计算用户的职业的分布:

 

NewImage

NewImage

使用IPython notebook看看电影数据

读入电影数据,计算总数:

 

NewImage

计算电影的age分布:

 

NewImage

使用Ipython notebook看看用户对电影排序的数据集

查看数据记录数量:

 

对数据进行一些基本的统计:

 

NewImage

计算ratings value的分布:

 

NewImage

计算每个用户和其对应的评价次数:

 

NewImage

计算每个用户的总共评价次数的分布:

 

NewImage

为每部电影计算其被评论数量分布:

 

 

NewImage

处理与变换数据

主要处理方法:

  • 滤除或移除bad values和missing values
  • 用给定值来替换bad values和missing values
  • 针对异值点使用一些鲁棒性强的技术
  • 对潜在异值点进行转换

用指定值替换bad values和missing values

 

用中位数的值来替代哪些bad values

从数据中提取有用特征

特征可以分为多种特征,包括:

  • Numerical features
  • Categorical features,如性别
  • Text features,如标题
  • Other features,如经纬度信息
  • Derived features,如前面的movie age

 

上面将categorical features转换到数值型的,但是经常我们在做数据处理的时候,这类彼此之间没有潜在排序信息的数据,应该进行dummies处理:

 

特征值做dummies处理后,得到的二值化的特征:

NewImage

时间戳转为categorical feature

 

NewImage

按时间段划分为morning,lunch, afternoon, evening, night(下面有原书代码是错误的 ’night’:[23,7]):

 

NewImage

然后对这些时间段做dummies处理,编码成[0,0,0,0,1],操作类似于原来的职业统计处理的时候:

 

NewImage

文本特征处理基本步骤:

  • Tokenization
  • Stop word removal
  • Stemming
  • Vectorization

简单的文本特征提取:

1,提取出titles

 

2,分词处理(汉语麻烦,还好这里是英语,用空格就可以了)

 

然后将所有titles出现的word去重,然后就可以看到所有的word的list:

 

NewImage

上面的可以用Spark内置的zipWithIndex来完成,zipWithIndex的使用:

NewImage

 

结果与上个版本一致。

到了这里,我们就要想着如何把这些数据存储下来,如何使用,如果按前面对categorical var的处理方式,做dummies处理直接存储,显然会浪费太多的空间,我们在这里采用压缩稀疏(csc_matrix)的存储方式。

 

NewImage

特征归一化

  • 归一化单一特征
  • 归一化特征向量

使用MLlib来做特征归一化

 

 

NewImage

总结:spark支持多种语言,如scala,java, python,可以使用相应的包来进行特征处理,例如python下scikit-learn,gensim,svikit-image,matplotlib,notebook文件在github上

0 0
原创粉丝点击