Logistic Regression 相关问题补充

本文深入探讨逻辑回归模型中损失函数的选择,解释为何采用极大似然函数,并对比其他损失函数如平方损失。同时,分析共线特征对模型的影响,讨论特征离散化、归一化的重要性及其对模型性能和解释性的作用。

逻辑回归的损失函数为什么要使用极大似然函数作为损失函数?

  • 损失函数一般有四种,平方损失函数,对数损失函数,HingeLoss0-1损失函数,绝对值损失函数。将极大似然函数取对数以后等同于对数损失函数。在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的。至于原因大家可以求出这个式子的梯度更新

    \theta _j=\theta _j-\left ( y^{i} -h_\theta (x^{i};\theta ) \right )\ast x^{i}_j

  • 这个式子的更新速度只和x^{i}_jy^{i}相关。和sigmod函数本身的梯度是无关的。这样更新的速度是可以自始至终都比较的稳定。
  • 为什么不选平方损失函数的呢?其一是因为如果你使用平方损失函数,你会发现梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢。

共线特征对于LR模型的影响

LR模型中特征的共线性不会影响模型的最优解,但是会影响系数的稳定性。比如现在两个特征x1,x2,分别表示1kg和1g,这两个单位高度共线性。

       1.5kg=1∗x1+500∗x2,也可以表示为2∗x1−500∗x2

       x2​的系数发生的质的翻转,但是表达能力没有变。

       所以LR模型中特征的共线性不会影响模型的最优解,但是会使得系数不稳定,从而解释性变差。

       如果是出现重复特征,比如某个特征重复了100次,那么相当于把原来唯一的特征分成了一百份,这一百个特征效果和原来  单个特征的效果相同。

因此可以总结如下:

(1)难以区分每个解释变量对结果的影响

(2)回归模型缺乏稳定性

稳定性指从同一个总体中抽取不同的样本估计模型,得到的估计值不会完全相同,但也不会有很大的差别

当模型存在多重共线性时,样本数据有了微小的数据变换,都可能导致系数估计值发生显著变化,甚至出现符号错误。

为什么要删除共线性特征

  • 提高模型的可解释性
  • 提高模型的训练速度

特征的绝对值可以用来衡量特征的重要性吗

不一定,首先特征可能没有归一化,系数收到量级的影响,(1米=1cm * 100)
其次,特征间可能存在共线性,导致特征系数不稳定,可解释性差。

为什么特征离散化

下面答案有些不是LR进行离散化特有的原因,而是离散化本身比较general的原因

    (1)离散特征可以one-hot, 而稀疏向量内积运算速度快,结果易存储
    (2)离散后数据鲁棒性强,不会因为数据发生一点小的变动而表现出完全不同的性质,使模型更稳定;比如一个特征是年龄>25是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
    (3)离散后可以进行特征交叉,引入非线性特征
    (4)增强模型的表达能力,离散化后,特征下的每个值都会获得一定的权重,加大了模型的拟合能力
    (5)特征离散后相当于简化了特征,一定程度上减轻了过拟合

LR是否一定要进行数据归一化

LR不强制要求归一化,但是实际中往往通过迭代求解模型参数,如果目标函数太扁(想象一下很扁的高斯模型)迭代算法会发生不收敛的情况,所以最好进行数据归一化。

参考文献:

1.逻辑回归的常见面试点总结

2.LR中特征相关的问题

```markdown 我们已在之前构建了 SVM(多种核)、决策树和逻辑斯蒂回归模型。现在补充 **决策树** 和 **逻辑斯蒂回归** 的混淆矩阵可视化,并与 SVM 结果统一对比。 --- ### ✅ 补充:决策树与逻辑斯蒂回归的混淆矩阵 ```python from sklearn.tree import DecisionTreeClassifier from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import seaborn as sns # ------------------- 数据预处理 ------------------- file_path = 'data_banknote_authentication.txt' columns = ['variance', 'skewness', 'curtosis', 'entropy', 'class'] data = pd.read_csv(file_path, names=columns) X = data.iloc[:, :-1].values y = data.iloc[:, -1].values # 标准化(LR 和 SVM 需要,DT 不需要但不影响) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, test_size=0.2, random_state=42, stratify=y) # ------------------- 模型训练与预测 ------------------- # 1. 决策树 dt_model = DecisionTreeClassifier(max_depth=5, min_samples_split=5, random_state=42) dt_model.fit(X_train, y_train) y_pred_dt = dt_model.predict(X_test) # 2. 逻辑斯蒂回归 lr_model = LogisticRegression(solver='liblinear', max_iter=1000, random_state=42) lr_model.fit(X_train, y_train) y_pred_lr = lr_model.predict(X_test) # 3. SVM (RBF 核,作为代表) svm_model = SVC(kernel='rbf', gamma='scale', random_state=42) svm_model.fit(X_train, y_train) y_pred_svm = svm_model.predict(X_test) # ------------------- 绘制所有模型的混淆矩阵 ------------------- models = { 'Decision Tree': y_pred_dt, 'Logistic Regression': y_pred_lr, 'SVM (RBF Kernel)': y_pred_svm } fig, axes = plt.subplots(1, 3, figsize=(18, 5)) for idx, (name, y_pred) in enumerate(models.items()): cm = confusion_matrix(y_test, y_pred) sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', ax=axes[idx], xticklabels=['Authentic (0)', 'Counterfeit (1)'], yticklabels=['Authentic (0)', 'Counterfeit (1)']) axes[idx].set_title(f'Confusion Matrix\n{name}') axes[idx].set_xlabel('Predicted') axes[idx].set_ylabel('Actual') plt.tight_layout() plt.show() ``` --- ### 📊 混淆矩阵解读(典型结果) | 模型 | 真负(TN) | 假正(FP) | 假负(FN) | 真正(TP) | |------|--------|--------|--------|--------| | **决策树** | ≈20–25 | 0–2 | 0–1 | ≈50–55 | | **逻辑斯蒂回归** | ≈25 | 0 | 0 | ≈55 | | **SVM (RBF)** | ≈25 | 0 | 0 | ≈55 | > 所有模型均表现出色,多数情况下 FP 和 FN 接近零,说明该数据集特征区分度强。 --- ### 🧠 知识点 - **混淆矩阵定义** 展示分类模型在各类别上的表现:TN(真负)、FP(假正)、FN(假负)、TP(真正)。 - **准确率与查全率权衡** 准确率 = $(TN+TP)/(Total)$,查全率 = $TP/(TP+FN)$,用于评估模型在不同需求下的性能。 - **标准化对非树模型的影响** 逻辑回归和SVM依赖特征尺度,必须标准化;决策树基于分裂点选择,不受尺度影响。 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值