02. 分类算法逻辑回归算法实现

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. 对数似然损失和均方误差的对比

  • 均方误差:不存在多个局部最低点,只有一个最小值
  • 对数似然损失:多个局部最小值, 目前解决不了的问题, 梯度下降求解
      1. 多次随机初始化,多次比较最小值的结果
      1. 求解过程中,调整学习率,尽量改善
      1. 尽管没有全局最低点, 但是效果都是不错的

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-近邻,决策树,随机森林,神经网络)
  • 朴素贝叶斯

    • 解决问题: 多分类
    • 应用场景:文本分类
    • 没有参数
    • 属于生成模式,有先验概率(隐马尔可夫模型)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值