机器学习-逻辑回归

发布于:2025-09-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

​一、逻辑回归是什么?​

​核心定位​​:解决二分类问题的机器学习算法
​与传统回归区别​​:

  • 线性回归 → 预测连续值(如房价)
  • 逻辑回归 → 预测概率值(如用户点击广告的概率)

​通俗理解​​:

银行要判断是否给客户放贷:

  • 输入:客户年龄、收入、信用分 → 线性回归计算“信用评分”
  • 输出:通过Sigmoid函数将评分转为“放贷概率”
  • 决策:概率>0.5 → 放贷(否则拒绝)

​二、核心数学概念(零公式版)​
​概念​ ​作用​ ​生活案例​
​Sigmoid函数​ 把任意数值压缩到(0,1)区间 信用评分 → 放贷概率转换器
​极大似然估计​ 根据历史数据反推最优模型参数 医生根据100个病例总结疾病规律
​对数函数​ 将复杂计算简化为加法运算 乘法计算器 → 加法计算器

​Sigmoid特性图解​​:

输入: -∞  →  ... -3  -2  -1  0  1  2  3 ... → +∞  
输出: 0% → ... 5% 12% 27% 50% 73% 88% 95% → 100%

​特点​​:输出值≥0.5时预测正例(如放贷)


​三、工作原理解析​

​预测三步骤​​:

  1. ​线性计算​​:信用评分 = 0.3×年龄 + 0.5×收入 - 0.2×负债
  2. ​概率转换​​:放贷概率 = Sigmoid(信用评分)
  3. ​分类决策​​:概率>0.5 → 放贷

​损失函数的作用​​:

模型预测为“放贷”时:

  • 真实放贷 → 损失小(预测正确)
  • 真实拒贷 → 损失大(预测错误)
    ​目标​​:通过调整参数使总损失最小

​四、实战癌症预测案例(Python)​
# 1. 数据预处理
import pandas as pd
data = pd.read_csv('breast-cancer.csv')
data = data.replace("?", np.nan).dropna()  # 处理缺失值

# 2. 特征工程
X = data.iloc[:, 1:10]  # 9个医学特征
y = data['Class'].map({2:0, 4:1})  # 2良性→0, 4恶性→1

# 3. 数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)

# 4. 训练模型
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(solver='liblinear', penalty='l2')
model.fit(X_train, y_train)

# 5. 模型评估
accuracy = model.score(X_test, y_test)
print(f"模型准确率:{accuracy:.2%}")

​关键参数说明​​:

  • solver='liblinear':适合小数据集
  • penalty='l2':防止过拟合的正则化手段

​五、分类评估四大指标​

​医疗场景举例​​:100例癌症检测

​指标​ ​计算公式​ ​医疗意义​
精确率 TP/(TP+FP) 确诊患者中真实患癌的比例
召回率 TP/(TP+FN) 真实患者中被检测出的比例
F1-Score 2×(精确率×召回率)/(和) 综合衡量漏诊和误诊
AUC值 ROC曲线下面积 模型区分患者/健康人的能力

​重点图解​​:

          真实患癌患者(20人)
          ↗        ↘
检测阳性(25人)    检测阴性(75人)
          ↘        ↗
          健康人群(80人)
  • ​精确率​​ = 15/25 = 60%(确诊者中真患者比例)
  • ​召回率​​ = 15/20 = 75%(患者中被检测出的比例)

​六、电信客户流失实战​

​业务场景​​:预测用户是否流失
​关键特征​​:

  • 合约类型(月付用户流失率高)
  • 是否光纤用户
  • 电子支付使用频率

​代码核心步骤​​:

# 1. 类别特征独热编码
df = pd.get_dummies(df, columns=['Contract', 'PaymentMethod'])

# 2. 可视化特征相关性
import seaborn as sns
sns.barplot(x='Contract_Month-to-month', y='Churn', data=df)  # 月合约用户流失率高

# 3. 处理样本不平衡(过采样)
from imblearn.over_sampling import SMOTE
X_res, y_res = SMOTE().fit_resample(X, y)

# 4. 输出评估报告
print(classification_report(y_test, y_pred, 
      target_names=['未流失', '流失']))

​业务结论​​:

月合约用户流失率是年合约的​​3.2倍​​,建议推出年付优惠套餐锁定用户


​七、避坑指南(新手必看)​
  1. ​特征缩放​​:逻辑回归对特征尺度敏感,必须标准化
  2. ​样本均衡​​:正负样本比例失衡时用SMOTE过采样
  3. ​阈值调整​​:默认0.5不一定最优,通过ROC曲线选择
    from sklearn.metrics import roc_curve
    fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
    plt.plot(fpr, tpr)  # 选择靠近左上角的阈值
  4. ​正则化选择​​:特征多选L1正则化(自动特征选择)

​八、学习路径建议​
  1. ​基础练习​​:在Kaggle尝试Titanic生存预测(二分类经典案例)
  2. ​进阶方向​​:
    • 多分类问题 → softmax回归
    • 非线形边界 → 特征多项式扩展

网站公告

今日签到

点亮在社区的每一天
去签到