Spark学习之机器学习包ML

本文深入探讨Spark的机器学习库MLlib,重点介绍转换器(Transformer)如Binarizer、Bucketizer,评估器(Estimator)如逻辑回归、决策树,以及管道(Pipeline)的应用,用于数据预处理、模型训练和评估。同时,文章讨论了特征提取、分类、聚类和回归等任务中的关键操作。
摘要由CSDN通过智能技术生成

Spark的ML软件包,其操作是基于DataFrame的。ML包括转换器(Transformer)、评估器(Estimator)、管道(Pipeline)。

1、 转换器----Transformer

通常是将一个新列附加到DataFrame来转换数据。从高层次上看,当从转换器的抽象类派生时,每个新的转换器需要实现.transform()方法。该方法要求传递一个要被转换的DataFrame,该参数通常是第一个也是唯一的一个强制性参数。其他参数有inputCol、outputCol,inputCol的参数默认是"features"。

spark.ml.feature中提供了许多的转换器:
(1)BInarizer:根据指定的阈值将连续变量转换为对应的二进制
(2)Bucketizer:与Binarizer类似,该方法根据阈值列表(分割的参数),将连续变量转换为多项值(即将连续变量离散化到指定的范围内)
(3)ChiSqSelector:作用于分类目标变量(思考分类模型),次功能是允许选择预定义数量的特征(由numTopFeatures参数进行参数化),如:卡方检验(Chi-Square)
(4)CountVectorizer:应用对象是标记文本([‘learning’,‘PySpark’,‘with’,‘us’],[‘us’,‘us’,‘us’,‘us’])
(5)DCT:离散余弦变换取实数值向量,并返回相同长度的向量,但是余弦函数之和在不同频率下振荡。这种转换对于提取数据或数据压缩中的一些基本频率很有用。
(6)ElementwiseProduct:该方法返回一个向量,其中元素是传入该方法的向量和另一个参数scalingVec向量的乘积。
(7)HashingTF:一个哈希转换器,输入是标记文本的列表,返回一个带有计数的有预定的向量。
(8)IDF:计算文档列表的逆向文件频率。
(9)IndexToSting:与StringIndexer方法对应。使用StringIndexerModel对象中的编码将字符串反转到原始值。
(10)MaxAbScaler:将数据归一化到[-1.0,1.0]。
(11)MinMaxScaler:将数据缩放到[0.0,1.0]范围内。
(12)NGram:输入为标记文本序列,返回结果包含一系列n-gram。其中n-gram:以两个词、三个词或更多的n个词作为一个n-gram。
(13)Normalizer:该方法使用p范数将数据缩放为单位范数(默认是L2)
(14)OneHotEncoder:将分类列编码为二进制向量列。
(15)PCA:使用主成分分析执行数据降维。
(16)PolynomialExpansion:将多项式展开。
(17)QuantileDiscretizer:与Bucketizer方法类似,但不是传递分隔参数,而是传递一个numBuckets参数。通过计算数据的近似分位数来决定分隔应该是什么。
(18)RegexTokenizer:这是一个使用正则式的字符串分词器。
(19)RFormula:R语言,输入公式,输出表达式的vec列。
(20)SQLTransformer:SQL语法
(21)StandardScaler:标准化列,使其拥有零均值和等于1的标准差。
(22)StopWordRemover:从标记文本删除停用词(如:the a )
(23)StringIndex:假设包含所有单词的列表都在一列,这将产生一个索引向量。
(24)Tokenizer(分词器):该默认分词器将字符串转换成小写,然后以空格为分隔符分词。
(25)VectorAssemble:将多个数字列(包括向量)合并为一个向量。
(26)VectorIndexer:将类别列生成索引向量。
(27)VectorSlicer:作用于特征向量,给定一个索引列表,从特征向量中提取值。
(28)Word2Vec:输入一个句子,将其转换为{string,vector}格式的映射。

2、评估器----Estimator

可以将评估器作为需要评估的统计模型,对观测对象作为预测或分类。新模型必须进行fit()。

分类

(1)LogisticRegression:逻辑回归分类
(2)DecisionTreeClassifier:通过构建一个决策树来预测一个观察对象的所属类别。maxDapth参数是限制树的深度;minInstancePerNode是确定需要进一步拆分的树节点的观察对象的最小数量;maxBins参数是指定连续变量被分割的Bin的最大数量;Impurity指定用于测量并计算来自分割的信息的度量。
(3)DBTClassifier:用于分类的梯度提升决策树模型。该模型属于集合模型家族(集合模型结合多个弱预测模型,从而形成一个强的模型)。DBTClassifier支持二进制标签、连续特征、分类特征。
(4)RandomForestClassifier:随机森林,支持二元标签和多项式标签。
(5)NaiveBayes:朴树贝叶斯模型,使用条件概率进行分类。支持二元标签、多项式标签。
(6)MultilayerPerceptronClassifier:多层感知机分类器,基于神经网络,激活函数使用sigmoid计算,输出层使用softmax。
(7)OneVsRest:将多分类问题简化为二分类问题。

回归

(1)AFTSurvivalRegression:加速失效时间回归模型,是一个参数化模型。假设其中一个特征的边际效应加速或减缓预期寿命。适用于具有明确阶段的过程。
(2)DecisionTreeRegressor:类似于分类模型,明显不同的是其标签是连续的而不是二元或者多项的。
(3)GBTRegressor: 与DecisionTreeRegressor一样,区别在于标签的数据类型。
(4)GeneralizeLinearRegression:广义线性回归,
(5)IsotonicRegression:该回归拟合一个形式自由、非递减的行到数据中。对于拟合有序的和递增的数据集有用。
(6)LinearRegression:线性回归。
(7)RandomForestRegressor:适合连续的标签。

聚类

(1)BisectingKMeans:二分K均值,将所有观察点作为一个簇,然后将数据迭代地分解为k个簇。
(2)KMeans:K均值算法,将数据分为k个簇,迭代地搜索使每个观察点和它所属簇的质点之间距离平方和最小的质点。
(3)GaussianMixture:高斯混合模型,该模型使用具有未知参数的k个高斯分布来剖析数据集。使用期望最大化算法,通过最大对数似然函数找到高斯参数。
(4)LDA:Fisher线性判别法,用于自然语言处理中的主题生成。

3、管道----Pipeline

用来表示从转换到评估的端到端的过程,该过程对输入的一些原始数据执行必要的数据加工(转换),最后评估统计模型。目前对于管道的理解尚浅。

4、使用ML预测婴儿生存几率

数据集的下载:http://www.tomdrabas.com/data/LearningPySpark/births_transformed.csv.gz

import pyspark.sql.types as typ
import  pyspark.ml.feature as ft
from pyspark.ml import Pipeline
import pyspark.ml.classification as cl
import pyspark.ml.evaluation as ev
from pyspark.ml import PipelineModel
import pyspark.ml.tuning as tune
import pandas as pd
import numpy as np
import os
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('my_test').getOrCreate()
sc = spark.sparkContext
labels = [('INFANT_ALIVE_AT_REPORT', typ.IntegerType()),
          ('BIRTH_PLACE', typ.StringType()),
          ('MOTHER_AGE_YEARS', typ.IntegerType()),
          ('FATHER_COMBINE_AGE', typ.IntegerType()),
          ('CIG_BEFORE', typ.IntegerType()),
          ('CIG_1_TRI', typ.IntegerType()),
          ('CIG_2_TRI', typ.IntegerType()),
          ('CIG_3_TRI', typ.IntegerType()),
          ('MOTHER_HEIGHT_IN', typ.IntegerType()),
          ('MOTHER_PRE_WEIGHT', typ.IntegerType()),
          ('MOTHER_DELIVERY_WEIGHT', typ.IntegerType()),
          ('MOTHER_WEIGHT_GAIN', typ.IntegerType()),
          ('DIABETES_PRE', typ.IntegerType()),
          ('DIABETES_GEST', typ.IntegerType()),
          ('HYP_TENS_PRE', typ.IntegerType()),
          ('HYP_TENS_GEST', typ.IntegerType()),
          ('PREV_BIRTH_PRETERM', typ.IntegerType())
          ]
# 指定schema,严格限制数据集只有17列
schema = typ.StructType
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值