pyspark使用RandomForestClassifier,进行特征选择

使用随机森林分类器RandomForestClassifier进行特征重要程度的选择

返回一个模型,模型具有特征重要程度的结果(稀疏向量)

01.导入模块生成对象

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.driver.host","192.168.1.4")\
    .config("spark.ui.showConsoleProgress","false")\
    .appName("importancefeatures").master("local[*]").getOrCreate()

02.读取数据为DataFrame,并查看结构

data = spark.read.csv("/mnt/e/win_ubuntu/Code/DataSet/MLdataset/dog_food.csv",header=True,inferSchema=True)
data.printSchema()

输出结果:

root
 |-- A: integer (nullable = true)
 |-- B: integer (nullable = true)
 |-- C: double (nullable = true)
 |-- D: integer (nullable = true)
 |-- Spoiled: double (nullable = true)

03.查看数据详情,显示前3条数据

data.show(3)

输出结果:

+---+---+----+---+-------+
|  A|  B|   C|  D|Spoiled|
+---+---+----+---+-------+
|  4|  2|12.0|  3|    1.0|
|  5|  6|12.0|  7|    1.0|
|  6|  2|13.0|  6|    1.0|
+---+---+----+---+-------+
only showing top 3 rows

04.引入模块,并将特征标签向量化,并查看向量化结果表

from pyspark.ml.feature import VectorAssembler
vectorAssembler = VectorAssembler(inputCols=["A","B","C","D"],outputCol="features")
datavector = vectorAssembler.transform(data)
datavector.show()

输出结果:

+---+---+----+---+-------+-------------------+
|  A|  B|   C|  D|Spoiled|           features|
+---+---+----+---+-------+-------------------+
|  4|  2|12.0|  3|    1.0| [4.0,2.0,12.0,3.0]|
|  5|  6|12.0|  7|    1.0| [5.0,6.0,12.0,7.0]|
|  6|  2|13.0|  6|    1.0| [6.0,2.0,13.0,6.0]|
|  4|  2|12.0|  1|    1.0| [4.0,2.0,12.0,1.0]|
|  4|  2|12.0|  3|    1.0| [4.0,2.0,12.0,3.0]|
| 10|  3|13.0|  9|    1.0|[10.0,3.0,13.0,9.0]|
..............................................

05.选取需要的列,查看前3条数据

datavector = datavector.select("features","Spoiled")
datavector.show(3)

输出结果:

+------------------+-------+
|          features|Spoiled|
+------------------+-------+
|[4.0,2.0,12.0,3.0]|    1.0|
|[5.0,6.0,12.0,7.0]|    1.0|
|[6.0,2.0,13.0,6.0]|    1.0|
+------------------+-------+
only showing top 3 rows

06.引入随机森林分类器

from pyspark.ml.classification import RandomForestClassifier
rf = RandomForestClassifier(featuresCol="features",labelCol="Spoiled")

07.使用构造的分类器,对数据集进行训练,得到一个分类模型

model = rf.fit(datavector)

08.查看该模型下,各个标签的重要程度:

model.featureImportances

输出结果:

SparseVector(4, {0: 0.0183, 1: 0.0201, 2: 0.9359, 3: 0.0256})
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用PySpark进行随机森林的示例代码: ```python from pyspark.ml import Pipeline from pyspark.ml.classification import RandomForestClassifier from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.ml.feature import VectorAssembler from pyspark.sql import SparkSession # 创建SparkSession spark = SparkSession.builder.appName("RandomForestExample").getOrCreate() # 加载数据集 data = spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt") # 将特征向量组合成一个向量列 assembler = VectorAssembler(inputCols=data.columns[1:-1], outputCol="features") # 创建随机森林分类器 rf = RandomForestClassifier(labelCol="label", featuresCol="features", numTrees=10) # 创建Pipeline pipeline = Pipeline(stages=[assembler, rf]) # 将数据集分为训练集和测试集 (trainingData, testData) = data.randomSplit([0.7, 0.3]) # 训练模型 model = pipeline.fit(trainingData) # 进行预测 predictions = model.transform(testData) # 评估模型 evaluator = MulticlassClassificationEvaluator(labelCol="label", predictionCol="prediction", metricName="accuracy") accuracy = evaluator.evaluate(predictions) print("Test Error = %g" % (1.0 - accuracy)) # 关闭SparkSession spark.stop() ``` 在这个示例中,我们首先使用`VectorAssembler`将特征向量组合成一个向量列,然后创建一个`RandomForestClassifier`分类器,并将其与`VectorAssembler`一起包含在一个`Pipeline`中。接下来,我们将数据集分为训练集和测试集,并使用`Pipeline`训练模型。最后,我们使用`MulticlassClassificationEvaluator`评估模型的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值