逻辑回归之参数选择:从理论到实践
一、逻辑回归概述
逻辑回归虽然名字中带有“回归”,但它是一种用于处理二分类或多分类问题的算法。其核心思想是通过构建一个线性模型,将输入特征进行线性组合,再利用逻辑函数(如Sigmoid函数)将线性组合的结果映射到0到1之间的概率值,以此来判断样本属于某一类别的可能性。例如,在信用卡欺诈检测中,我们可以根据交易金额、时间等特征,预测该笔交易是否为欺诈行为。
二、案例背景与数据处理
在上述代码中,使用了信用卡交易数据集creditcard.csv
。在进行逻辑回归建模之前,数据预处理是必不可少的步骤。
- 数据标准化:对
Amount
列进行Z标准化,即通过StandardScaler
将数据转换为均值为0,标准差为1的标准正态分布。这一步骤可以消除不同特征之间量纲的影响,加速模型的收敛速度。代码如下:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
a = data[['Amount']]
data['Amount'] = scaler.fit_transform(data[['Amount']])
- 特征选择与数据划分:删除对模型影响较小的
Time
列,并将数据集划分为训练集和测试集。这里采用train_test_split
函数,将30%的数据作为测试集,70%的数据作为训练集,同时设置random_state
固定随机种子,以保证实验结果的可重复性。
from sklearn.model_selection import train_test_split
X = data.drop('Class',axis=1)
y = data.Class
x_train,x_test,y_train,y_test =\
train_test_split(X,y,test_size = 0.3,random_state = 0)
三、逻辑回归关键参数介绍
在逻辑回归模型LogisticRegression
中,有几个关键参数对模型性能有着重要影响。
- C参数:C是正则化强度的倒数,它控制模型对训练数据的拟合程度。C值越大,正则化强度越弱,模型越倾向于拟合训练数据,容易出现过拟合现象;C值越小,正则化强度越强,模型的泛化能力越强,但可能会导致欠拟合。在实际应用中,需要通过合适的方法来选择最优的C值。
- penalty参数:该参数用于指定正则化的类型,常见的有
'l1'
和'l2'
。'l1'
正则化会使部分系数变为0,从而起到特征选择的作用;'l2'
正则化则是对所有系数进行约束,使系数更加平滑。在上述代码中,使用的是'l2'
正则化。 - solver参数:该参数用于指定求解器的类型,不同的求解器适用于不同的数据规模和问题特点。例如,
'lbfgs'
适用于大多数情况,尤其是数据量较大时;'liblinear'
则适用于小数据集。
四、参数选择方法——交叉验证
为了选择最优的C参数,代码中采用了交叉验证的方法。交叉验证是一种评估模型性能和选择参数的有效技术,它将训练数据划分为多个子集,通过多次训练和验证,得到模型在不同数据子集上的性能指标,最终取平均值作为模型的评估结果。
- 具体实现:在代码中,定义了一个
c_param_range
列表,包含了多个候选的C值。然后,通过循环将每个C值传入LogisticRegression
模型,并使用cross_val_score
函数进行8折交叉验证,计算模型的召回率(scoring ='recall'
)。召回率是衡量模型在正样本识别能力的重要指标,在信用卡欺诈检测中,较高的召回率意味着能够尽可能多地识别出欺诈交易。
scores = []
c_param_range =[0.01,0.1,1,10,100]
for i in c_param_range:lr = LogisticRegression(C = i, penalty='l2', solver='lbfgs', max_iter=1000)score = cross_val_score(lr, x_train, y_train, cv = 8, scoring ='recall')score_mean = sum(score) / len(score)scores.append(score_mean)print(score_mean)
- 选择最优参数:通过
np.argmax(scores)
找到scores
列表中最大值对应的索引,从而确定最优的C参数。使用最优C参数重新构建逻辑回归模型,以期望在测试集上获得更好的性能。
best_c = c_param_range[np.argmax(scores)]
lr = LogisticRegression(C = best_c,penalty = 'l2',max_iter = 1000)
lr.fit(x_train, y_train)
五、模型评估与结果分析
为了评估模型的性能,代码中使用了混淆矩阵和分类报告。
- 混淆矩阵:通过
cm_plot
函数绘制混淆矩阵,它直观地展示了模型在不同类别上的预测情况。例如,矩阵的对角线元素表示预测正确的样本数量,非对角线元素表示预测错误的样本数量。通过分析混淆矩阵,可以深入了解模型的错误类型,为进一步优化模型提供依据。
train_predicted =lr.predict(x_train)
print(metrics.classification_report(y_train, train_predicted))
cm_plot(y_train,train_predicted).show()test_predicted = lr.predict(x_test)
print(metrics.classification_report(y_test, test_predicted))
cm_plot(y_test,test_predicted).show()
- 分类报告:
classification_report
函数生成的分类报告提供了精确率、召回率和F1值等关键指标,这些指标从不同角度评估了模型的性能。通过对比训练集和测试集上的分类报告,可以判断模型是否存在过拟合现象。
六、运行结果
七、总结与展望
逻辑回归的参数选择直接影响模型的性能和泛化能力。通过交叉验证等方法,可以有效地找到最优参数,提高模型的预测准确性。在实际应用中,还可以结合更多的参数调整和模型优化技巧,如特征工程、调整正则化类型等,进一步提升逻辑回归模型的效果。随着机器学习技术的不断发展,逻辑回归也在与其他算法融合,发挥着更大的作用。未来,我们可以探索更多的参数选择方法和模型优化策略,以适应更加复杂和多样化的应用场景。