【Spark】实验6 Spark机器学习库MLlib编程实践

article/2025/10/19 13:34:30

Spark机器学习库MLlib编程实践

一、实验目的

  • 通过实验掌握基本的MLLib编程方法;
  • 掌握用MLLib解决一些常见的数据分析问题,包括数据导入、成分分析和分类和预测等。

二、实验平台

  • 新工科智慧平台。
  • 数据集1:下载Adult数据集(http://archive.ics.uci.edu/ml/datasets/Adult),该数据集也可以从教学平台获取。
    • 数据从美国1994年人口普查数据库抽取而来,可用来预测居民收入是否超过50K$/year。
    • 该数据集类变量为年收入是否超过50k$,属性变量包含年龄、工种、学历、职业、人种等重要信息。
    • 值得一提的是,14个属性变量中有7个类别型变量。
  • 数据集2:鸢尾花数据集 150条鸢尾花数据集

三、实验内容和要求

3.1 居民收入数据分类

1.数据导入

  • 从文件中导入数据,并转化为DataFrame。
  • 在进行数据导入前,要先对所下载的adult数据集进行预处理(本次实验只用到了adult.data和adult.test两个文件)
    • 处理1:两个文件最后的空行要删掉,不然会报错!!!
      在这里插入图片描述
    • 处理2:adult.test文件的第一行删掉,不然会报错!!
      在这里插入图片描述
    • 处理3:把adult.test文件中每一行最后的“.”删掉(直接替换即可),不然会报错!!!
      在这里插入图片描述
  • 从文件中导入数据,并转化为DataFrame
from pyspark.ml.feature import PCA
from pyspark.shell import spark
from pyspark.sql import Row
from pyspark.ml.linalg import Vector, Vectors
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.ml import Pipeline, PipelineModel
from pyspark.ml.feature import IndexToString, StringIndexer, VectorIndexer, HashingTF, Tokenizer
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.classification import LogisticRegressionModel
from pyspark.ml.classification import BinaryLogisticRegressionSummary, LogisticRegression
from pyspark.sql import functions
from pyspark.ml.tuning import CrossValidator, ParamGridBuilderdef f(x):rel = {'features': Vectors.dense(float(x[0]), float(x[2]), float(x[4]), float(x[10]), float(x[11]), float(x[12])),'label': str(x[14])}return reldf = spark.sparkContext.textFile("/Users/liuhao/MyProject/PycharmProject/Spark/Data/adult.data")\.map(lambda line: line.split(',')).map(lambda p: Row(**f(p))).toDF()
test = spark.sparkContext.textFile("/Users/liuhao/MyProject/PycharmProject/Spark/Data/adult.test")\.map(lambda line: line.split(',')).map(lambda p: Row(**f(p))).toDF()

在这里插入图片描述

2.进行主成分分析(PCA)

  • 对6个连续型的数值型变量进行主成分分析。
    • PCA(主成分分析)是通过正交变换把一组相关变量的观测值转化成一组线性无关的变量值,即主成分的一种方法。
    • PCA通过使用主成分把特征向量投影到低维空间,实现对特征向量的降维。
  • 通过setK()方法将主成分数量设置为3,把连续型的特征向量转化成一个3维的主成分。
  • 构建PCA模型,并通过训练集进行主成分分解,然后分别应用到训练集和测试集
pca = PCA(k=3, inputCol="features", outputCol="pcaFeatures").fit(df)
result = pca.transform(df)
testdata = pca.transform(test)result.show()

在这里插入图片描述

test.show()

在这里插入图片描述

3.训练分类模型并预测居民收入

  • 在主成分分析的基础上,采用逻辑回归,以及决策树模型预测居民收入是否超过50K;
  • 对Test数据集进行验证。 并对两种方法结果进行分析对比。
labelIndexer = StringIndexer(inputCol="label",outputCol="indexedLabel").fit(result)
for label in labelIndexer.labels:print(label)
featureIndexer = VectorIndexer (inputCol="pcaFeatures", outputCol="indexedFeatures").fit(result)
print(featureIndexer.numFeatures)
labelConverter = IndexToString (inputCol=" prediction", outputCol=" predictedLabel", labels=labelIndexer.labels)
labelIndexer = StringIndexer (inputCol="label",outputCol=" indexed abel" ).fit(result)
for label in labelIndexer.labels:print(label)

在这里插入图片描述

featureIndexer = VectorIndexer(inputCol="pcaFeatures", outputCol="indexedFeatures").fit(result)
print (featureIndexer.numFeatures)
labelConverter = IndexToString (inputCol="prediction", outputCol="predictedLabel", labels=labelIndexer.labels)
lr = LogisticRegression().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures").setMaxIter(100)
lrPipeline = Pipeline().setStages( [labelIndexer, featureIndexer, lr, labelConverter])
lrPipelineModel = lrPipeline. fit( result)
lrModel = lrPipelineModel. stages[2]
print ("Coefficients: In " + str(lrModel.coefficientMatrix)+"\nIntercept: "+str(lrModel.interceptVector)+"\n+numFeatures: " + str( lrModel. numFeatures))
lrPredictions = lrPipelineModel.transform(testdata)
evaluator = MulticlassClassificationEvaluator() . setLabelCol(" indexedLabel" ) . setPredictionCol( "prediction" )
lrAccuracy = evaluator . evaluate(lrPredictions)
print("Test Error = %g " % (1.0 - lrAccuracy))

在这里插入图片描述

4.超参数调优

  • 利用CrossValidator确定最优的参数,包括最优主成分PCA的维数、分类器自身的参数等。
pca = PCA().setInputCol("features").setOutputCol( "pcaFeatures" )
labelIndexer = StringIndexer() . setInputCol("label" ) . set0utputCol(" indexedLabel" ) . fit(df )
featureIndexer = VectorIndexer() . setInputCol(" pcaFeatures") . setOutputCol(" indexedFeatures" )
labelConverter = IndexToString() . setInputCol(" prediction") . set0utputCol (" predictedLabel" ) . setLabels(labelIndexer . labels)
lr = LogisticRegression() .setLabelCol(" indexedLabel") .setFeaturesCol( "indexedFeatures") .setMaxIter(100)
lrPipeline = Pipeline() . setStages( [pca, labelIndexer, featureIndexer, lr, labelConverter])
paramGrid = ParamGridBuilder().addGrid(pca.k, [1,2,3,4,5,6]) . addGrid(lr.elasticNetParam, [0.2,0.8]) . addGrid(lr.regParam,[0.01,0.1,0,5]).build()
cv = CrossValidator().setEstimator(lrPipeline).setEvaluator(MulticlassClassificationEvaluator().setabelCol("indexedLabel").setPredictionCol("prediction") ).setEstimatorParamMaps ( paramGrid).setNumFolds(3)
cvModel = cv. fit(df)
lrPredictions = cvModel. transform(test )
evaluator = MulticlassClassificationEvaluator() . setLabelCol(" indexedLabel" ) . setPredictionCol( "prediction" )
lrAccuracy = evaluator . evaluate(lrPredictions )
print("i€ỡã 4 # "+str(lrAccuracy))bestModel= cvModel.bestModel
lrModel = bestModel.stages[3]
print ("Coefficients: n " + str(lrModel. coefficientMatrix)+"InIntercept: "+str(lrModel.interceptVector)+ "In numClasses:ses)"+"\n numFeatures: "+str(lrModel. numFeatures))
pcaModel = bestModel. stages[0]

在这里插入图片描述

  • PCA最优的维数是6。

3.2 鸢尾花数据聚类分析

1、数据集导入

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixturedata_path = "/Users/liuhao/MyProject/PycharmProject/Spark/Data/iris.txt"
data = pd.read_csv(data_path, header=None)
X = data.iloc[:, :-1]  # 特征数据
y = data.iloc[:, -1]   # 类别标签

2、构建聚类模型可以采用Kmeans及GMM,并训练

# 建立聚类模型
kmeans_model = KMeans(n_clusters=3, random_state=42)
gmm_model = GaussianMixture(n_components=3, random_state=42)# 训练模型
kmeans_model.fit(X)
gmm_model.fit(X)

3、输出聚类标签

kmeans_labels = kmeans_model.labels_
gmm_labels = gmm_model.predict(X)print("KMeans聚类标签:")
print(kmeans_labels)
print("\nGMM聚类标签:")
print(gmm_labels)

在这里插入图片描述

4、查看聚类中心或混合成分参数,分析并对比聚类效果

kmeans_centers = kmeans_model.cluster_centers_
gmm_means = gmm_model.means_
gmm_covariances = gmm_model.covariances_print("\nKMeans聚类中心:")
print(kmeans_centers)
print("\nGMM混合成分均值:")
print(gmm_means)
print("\nGMM混合成分协方差矩阵:")
print(gmm_covariances)

在这里插入图片描述


http://chatgpt.dhexx.cn/article/9XiZCOaJ.shtml

相关文章

手把手带你玩转Spark机器学习-使用Spark进行数据降维

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

spark之常见的机器学习算法

1、分类、回归、聚类 分类回归是一种重要的机器学习和数据挖掘技术。分类的目的是根据数据集的特点构造一个分类函数或分类模型(也常常称作分类器),该模型能把未知类别的样本映射到给定类别中的一种技术。 即: 向量X[x1,x2...xn]但标签C[c1,c2...,ck]的…

Apache Spark机器学习

推荐电子书:Apache Spark 2.x入门 - 从入门到制作 前言: 使用Apache Spark 2.0及更高版本,实现了很大的改进,使Spark更容易编程和执行更快: Spark SQL和Dataset / DataFrame API通过Spark SQL优化的执行引擎提供易用…

Spark Machine Learning(SparkML):机器学习(部分二)

目录 6.分类和回归 6.1分类(Classification) 逻辑回归(LR) 决策树分类器(DTC) 随机森林分类器(RFC) 梯度提升树分类器(GBTC) 多层感知器分类器(MLPC) 线性支持向量机(SVM) One-vs-Rest分类器 朴素贝叶斯(NB) 6.2回归(Regression) 线性回归(LR) 广义线性回归(GLR) …

spark机器学习笔记:(六)用Spark Python构建回归模型

声明:版权所有,转载请联系作者并注明出处 http://blog.csdn.net/u013719780?viewmodecontents 博主简介:风雪夜归子(英文名:Allen),机器学习算法攻城狮,喜爱钻研Meachine Learnin…

Spark机器学习实例

2020/07/09 - 引言 《Learning Spark》过程中只是简单介绍了mllib中的东西,没有一个完整的实践过程,暂时还没有去找有没有专门做这种的书,好像我看《spark in action》是有这部分内容,后续在看。本篇文章就利用这个鸢尾花的数据集…

spark机器学习笔记:(一)Spark Python初探

声明:版权所有,转载请联系作者并注明出处 http://blog.csdn.net/u013719780?viewmodecontents 博主简介:风雪夜归子(英文名:Allen),机器学习算法攻城狮,喜爱钻研Meachine Learnin…

Spark Machine Learning(SparkML):机器学习(部分三)

目录 8.协同过滤(Collaborative Filtering) 8.1交替最小二乘ALS 8.2显式和隐式反馈 8.3缩放正则化参数 8.4冷启动策略 8.5代码示例: 9.频繁模式挖掘(Frequent Pattern Mining) FP-Growth PrefixSpan 10.ML优化:模型选择和超参数调优 模型选择&#xff08…

spark机器学习算法研究

spark提供了一个机器学习库,spark ml包,可以在spark中直接引入使用 import org.apache.spark.ml.clustering.{KMeans,KMeansModel} import org.apache.spark.ml.linalg.Vectors1. 常用聚类算法 k-means 算法 GMM 高斯混合模型 PIC 快速迭代聚类 LDA 隐式…

手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

手把手带你玩转Spark机器学习-使用Spark构建分类模型

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

手把手带你玩转Spark机器学习-Spark的安装及使用

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

手把手带你玩转Spark机器学习-深度学习在Spark上的应用

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

Spark Machine Learning(SparkML):机器学习(部分一)

机器学习是现阶段实现人工智能应用的主要方法,它广泛应用于机器视觉、语音识别、自然语言处理、数据挖掘等领域。MLlib是Apache Spark的可伸缩机器学习库。官网地址:[http://spark.apache.org/docs/latest/ml-guide.html] Spark的机器学习(ML)库提供了许多分布式ML算法。这些算…

手把手带你玩转Spark机器学习-使用Spark构建聚类模型

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

Spark机器学习解析

源码加数据集: 文件源码 Gitee好像只收10M一下的文件类型,所以数据集就只能以链接的形式自己下了 KMeans和决策树KDD99数据集,推荐使用10%的数据集: http://kdd.ics.uci.edu/databases/kddcup99/ ALS电影推荐的Movielens数据集…

Spark大数据处理系列之Machine Learning

Spark的机器学习库(Spark MLlib),包括各种机器学习算法:协同过滤算法、聚类算法、分类算法和其他算法。在前面的《Spark大数据处理》系列文章,介绍Apache Spark框架,介绍如何使用Spark SQL库的SQL接口去访问数据,使用S…

大数据笔记--Spark机器学习(第一篇)

目录 一、数据挖掘与机器学习 1、概念 2、人工智能 3、数据挖掘体系 二、机器学习 1、什么是机器学习 2、机器学习的应用 3、实现机器学习算法的工具与技术框架 三、Spark MLlib介绍 1、简介 2、MLlib基本数据类型 Ⅰ、概述 Ⅱ、本地向量 Ⅲ、向量标签的使用 Ⅳ…

iis 重启 (三种方法)

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 1 1、界面操作 打开“控制面板”->“管…

IIS中应用程序池自动停止,重启报错

阅文时长| 0.2分钟字数统计| 329.6字符主要内容| 1、引言&背景 2、解决方案 3、声明与参考资料 『IIS中应用程序池自动停止,重启报错』编写人| SCscHero 编写时间| 2022/1/3 PM12:32文章类型| 系列完成度| 已完成座右铭每一个伟大的事业,都有一个微不…