spark mllib 的数据预处理

来源:互联网 发布:巫妖王 数据库 编辑:程序博客网 时间:2024/05/29 07:24

Tokenizer(分词器)

算法介绍:

Tokenization将文本划分为独立个体(通常为单词)。

RegexTokenizer基于正则表达式提供更多的划分选项。默认情况下,参数“pattern”为划分文本的分隔符。或者可以指定参数“gaps”来指明正则“patten”表示“tokens”而不是分隔符,这样来为分词结果找到所有可能匹配的情况。

基于python的实现


from pyspark.ml.feature import Tokenizer, RegexTokenizer
from pyspark import SparkContext
from pyspark import SQLContext


sc=SparkContext()
sqlcontext=SQLContext(sc)
sentenceDataFrame = sqlcontext.createDataFrame([
    (0, "Hi I heard about Spark"),
    (1, "I wish Java could use case classes"),
    (2, "Logistic,regression,models,are,neat")
], ["label", "sentence"])
sentenceDataFrame.show()
tokenizer = Tokenizer(inputCol="sentence", outputCol="words")
wordsDataFrame = tokenizer.transform(sentenceDataFrame)
i=wordsDataFrame.take(3)
print i
for words_label in wordsDataFrame.select("words","label").take(3):
    print(words_label)


i的结果是这样的:[Row(label=0, sentence=u'Hi I heard about Spark', words=[u'hi', u'i', u'heard', u'about', u'spark']),

结果只粘贴一部分,tokenizer的功能,就是把句子给分成词语,但是也会保留以前的sentence,所以在接下来的for语句当中,要用select选择我们需要的字段。



n-gram

算法介绍:

一个n-gram是一个长度为整数n的字序列。NGram可以用来将输入转换为n-gram。

NGram的输入为一系列字符串(如分词器输出)。参数n决定每个n-gram包含的对象个数。结果包含一系列n-gram,其中每个n-gram代表一个空格分割的n个连续字符。如果输入少于n个字符串,将没有输出结果


from pyspark import SparkContext
from pyspark import SQLContext
from pyspark.ml.feature import NGram

sc=SparkContext()
sqlcontext=SQLContext(sc)
wordDataFrame = sqlcontext.createDataFrame([
    (0, ["Hi", "I", "heard", "about", "Spark"]),
    (1, ["I", "wish", "Java", "could", "use", "case", "classes"]),
    (2, ["Logistic", "regression", "models", "are", "neat"])
], ["label", "words"])
ngram = NGram(inputCol="words", outputCol="ngrams")
ngramDataFrame = ngram.transform(wordDataFrame)
h=ngramDataFrame.take(3)
print h
for ngrams_label in ngramDataFrame.select("ngrams", "label").take(3):
    print(ngrams_label)

h的结果:Row(label=0, words=[u'Hi', u'I', u'heard', u'about', u'Spark'], ngrams=[u'Hi I', u'I heard', u'heard about', u'about Spark'])   结果是将前一个词跟后一个词合并,不太理解这个有什么用


PAC

主成分分析是一种统计学方法,它使用正交转换从一系列可能相关的变量中提取线性无关变量集,提取出的变量集中的元素称为主成分。使用PCA
方法可以对变量集合进行降维。下面的示例介绍如何将5维特征向量转换为3维主成分向量。

python代码如下:

from pyspark import SparkContext
from pyspark import SQLContext
from pyspark.ml.feature import PCA
from pyspark.mllib.linalg import Vectors


sc=SparkContext()
sqlcontext=SQLContext(sc)


data = [(Vectors.sparse(5, [(1, 1.0), (3, 7.0)]),),
        (Vectors.dense([2.0, 0.0, 3.0, 4.0, 5.0]),),
        (Vectors.dense([4.0, 0.0, 0.0, 6.0, 7.0]),)]
df = sqlcontext.createDataFrame(data, ["features"])
df.show(6,False)
pca = PCA(k=3, inputCol="features", outputCol="pcaFeatures")
model = pca.fit(df)
result = model.transform(df).select("pcaFeatures")
result.show(truncate=False)