您的位置:

Python中的sklearn Logistic Regression模型

一、介绍

Logistic Regression是一种广泛应用于分类问题的线性模型。它的思想是将线性模型的输出值通过Sigmoid函数压缩到[0,1]之间,以表示概率。在sklearn库中,包含一个LogisticRegression类,可以用于二分类和多分类问题。

from sklearn.linear_model import LogisticRegression

# 构造LogisticRegression类的实例化对象
log_reg = LogisticRegression()

LogisticRegression包含很多可调参数,例如正则化参数,求解算法和类权重等,这在后面会详细介绍。

二、数据预处理

Logistic Regression模型对数据的要求比较严格,需要进行几个预处理步骤:

1. 处理缺失值

通常我们需要对缺失值进行填充或删除,以保证数据完整。sklearn中提供了imputer函数,可以快速实现数据处理。

from sklearn.preprocessing import Imputer

# 构造Imputer类的实例化对象
imputer = Imputer(strategy="mean")
imputer.fit(X_train)
X_train = imputer.transform(X_train)
X_test = imputer.transform(X_test)

2. 特征缩放

特征缩放可以帮助我们使得模型收敛更快,并且避免因为数据差异过大导致的权重过拟合。通常我们将特征缩放到均值为0,方差为1的标准正态分布。

from sklearn.preprocessing import StandardScaler

# 构造StandardScaler类的实例化对象
standard_scaler = StandardScaler()
standard_scaler.fit(X_train)
X_train = standard_scaler.transform(X_train)
X_test = standard_scaler.transform(X_test)

三、训练模型

调用Logistic Regression类实例化对象的fit方法,即可完成模型训练。在fit方法中传入训练数据X_train和目标变量y_train。

log_reg.fit(X_train, y_train)

四、模型参数调整

Logistic Regression模型中有很多可调参数,这些参数可以调节模型复杂度,提升模型性能。这里介绍几个常用参数:

1. penalty

penalty参数用于指定正则化项,正则化可以避免过拟合,同时提升模型泛化性能。penalty参数有两个取值:“l1”和“l2”,分别对应L1正则化和L2正则化。

log_reg_l1 = LogisticRegression(penalty="l1")
log_reg_l2 = LogisticRegression(penalty="l2")

2. C

C参数用于指定正则化的强度,在损失函数中有一个系数为C的项,可以控制正则化的强度。C越小,正则化强度越大;C越大,正则化强度越弱。

log_reg_c1 = LogisticRegression(C=0.1)
log_reg_c2 = LogisticRegression(C=1)
log_reg_c3 = LogisticRegression(C=10)

3. solver

solver参数用于指定求解算法,sklearn中提供了多种求解方法,包括"newton-cg"、"lbfgs"、"liblinear"、"sag"和"saga"。不同算法在不同数据集上具有不同的表现,需要根据情况进行选择。

log_reg_newton = LogisticRegression(solver="newton-cg")
log_reg_lbfgs = LogisticRegression(solver="lbfgs")
log_reg_liblinear = LogisticRegression(solver="liblinear")
log_reg_sag = LogisticRegression(solver="sag")
log_reg_saga = LogisticRegression(solver="saga")

4. class_weight

class_weight参数用于对不平衡样本进行处理。在某些情况下,目标变量的不同类别在数据量上存在很大差异,这会导致模型对数据分布偏移很敏感。通过设置class_weight参数,可以赋予不同类别不同的权重,加强少数类别的重要性。

log_reg_class_weight = LogisticRegression(class_weight={0: 1, 1: 5})

五、模型评估

完成模型训练后,需要对模型进行评估,以了解其在测试集上的性能。下面介绍几个常用的评估指标:

1. Accuracy

Accuracy指标是二分类问题中最常用的一种评估指标,表示分类正确的样本占总样本数的比例:

from sklearn.metrics import accuracy_score
y_predict = log_reg.predict(X_test)
accuracy_score(y_test, y_predict)

2. Precision / Recall / F1-score

Precision、Recall和F1-score是另外三种常用的二分类评估指标。其中Precision表示预测为正例中真正为正例的比例,Recall表示真正为正例中预测为正例的比例,F1-score是Precision和Recall的调和平均。

from sklearn.metrics import precision_score, recall_score, f1_score
precision_score(y_test, y_predict)
recall_score(y_test, y_predict)
f1_score(y_test, y_predict)

3. ROC曲线 / AUC值

ROC曲线是二分类问题中广泛使用的评估工具,直观地呈现了模型的性能。ROC曲线的横坐标为False Positive Rate(FPR),纵坐标为True Positive Rate(TPR)。AUC值是ROC曲线下面积。

from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_test, y_predict)
roc_auc = auc(fpr, tpr)

六、总结

Logistic Regression是一个简单高效的分类算法,适用于二分类和多分类问题。在sklearn库中,可以方便地应用Logistic Regression模型,并通过调整模型参数获得更好的性能。最后,要注意对数据进行预处理,以保证模型的精度和稳定性。