原理部分请看另一篇博客:深入机器学习:Logistic回归
文档:http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.linear_model.LogisticRegression.html
参数
● penalty:指定(对数)似然函数中加入的正则化项,默认为L2
● c:指定正则化项的权重,是正则化项惩罚项系数的倒数,c越小,正则化项越大
● fit_intercept:选择是否计算偏置常数b,默认是True
● class_weight:指定各类别的权重,默认为 None,表示每个类别的权重都是1。当数据的正负样本不平衡比较明显时,可以考虑设为 balanced,表示每个类别的权重与该类别在样本集中出现的频率成反比。
● solver:指定求解最优化问题的算法,默认为liblinear(内部使用了坐标轴下降法),适用于数据集较小的情况。当数据集较大时,可使用 sag(随机平均梯度下降法)。另外,还可使用newton-cg(牛顿法)和lbfgs(拟牛顿法)。注意:newton-cg、lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
● max_iter:设定最大迭代次数。
● tol:设定判断迭代收敛的阈值,默认为0.0001。
● multi_class:指定多分类的策略,默认是ovr,表示采用one-vs-rest,即一对其他策略;还可选择multinomial,表示直接采用多项Logistic回归策略。
● dual:选择是否采用对偶方式求解,默认为False。注意,只有在penalty='l2'且solver='liblinear’时存在对偶形式。
● warm_start:设定是否使用前一次训练的结果继续训练,默认为 False,表示每次从头开始训练。
● n_jobs:指定计算机并行工作时的 CPU 核数,默认是1。如果选择-1,则表示使用所有可用的CPU核。
class pyspark.ml.classification.
LogisticRegression
(featuresCol='features', labelCol='label', predictionCol='prediction', maxIter=100, regParam=0.0, elasticNetParam=0.0, tol=1e-06, fitIntercept=True, threshold=0.5, thresholds=None, probabilityCol='probability', rawPredictionCol='rawPrediction', standardization=True, weightCol=None, aggregationDepth=2, family='auto', lowerBoundsOnCoefficients=None, upperBoundsOnCoefficients=None, lowerBoundsOnIntercepts=None, upperBoundsOnIntercepts=None) Pyspark Documentation
'''
内容:pyspark实现逻辑回归二元分类
版本:spark 2.4.4
数据:垃圾邮件数据
数据源:http://archive.ics.uci.edu/ml/datasets/Spambase
'''
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
from pyspark.sql import functions
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import BinaryClassificationEvaluator,MulticlassClassificationEvaluator
from pyspark.ml import Pipeline
from pyspark.ml.tuning import ParamGridBuilder,CrossValidator
spark = SparkSession.builder.master("local").appName("LogisticRegression").getOrCreate()
data = spark.read.format("csv").option("header",True).load(u"D:\Data\Spam-Dataset\spambase.csv")
for i in data.columns:
data = data.withColumn(i, col(i).cast("Double")) # 将列类型转为数值类型
if i == "spam":
data = data.withColumnRenamed(i, "label") # 更改列名
trainingData, testData = data.randomSplit([0.8, 0.2])
featuresArray = data.columns[:-1]
assembler = VectorAssembler().setInputCols(featuresArray).setOutputCol("features")
# 创建逻辑回归模型
lr = LogisticRegression().setLabelCol("label").setFeaturesCol("features")
# 逻辑回归的流水线
lrPipeline = Pipeline().setStages([assembler,lr])
ParamGrid = ParamGridBuilder().addGrid(lr.maxIter,[8, 12, 15,18]).addGrid(lr.regParam,[0.001,0.005]).build()
# 二元分类评估
evaluator = BinaryClassificationEvaluator().setMetricName("areaUnderROC").setRawPredictionCol("rawPrediction").setLabelCol("label")
CV = CrossValidator().setEstimator(lrPipeline).setEvaluator(evaluator).setEstimatorParamMaps(ParamGrid).setNumFolds(3)
# 训练逻辑回归模型
model = CV.fit(trainingData)
# 预测逻辑回归的值
predictions = model.transform(testData)
# 输出目标值,预测值,预测概率
pre = predictions.select("label","prediction","probability").collect()
for item in pre:
print(item["label"],item["prediction"],item["probability"])
''' 最佳模型参数 '''
bestModel= model.bestModel
lrModel = bestModel.stages[1]
print("best regParam : ", lrModel.explainParam(lrModel.regParam))
print("best maxIter : ", lrModel.explainParam(lrModel.maxIter))
''' 评估模型之AUC '''
# 逻辑回归模型评估指标
AUC = evaluator.evaluate(predictions)
print("The Area Under ROC of LogisticRegression:",AUC)
''' 评估模型之准确率 '''
evaluatorX = MulticlassClassificationEvaluator().setMetricName("accuracy").setLabelCol("label")
ACC = evaluatorX.evaluate(predictions)
print("The Accuracy of LogisticRegression:",ACC)
啊ashang 原文: 逻辑回归算法原理
李小文 原文:逻辑回归的原理及Python实现