博客
关于我
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/

    你可能感兴趣的文章
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>
    nodejs支持ssi实现include shtml页面
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs服务端实现post请求
    查看>>
    nodejs框架,原理,组件,核心,跟npm和vue的关系
    查看>>
    Nodejs概览: 思维导图、核心技术、应用场景
    查看>>
    nodejs模块——fs模块
    查看>>
    Nodejs模块、自定义模块、CommonJs的概念和使用
    查看>>
    nodejs生成多层目录和生成文件的通用方法
    查看>>
    nodejs端口被占用原因及解决方案
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>
    NodeJs连接Oracle数据库
    查看>>