机器学习算法基础 Day7

本文介绍了逻辑回归的基础知识,包括模型的保存与加载、分类算法逻辑回归的损失函数和优化方法。逻辑回归适用于二分类问题,通过sigmoid函数将连续值映射到[0,1]区间作为概率。文章详细讨论了逻辑回归的损失函数(对数似然损失)、梯度下降优化过程,并提供了案例分析,如乳腺癌肿瘤预测。同时,还涵盖了最大似然估计、随机梯度下降法及其在解决实际问题中的应用,如预测银行客户是否开设账户。" 122642936,8760652,Flex布局:justify-content属性详解,"['CSS3', 'CSS', '前端开发', 'HTML']
摘要由CSDN通过智能技术生成

模型的保存与加载

from sklearn.externals import joblib

保存:

joblib.dump(rf,'test.pkl')

加载:

estimator = joblib.load('test.pkl')

注:文件格式pkl

加载训练好的模型,就不需要再进行模型训练。

分类算法-逻辑回归

线性回归的式子作为逻辑回归的输入。

逻辑回归是解决二分类问题的利器

输入:h(w)=w_0+w_1x_1+w_2x_2+...=w^Tx

 逻辑回归公式:

h_\theta (x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}

g(z)=\frac{1}{1+e^{-z}}

输出:[0,1]区间的概率值,默认0.5为阀值

g(z)为sigmoid函数——[0,1],z等于回归的结果 

逻辑回归的损失函数、优化

与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解

logistic回归详解(二):损失函数(cost function)详解_bitcarmanlee的博客-CSDN博客_逻辑回归 损失函数

 

OR:

四个损失值相加:(可看作信息熵,但不是信息熵)——对数似然损失

1log(0.65)+0log(0.51)+0log(0.32)+1log(0.73)

用梯度下降进行优化

和信息熵的关系

信息熵越小越好,损失越小,越确定

均方误差与对数似然损失的对比

均方误差——不存在多个局部最低点,只有一个最小值,但是效果都是不错的(不存在多个局部最低点)

对数似然损失——多个局部最小值(目前解决不了),使用梯度下降求解,存在多个局部最小值。解决办法:1.多次随机初始化,进行比较;2.求解过程中,调整学习率。

尽量改善方案:

1、多次随机初始化,多次比较最小值结果

2、求解过程当中,调整学习率

优化方案:逻辑回归1-原理、损失函数、优化方案 - Trouvaille_fighting - 博客园

  1. 多次随机初始化,多次比较最小值结果
  2. 求解过程当中,调整学习率

在这里插入图片描述

sklearn逻辑回归API

sklearn.linear_model.LogisticRegression(penalty(正则化)=‘l2’, C = 1.0)

LogisticRegression回归案例 - 良/恶性乳腺癌肿瘤预测

coef_:回归系数

penalty:正则化项的选择。

c:正则化系数λ的倒数,float类型,默认为1.0。

LogisticRegression回归案例——良/恶性乳腺癌肿瘤预测
原始数据的下载地址:

Index of /ml/machine-learning-databases/breast-cancer-wisconsin

数据描述

(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值。

(2)包含16个缺失值,用”?”标出。

pandas使用
pd.read_csv(’’,names=column_names)

  • column_names:指定类别名字,['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']
  • return:数据
  • replace(to_replace=’’,value=):返回数据
  • dropna():返回数据
  • 分类流程

1、网上获取数据(工具pandas)

2、数据缺失值处理、标准化

3、LogisticRegression估计器流程
 

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
def logistic():
    """
    逻辑回归做二分类癌症预测
    :return:
    """
    ### 构造列标签名字
    column = ['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("./案例/04 -肿瘤预测/breast-cancer-wisconsin.data",names=column)
    ### 缺失值处理
    data = data.replace(to_replace='?',value=np.nan)
    data = data.dropna() # 把nan删掉
    x_train,x_test,y_train,y_test = train_test_split(data[column[0:9]],data[column[9]],test_size=0.25)
    ### 进行标准化
    std = StandardScaler()
    x_train = std.fit_transform(x_train)
    x_test = std.fit_transform(x_test)
    ### 逻辑回归预测
    lo = LogisticRegression()
    lo.fit(x_train,y_train)
    print(lo.coef_)
    y_predict = lo.predict(x_test)
    print("准确率:",lo.score(x_test,y_test))
    print('召回率:',classification_report(y_test,y_predict,labels=[2, 4],target_names=['良性','恶性']))
    return None
if __name__ == '__main__':
    logistic()

结果:

准确率: 0.9590643274853801
召回率:               precision    recall  f1-score   support
 
          良性       0.98      0.96      0.97       116
          恶性       0.91      0.96      0.94        55
 
    accuracy                           0.96       171
   macro avg       0.95      0.96      0.95       171
weighted avg       0.96      0.96      0.96       171

LogisticRegression回归案例——上下文点击
Avito Context Ad Clicks | Kaggle:Avito Context Ad Clicks | Kaggle

LogisticRegression总结


应用:广告点击率预测、电商购物搭配推荐,是否患病,金融诈骗

优点:适合需要得到一个分类概率的场景,简单,速度快

缺点:当特征空间很大时,逻辑回归的性能不是很好(看硬件能力),不好处理多分类问题

softmax方法-逻辑回归在多分类问题上的推广

多分类问题
决策树、随机森林、神经网络中的softmax方法——图像识别

朴素贝叶斯——文本分类

生成模型和判别模型
有没有先验概率(总结历史数据的先验信息)

无(判别模型)——K-近邻、决策树、随机森林、神经网络

有(生成模型)——朴素贝叶斯、隐马尔可夫模型

附录:

逻辑回归全解析

本文章向大家介绍逻辑回归,主要包括逻辑回归使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

逻辑回归(超详细)逻辑回归 - 码农教程

1. 逻辑回归中的条件概率

谈到分类,也许没有比逻辑回归更简单的方法了,受到工业界的极大的欢迎。逻辑回归的基本概念,以及如何一步步来构建逻辑回归中起到最核心作用的条件概率。

二分类问题

  • 预测贷款违约情况(会/不会)
  • 预测广告点击率(会/不会)
  • 情感分析(正面/负面)
  • 预测疾病(阳性/阴性)

基准(Baseline)

基准(baseline)在建模过程中非常重要。简单来讲,在设计模型的阶段, 首先试图通过简单的方法来快速把系统搭起来, 之后逐步把模块细化, 从而不断得到更好的解决方案。对于分类任务, 逻辑回归 模型可以称得上

是最好的基准,也是比较靠谱的基准。 在实际工作中,切忌一上来就使用复杂的模型,这是不可取的。

分类问题

二分类问题

 核心问题是: 如果通过条件概率 p(y|x) 来描述x和y之间的关系。 

逻辑回归 实际上是基于线性回归模型构建起来的, 所以这里也希望通过线性回归方程一步步来构造上述的条件概率p(y∣x)。

我们是不能把条件概率p(y∣x)表示成 p(y|x) = wT x + b,因为右边的式子不满足条件概率的性质。

那么是否可以改造线性回归 wT x + b使得它的值域映射到(0, 1)区间了?

如何把正无穷到负无穷区间的值映射到(0,1)区间?

  答案就是使用逻辑函数。

 逻辑函数

逻辑函数的应用非常广泛, 特别是在神经网络中处处可见, 很大程度上是源于它不可或缺的性质:

可以把任意区间的值映射到(0, 1)区间。这样的值既可以作为概率, 也可以作为一种权重。另外,由于大多数模型在训练时涉及到 导数 (derivative)的计算, 同时逻辑函数的导数具有极其简单的形态, 这也使得逻辑函

数受到了很大的欢迎。

样本的条件概率

  当把 线性回归 的式子和逻辑函数拼在一起的时候, 就可以得到合理的 条件概率 的表达式。

在 逻辑回归 中我们针对的是 二分类问题 , 所以一个样本必须要属于其中的某一个分类。这就意味着, 条件概率 p(y=1|x) 和 p(y=0|x) 之和一定会等于1。

 对于逻辑回归, 它的参数是 w, b, 前者是向量, 后者是标量。在这里, 两个条件概率的表达式是可以替换顺序的。只要能保证两个条件概率之和等于1就可以了。

2. 逻辑回归的目标函数

如何构造逻辑回归模型的目标函数,它是从条件概率获得。先理解最大似然估计,之后在最大似然的框架下试着推导出逻辑回归的目标函数。

最大似然估计

最大似然估计(Maximum Likelihood Estimation)在机器学习建模中有着举足轻重的作用。它可以指引我们去构造模型的目标函数, 以及求出使 目标函数 最大或者最小的参数值。

如何理解 最大似然估计 呢?

  一个比较抽象的解释是: 假如有个未知的模型(看作是黑盒子), 并且它产生了很多能观测到的样本。这时候, 我们便可以通过最大化这些样本的概率反过来求出模型的最优参数 ,这个过程称之为最大似然估计

逻辑回归的似然函数

逻辑回归的似然函数

  对于单个样本的 条件概率 已经定义过了, 这个概率也可以看作是似然概率。下一步得把所有的样本全部考虑进来, 这时候我们得到的就是所有样本的似然概率。

 有了所有样本的 似然概率 之后, 我们的目标就是要求出让这个似然概率最大化的模型的参数( 对于逻辑回归模型就是w, b),这个过程称之为最大似然估计(maximum likelihood estimation)

逻辑回归的最大似然估计

得到了逻辑回归的目标函数之后,首先来做一层简化,就是把乘积的形式改造成加法形式。这对于后续的运算有很大的帮助。

  

 经过一系列的简化操作之后,发现不能继续再简化了。剩下的工作就是要寻找让目标函数最小化的参数w, b。那如何求出最优解呢? 一个经典的优化算法是梯度下降法!

3. 梯度下降法

优化领域的核心内容 - 梯度下降法。几乎所有的机器学习模型我们均可以通过梯度下降法来学出最优的参数。另外,我们试着通过梯度下降法来求解逻辑回归的最优参数。

求函数的最大值/ 最小值

对于求解函数的最优参数, 通常有两种简单的方法:

  • 把导数设置为0
  • 基于迭代式的算法来求解, 如梯度下降法

    第一种方法我们也称之为解析解(Analytic Solution)。但这里需要注意的一点是并不是所有的目标函数都可以通过把 导数 设置为0的方式来求解的。一个经典的例子就是逻辑回归的目标函数。 对于这类的问题我们不得不采用另外一种更通用的方法-迭代式的优化算法。其中最经典的无非就是梯度下降法

梯度下降法

梯度下降法 非常实用, 几乎所有的模型我们都可以使用梯度下降法来训练。这也说明此方法是具有通用性的,不管问题有多复杂。特别是对于深度学习, 它的作用无可替代, 我们常说的反向传播算法 (back-

propagation)其实本质上就是梯度下降法。需要注意的一点是: 梯度下降法依赖于求导, 这也是为什么对函数的求导能力如此重要!

 对于梯度下降法来说,有一个重要的参数叫作学习率(learning rate), 我们可以把它看作是可调节的参数(也称之为超参数)。学习率对于收敛以及对最终的结果起到很重要的作用。

对于逻辑函数的求导

梯度下降法的核心是对函数的求导。 逻辑回归的目标函数本身具有一定的复杂度, 其中就涉及到对逻辑函数的求导过程。对逻辑函数的求导:

逻辑回归的梯度下降法

对于逻辑回归,我们有两组参数分别为w, b, 所以求导的关键也就围绕这两组参数。这个过程中会涉及到一些 复合函数的求导法则 。

 有了对w, b的结果之后,最终可以写出整个逻辑回归的梯度下降法的过程。

梯度下降法过程中, 如何判断迭代过程是否已经收敛 ?

  • 如果在相邻两个时间段损失函数没有任何变化或者变化很小,即可以认为优化过程已收敛
  • 如果在相邻两个时间段参数的值没有变化或者变化很小,即可以认为优化过程已收敛

当我们使用梯度下降法来求解逻辑回归的 最优解 时,不管怎么初始化,结果是一样的。主要的原因是逻辑回归的目标函数为凸函数。

如果一个函数为 凸函数 ,它只有 全局最优解 ,所以不管怎么初始化,最后收敛到的结果是同一个点。

4. 随机梯度下降法

随机梯度下降法以及小批量梯度下降法。这两者均是梯度下降法的变种,适合用在数据量比较大的场景。实际上,工业界中用得最广泛的是小批量梯度下降法。

梯度下降法的缺点

当样本很多的时候, 每一次迭代所花费的时间成本是很高的。举个例子, 当数据集里有一百万个样本的时候, 每一次的参数更新就需要循环所有的样本并把它们的梯度做累加。

随机梯度下降法

随机梯度下降法(SGD) 可以看作是梯度下降法的极端的情况。在梯度下降法里,每次的参数更新依赖于所有的样本。然而, 在随机梯度下降法里, 每一次的迭代不再依赖于所有样本的梯度之和, 而是仅仅依赖于其中

一个样本的梯度 。所以这种方法的优势很明显, 通过很“便宜”的方式获得梯度, 并频繁的对参数做迭代更新, 这有助于在更短的时间内得到收敛结果。

虽然SGD用很低的成本可以更新到模型的参数,但也有自身的缺点。

  由于梯度的计算仅依赖于一个样本,计算出的结果包含较大的噪声;实际上, SGD的收敛效率通常是更高的, 而且有些时候SGD的最后找出来的解更优质。

由于在 随机梯度下降法中, 我们用一个样本的 梯度 来代替所有样本的梯度之和, 计算出来的结果包含大量噪声,并且不太稳定。为了部分解决这个问题,我们通常会把学习率设置为较小的值, 这样可以有效削弱梯度

计算中带来的不稳定性。

相比梯度下降法, 当我们使用随机梯度下降法的时候可以看到每一次迭代之后的目标函数或者损失函数会有一些波动性。有时候的更新会带来目标值的提升,其他时候的更新可能反而让目标值变得更差。但只要实

现细节合理,大的趋势是沿着好的方向而发展的。

小批量梯度下降法

梯度下降法和随机梯度下降法其实可以看作是两个极端, 前者在计算梯度时考虑所有的样本, 后者则仅仅考虑其中的一个样本。既然这两个极端各有各自的优缺点,那是否可以使用一个折中的方案呢? 答案是肯定

的,这个方法叫作 小批量梯度下降法 (mini-batch gradient descent)。 它每次从样本中选择一部分子集,并基于这些选出来的样本计算梯度, 并做参数的更新。

下面的代码用来实现基于梯度下降法的逻辑回归。如何把循环的代码写成矩阵、向量的形式。

比较不同的算法

对于各类梯度下降法做一个总结:

  • 在工业界中,最常用的方法为小批量梯度下降法
  • 小批量梯度下降法也有助于更好地利用GPU的计算能力
  • 小批量梯度下降法折中了梯度下降法和随机梯度下降法各自的优缺点,更好地解决梯度噪声的问题,更新更加稳定。
  • 随机梯度下降法或者小批量梯度下降法有助于解决鞍点(saddle point)的问题。

5. 预测银行客户是否开设账户

用逻辑回归模型来解决一个分类问题 - 预测银行客户是否开设账户。在这个过程中,会涉及到数据可视化、独热编码、F1-SCORE等技术。

基于用户的相关信息(如年龄,教育程度、婚姻状况等)来预测是否用户未来会有开设定期存款账户的需求。这种问题在银行业务上很常见,对于银行来讲,他们希望挖掘出一些潜在的客户,并精准地提供一些相关的服

务。 这个问题是很经典的二分类问题(预测结果为会开设或者不会开设),很适合用逻辑回归来解决。

理解数据

理解数据是解决问题的第一步,在这里我们从多方位来理解一下数据本身的一些特点比如哪些特征具有更好地预测能力,下面给出了部分数据的快照以及字段的说明。

 对于二分类问题来讲,一个很重要信息是标签数据如每个标签的占比有多少。当一类标签的占比明显高于另外一类的时候,我们其实要采取一些措施的,这里包括对样本的处理,也包括评估结果上的处理。

对于每一个特征,我们也可以做一些分析,如观察哪些特征对最后的预测产生更重要的影响。对于这些特征的分析我们可以通过一些可视化的分析即可以得到。

特征选择

对特征本身的重要性有大概的认知之后,我们可以选择把那些关联度不高的特征可以从数据中剔除掉。对于特征个数很多的数据来讲,这种操作还是非常有效的。但由于目前案例的数据特征并没有特别多,在这里先保留所有的特征。关于 特征选择 ,其实有很多不同的方法如根据 相关性 来选择、根据 贪心算法 来选择、根据树模型来选择等等,在后续的课程里会做详细的讲解。

类别变量和独热编码

对于类别型变量如本科、硕士、博士,在放到模型之前我们需要做特殊的处理,因为我们都知道模型的输入一定是数量化的信息,那如何把“本科,硕士,博士“这些字段转换成数量化的信号呢?

如果一个特征的值为类别型变量,”本科“, ”硕士“,”博士“,每一个值如何转换成数字呢?

硕士大于本科, 博士大于硕士, 类似于男大于女, 或者女大于男。 从这个角度考虑,我们就不能把类别型变量直接设置为某一个具体的值, 因为这些值本身是有大小关系的。

 正确的做法是把变量值转化为独热编码的形态

独热编码

对于类别型变量,正确做法是使用独热编码(one-hot encoding), 这也是最常用的编码方式。 然后直接把独热编码输入到模型就可以了。 一般来讲,独热编码的转换会让特征维度上升,比如对于一个类别型变量 - “城

市”, 可能的取值为1000多个,那当我们把这个变量转换成独热编码之后就变成了1000多维的向量。

模型的评估

对于这个案例,标签类型的占比是很不平衡的,这种数据我们也称之为不平衡数据(imbalanced data)。 对于不平衡数据,评估标准上也需要格外地注意,因为选错了评估标准可能导致建模本身失去了意义。

假如我们有1000个样本,其中990个为负样本,10个为正样本,最后我们以准确率来评估模型的效果。

由于负样本很多,假如把所有的样本分类成负样本,准确率已经高达99%,看似训练得很好。

在数据不平衡的场景下,准确率会失去意义。我们可以不训练任何的模型,直接把所有的样本分类成样本,准确率仍然高达99%,所以这个说明不了任何问题。 在这种情况下,我们倾向于使用另外一种评估标准叫作F1-SCORE。

调参重要性:

总结:

逻辑回归简单版本:

学习目标

  • 知道逻辑回归的损失函数
  • 知道逻辑回归的优化方法
  • 知道sigmoid函数
  • 知道逻辑回归的应用场景
  • 应用LogisticRegression实现逻辑回归预测
  • 知道精确率、召回率指标的区别
  • 知道如何解决样本不均衡情况下的评估
  • 了解ROC曲线的意义说明AUC指标大小
  • 应用classification_report实现精确率、召回率计算
  • 应用roc_auc_score实现指标计算

逻辑回归的应用场景:

  • 广告点击率
  • 是否为垃圾邮件
  • 是否患病
  • 金融诈骗
  • 虚假账号

看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器。

逻辑回归的原理

要想掌握逻辑回归,必须掌握两点:

  • 逻辑回归中,其输入值是什么
  • 如何判断逻辑回归的输出

1、输入

逻辑回归的输入就是一个线性回归的结果。

2、激活函数

  • sigmoid函数

  • 判断标准
  • 回归的结果输入到sigmoid函数当中
  • 输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值

逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,并且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例)。(方便损失计算)

输出结果解释(重要):假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值。现在有一个样本的输入到逻辑回归输出结果0.6,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别。那么反之,如果得出结果为0.3那么,训练或者预测结果就为B(0)类别。

所以接下来我们回忆之前的线性回归预测结果我们用均方误差衡量,那如果对于逻辑回归,我们预测的结果不对该怎么去衡量这个损失呢?我们来看这样一张图。

那么如何去衡量逻辑回归的预测结果与真实结果的差异呢?

损失以及优化

1、损失

逻辑回归的损失,称之为对数似然损失,公式如下:

  • 分开类别:

怎么理解单个的式子呢?这个要根据log的函数图像来理解

  • 综合完整损失函数

看到这个式子,其实跟我们讲的信息熵类似。

接下来我们就带入上面那个例子来计算一遍,就能理解意义了。

我们已经知道,log§, P值越大,结果越小,所以我们可以对着这个损失的式子去分析

2、优化

同样使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值