博客
关于我
spark之常见的机器学习算法
阅读量:558 次
发布时间:2019-03-09

本文共 3561 字,大约阅读时间需要 11 分钟。

分类、回归、聚类:机器学习技术的核心要素

机器学习技术中,分类、回归和聚类是三大核心任务,它们以不同的方式处理数据,解决实际问题。分类和回归是监督学习任务,而聚类是无监督学习的典型应用。

分类与回归

分类的目标是根据输入特征构建分类函数或模型,将未知类别的样本映射到已知类别中。数学表达为:

F(W, X) = C
其中W是模型参数,X是输入向量,C是标签向量。

回归任务则是预测数值结果,例如预测房价、温度等连续变量。目标函数通常通过最小化误差或者最大化拟合程度来优化模型参数。

在spark.ml中,可以使用多种分类和回归算法。以下是几种常见算法的实现示例:

逻辑回归

逻辑回归是一种常用分类方法,通过对特征进行线性组合并归一化,输出类别概率得分。

  • 逻辑斯蒂分布

    输出函数基于贝叶斯概率计算,P(Y=1|x) = s(X·W),其中s是sigmoid函数。

  • 二项LR

    适用于二类分类问题,通过对样本进行迭代拟合,最终确定分类边界。

  • 似然函数最大化

    对似然函数求导,使用梯度下降等方法优化模型参数。

  • 决策树

    决策树通过分裂数据特征,构建树状分类结构,判断路径即可预测结果。

  • 特征选择

    通过信息增益和信息增益比选择最有效特征。

  • 决策树生成

    根据特征对数据进行递归分裂,生成分类树。

  • 决策树剪枝

    为了防止过拟合,对生成的树进行剪枝,降低模型复杂度,同时保持分类准确性。

  • 实例展示

    可以通过spark.ml Pipeline实现完整分类流程,包括特征转换、模型训练和结果评估。以下是一个简单的分类代码示例:

    from pyspark.sql import SparkSessionfrom pyspark.sql import Row, functionsfrom pyspark.ml.linalg import Vector, Vectorsfrom pyspark.ml.evaluation import MulticlassClassificationEvaluatorfrom pyspark.ml import Pipelinefrom pyspark.ml.feature import IndexToString, StringIndexer, VectorIndexer, HashingTF, Tokenizerfrom pyspark.ml.classification import LogisticRegression, LogisticRegressionModel, BinaryLogisticRegressionSummary# 初始化spark sessionspark = SparkSession.builder.master("local").appName("spark ML").getOrCreate()def f(x):    rel = {}    rel['features'] = Vectors.dense(float(x[0]), float(x[1]), float(x[2]), float(x[3]))    rel['label'] = str(x[4])    return rel# 读取数据集并转化为DataFramedf = spark.sparkContext.textFile("file:///home/work/jiangshuangyan001/spark_test/iris.txt").map(lambda line: line.split(',')).map(lambda p: Row(**f(p))).toDF()# 构建二分类数据集df.createOrReplaceTempView("iris")df = spark.sql("select * from iris where label != 'Iris-setosa'")rel = df.rdd.map(lambda t: str(t[1]) + ":" + str(t[0])).collect()# 构建ML PipelinelabelIndexer = StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(df)featureIndexer = VectorIndexer().setInputCol("features").setOutputCol("indexedFeatures").fit(df)# 调整分类器参数lr = LogisticRegression().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures").setMaxIter(10).setRegParam(0.3).setElasticNetParam(0.8)# 创建PipelinelabelConverter = IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.labels)lrPipeline = Pipeline().setStages([labelIndexer, featureIndexer, lr, labelConverter])# 训练模型lrPipelineModel = lrPipeline.fit(df_train)# 预测和评估lrPredictions = lrPipelineModel.transform(df_test)preRel = lrPredictions.select("predictedLabel", "label", "features", "probability").collect()for item in preRel:    print(str(item['label']) + ',' + str(item['features']) + ' --> prob=' + str(item['probability']) + ', predictedLabel=' + str(item['predictedLabel']))# 评估准确率evaluator = MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction")lrAccuracy = evaluator.evaluate(lrPredictions)print("Test Error = ", 1.0 - lrAccuracy)

    聚类分析

    聚类任务没有固定的类别,目标是根据相似性将数据自动划分为簇。

    实现步骤:

  • 初始化k个样本点作为簇中心。
  • 计算每个样本到中心的距离,将样本分配到最近的簇。
  • 根据新样本更新簇中心,重复步骤直到收敛。
  • Spark中提供KMeans算法,支持参数设置和性能优化。

    示例代码

    from pyspark.sql import Rowfrom pyspark.ml.clustering import KMeans, KMeansModel# 初始化spark sessionspark = SparkSession.builder.master("local").appName("spark ML").getOrCreate()# 模型训练kmeansmodel = KMeans().setK(2).setFeaturesCol('features').setPredictionCol('prediction').fit(df)# 模型预测kmeansPredictions = kmeansmodel.transform(df)# 查看预测结果kmeansPredictions.select('prediction', 'features').show()# 查看聚类中心results2 = kmeansmodel.clusterCenters()for item in results2:    print(item)

    总结

    分类、回归和聚类是机器学习实践的三大主要任务,它们在实际应用中发挥着重要作用。选择合适的算法和优化参数,可以有效提升模型性能。在Spark ML中通过Pipepline实现模型训练和部署,能够高效处理多种数据集,为实际问题提供可靠解决方案。

    转载地址:http://mubpz.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO三大组件基础知识
    查看>>
    NIO与零拷贝和AIO
    查看>>
    NIO同步网络编程
    查看>>
    NIO基于UDP协议的网络编程
    查看>>