机器学习-逻辑回归
一、逻辑回归是什么?
核心定位:解决二分类问题的机器学习算法
与传统回归区别:
- 线性回归 → 预测连续值(如房价)
- 逻辑回归 → 预测概率值(如用户点击广告的概率)
通俗理解:
银行要判断是否给客户放贷:
- 输入:客户年龄、收入、信用分 → 线性回归计算“信用评分”
- 输出:通过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时预测正例(如放贷)
三、工作原理解析
预测三步骤:
- 线性计算:
信用评分 = 0.3×年龄 + 0.5×收入 - 0.2×负债
- 概率转换:
放贷概率 = Sigmoid(信用评分)
- 分类决策:概率>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倍,建议推出年付优惠套餐锁定用户
七、避坑指南(新手必看)
- 特征缩放:逻辑回归对特征尺度敏感,必须标准化
- 样本均衡:正负样本比例失衡时用SMOTE过采样
- 阈值调整:默认0.5不一定最优,通过ROC曲线选择
from sklearn.metrics import roc_curve fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba) plt.plot(fpr, tpr) # 选择靠近左上角的阈值
- 正则化选择:特征多选L1正则化(自动特征选择)
八、学习路径建议
- 基础练习:在Kaggle尝试Titanic生存预测(二分类经典案例)
- 进阶方向:
- 多分类问题 → softmax回归
- 非线形边界 → 特征多项式扩展