1. 逻辑回归定义
- 是一种二分类算法, 处理二分类问题的利器
- 线性回归的式子作为输入, 也能得出概率值
2. sigmoid函数
- [0,1]区间的概率值,默认0.5作为阀值
3. 逻辑回归的损失函数、优化
-
与现行回归原理相同, 但由于是分类问题, 损失函数不一样, 只能通过梯度下降求解
-
对数似然损失函数
- cost(hθ(x),y) = -log(hθ(x)) if y=1 (hθ(x): 概率值 y: 目标类别)
- cost(hθ(x),y) = -log(1 - hθ(x)) if y=0 (hθ(x): 概率值 y: 目标类别)
-
完整的损失函数
cost(hθ(x),y) = -yi*log(hθ(x)) -(1-yi)*log(1 - hθ(x)) i的取值: 从1到m
样本: [样本1, 样本2, 样本3, 样本4]
阈值:0.5
属于1的概率值(预测):[[0.6],[0.1],[0.51],[0.7]]
真实类别:[1 0 0 1]
四个特征的损失值相加: -[1*log(0.6) + 0*log(0.1) + 0*log(0.51)+1*log(0.7)] (也可以理解为信息熵)
使用梯度下降,更新权重, cost损失的值越小,那么预测的类别准确度更高
哪一个类别少, 判定概率值就是这个类别 恶性 正例 良性 反例
4. 对数似然损失和均方误差的对比
- 均方误差:不存在多个局部最低点,只有一个最小值
- 对数似然损失:多个局部最小值, 目前解决不了的问题, 梯度下降求解
-
- 多次随机初始化,多次比较最小值的结果
-
- 求解过程中,调整学习率,尽量改善
-
- 尽管没有全局最低点, 但是效果都是不错的
-
5. 逻辑回归API
-
sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)
- Logistic回归分类器
- coef_:回归系数
6. 逻辑回归预测癌症案例
-
数据集:https://archive.ics.uci.edu/ml/machine-learning-databases/
-
数据描述
- 699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值。
- 包含16个缺失值,用”?”标出。
-
代码实现
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 原始数据没有列名,所以要手动指定一下
columns = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=columns)
# 缺失值处理
data = data.replace(to_replace='?', value=np.nan)
data = data.dropna()
# 进行数据分割
x_train, x_test, y_train, y_test = train_test_split(data[columns[1:-1]], data[columns[-1:]], test_size=0.25)
# 进行标准化处理
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# 逻辑回归也测
# 链接:https://blog.csdn.net/linzhjbtx/article/details/85331200
lg = LogisticRegression(C=1.0, solver='lbfgs')
lg.fit(x_train,y_train.values.reshape(-1,))
print(lg.coef_)
y_predict = lg.predict(x_test)
print("准确率:", lg.score(x_test,y_test))
print("召回率:", classification_report(y_pred=y_predict, y_true=y_test, labels=[2, 4], target_names=['恶性','良性']))
7. 逻辑回归总结
- 应用
- 广告点击率预测 https://www.kaggle.com/c/avito-context-ad-clicks
- 电商购物搭配推荐
- 适合需要得到一个分类概率的场景
- 缺点:当特征空间很大时,逻辑回归的性能不是很好(看硬件能力)
8. 逻辑回归和朴素贝叶斯的对比
-
逻辑回归
- 解决问题:二分类
- 应用场景: 癌症,二分类需要概率
- 参数: 政策化力度
- 属于判别模式,没有先验概率(k-近邻,决策树,随机森林,神经网络)
-
朴素贝叶斯
- 解决问题: 多分类
- 应用场景:文本分类
- 没有参数
- 属于生成模式,有先验概率(隐马尔可夫模型)