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])