Pyspark分类--LinearSVC

该博客介绍了如何利用PySpark的LinearSVC类进行二元分类。通过创建数据集,设置参数如最大迭代次数、正则化参数等训练模型,并展示模型的系数、类别数及特征数。实验结果展示了模型的预测能力和原始预测值。
摘要由CSDN通过智能技术生成

LinearSVC:支持向量机线性分类LINEARSVC模型

class pyspark.ml.classification.LinearSVC(featuresCol=‘features’, labelCol=‘label’, predictionCol=‘prediction’, maxIter=100, regParam=0.0, tol=1e-06, rawPredictionCol=‘rawPrediction’, fitIntercept=True, standardization=True, threshold=0.0, weightCol=None, aggregationDepth=2)

这个二元分类器使用 OWLQN 优化器优化铰链损失。目前只支持 L2 正则化(当前版本2.4.5)

maxIter = Param(parent=‘undefined’, name=‘maxIter’, doc=‘最大迭代次数 (>= 0).’)

predictionCol = Param(parent=‘undefined’, name=‘predictionCol’, doc=‘预测列名.’)

regParam = Param(parent=‘undefined’, name=‘regParam’, doc=‘正则化参数 (>= 0).’)

tol = Param(parent=‘undefined’, name=‘tol’, doc=‘迭代算法的收敛容差 (>= 0).’)

rawPredictionCol= Param(parent=‘undefined’, name=‘rawPredictionCol’, doc=‘原始预测(a.k.a. confidence) column name.’)*

fitIntercept = Param(parent=‘undefined’, name=‘fitIntercept’, doc=‘是否适合截取项。’)

standardization = Param(parent=‘undefined’, name=‘standardization’, doc=‘在拟合模型之前是否对训练特征进行标准化。’)

threshold = Param(parent=‘undefined’, name=‘threshold’, doc=‘二进制分类中应用于线性模型预测的阈值。这个阈值可以是任何实数,其中 Inf 将使所有预测为 0.0,-Inf 将 做出所有预测 1.0。’)

weightCol = Param(parent=‘undefined’, name=‘weightCol’, doc=‘weight 列名。如果未设置或为空,我们将所有实例权重视为 1.0。’)

aggregationDepth = Param(parent=‘undefined’, name=‘aggregationDepth’, doc=‘树聚合 (>= 2) 的建议深度。’)

model.coefficients:线性 SVM 分类器的模型系数

model.numClasses:类数(标签可以采用的值)

model.numFeatures:返回模型训练的特征数量。如果未知,则返回 -1

01.创建数据集

from pyspark.sql import SparkSession
from pyspark.sql.types import Row
from pyspark.ml.linalg import Vectors
spark = SparkSession.builder.appName("LinearSVC")\
    .master("local[*]").getOrCreate()
sc = spark.sparkContext
df = sc.parallelize([
    Row(label=1.0, features=Vectors.dense(1.0, 1.0, 1.0)),
    Row(label=0.0, features=Vectors.dense(1.0, 2.0, 3.0))
]).toDF()
df.show()

​ 输出结果:

+-------------+-----+
|     features|label|
+-------------+-----+
|[1.0,1.0,1.0]|  1.0|
|[1.0,2.0,3.0]|  0.0|
+-------------+-----+

02.使用LinearSVC转换

from pyspark.ml.classification import LinearSVC
svm = LinearSVC(maxIter=5, regParam=0.01)
model = svm.fit(df)
model.transform(df).show()
model.transform(df).head(3)

​ 输出结果:

+-------------+-----+--------------------+----------+
|     features|label|       rawPrediction|prediction|
+-------------+-----+--------------------+----------+
|[1.0,1.0,1.0]|  1.0|[-0.5581623056159...|       1.0|
|[1.0,2.0,3.0]|  0.0|[0.08756571302736...|       0.0|
+-------------+-----+--------------------+----------+
[Row(features=DenseVector([1.0, 1.0, 1.0]), label=1.0, rawPrediction=DenseVector([-0.5582, 0.5582]), prediction=1.0),
 Row(features=DenseVector([1.0, 2.0, 3.0]), label=0.0, rawPrediction=DenseVector([0.0876, -0.0876]), prediction=0.0)]

03.线性 SVM 分类器的模型系数

model.coefficients

​ 输出结果:DenseVector([0.0, -0.2792, -0.1833])

04.类数(标签可以采用的值)

model.numClasses

​ 输出结果:2

05.模型训练的特征数量

model.numFeatures

​ 输出结果:3

06.生成数据进行预测

test0 = sc.parallelize([Row(features=Vectors.dense(-1.0, -1.0, -1.0))]).toDF()
result = model.transform(test0).head()
result.prediction

​ 输出结果:1.0

07.查看原始预测

result.rawPrediction

​ 输出结果:DenseVector([-1.4831, 1.4831])

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PySpark实现SVM,需要进行以下步骤: 1. 导入必要的库和模块 ```python from pyspark.ml.classification import LinearSVC from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.ml.feature import VectorAssembler from pyspark.sql import SparkSession ``` 2. 创建Spark会话 ```python spark = SparkSession.builder.appName("SVMExample").getOrCreate() ``` 3. 加载数据集 ```python data = spark.read.format("libsvm").load("path/to/data") ``` 4. 准备训练数据 将数据集分成训练集和测试集: ```python (trainingData, testData) = data.randomSplit([0.7, 0.3], seed=1234) ``` 5. 准备特征向量 ```python assembler = VectorAssembler(inputCols=data.columns[:-1], outputCol="features") trainingData = assembler.transform(trainingData) testData = assembler.transform(testData) ``` 6. 训练模型 ```python svm = LinearSVC(maxIter=10, regParam=0.1) model = svm.fit(trainingData) ``` 7. 预测结果 ```python predictions = model.transform(testData) ``` 8. 评估模型 使用多分类分类评估器来评估模型的性能: ```python evaluator = MulticlassClassificationEvaluator(predictionCol="prediction") accuracy = evaluator.evaluate(predictions) print("Test Error = %g" % (1.0 - accuracy)) ``` 完整代码: ```python from pyspark.ml.classification import LinearSVC from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.ml.feature import VectorAssembler from pyspark.sql import SparkSession spark = SparkSession.builder.appName("SVMExample").getOrCreate() data = spark.read.format("libsvm").load("path/to/data") (trainingData, testData) = data.randomSplit([0.7, 0.3], seed=1234) assembler = VectorAssembler(inputCols=data.columns[:-1], outputCol="features") trainingData = assembler.transform(trainingData) testData = assembler.transform(testData) svm = LinearSVC(maxIter=10, regParam=0.1) model = svm.fit(trainingData) predictions = model.transform(testData) evaluator = MulticlassClassificationEvaluator(predictionCol="prediction") accuracy = evaluator.evaluate(predictions) print("Test Error = %g" % (1.0 - accuracy)) spark.stop() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值