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

    你可能感兴趣的文章
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    nnU-Net 终极指南
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>