聊聊机器学习之逻辑回归

一说到机器学习算法,相信很多人想到的第一个机器学习算法就是逻辑回归,那么什么是逻辑回归?怎么用逻辑回归这一算法呢?这篇文章就跟大家来聊聊这个话题。

1、什么是逻辑回归

用一句话来解释什么是逻辑回归:逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

这句话包含了五个重要信息点:

  • 逻辑回归的假设:数据服从伯努利分布

  • 逻辑回归的损失函数:极大似然函数

  • 逻辑回归的求解方法:梯度下降

  • 逻辑回归的目的:将数据二分类

  • 逻辑回归的分类方式:划定一个阈值,大于这个阈值的是一类,小于这个阈值的是另外一类

1.1 逻辑回归的假设

伯努利分布又名两点分布0-1分布,伯努利试验是只有两种可能结果的单次随机试验,即对于一个随机变量X而言:

伯努利试验都可以表达为“是或否”的问题。例如,抛一次硬币问题,抛中为正面的概率是p,抛中为负面的概率是1−p.

1.2 逻辑回归的损失函数:极大似然函数

损失函数就是预测结果与实际值的差值的各种方式求和,作用是衡量模型预测的好坏,损失函数模型越小,模型越好。

损失函数一般有四种,平方损失函数,对数损失函数,HingeLoss0-1损失函数,绝对值损失函数。将极大似然函数取对数以后等同于对数损失函数。在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的。

极大似然函数是由极大似然得到的一种损失函数

极大似然估计的原理,用一张图片来说明,如下图所示:

总结起来,最大似然估计的目的就是:利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。

原理:极大似然估计是建立在极大似然原理的基础上的一个统计方法,是概率论在统计学中的应用。极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。

1.3 梯度下降

梯度下降包含:随机梯度下降,批梯度下降,small batch 梯度下降三种方式。

批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。

随机梯度下降是以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。

小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。

由于极大似然函数无法直接求解,我们一般通过对该函数进行梯度下降来不断逼急最优解,即求极大似然函数的最小值。

2 逻辑回归的应用案例(python sklearn库)


import xlrd
import matplotlib.pyplot as plt
import numpy as np
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
 
 
data = xlrd.open_workbook('gua.xlsx')
sheet = data.sheet_by_index(0)
Density = sheet.col_values(6)
Sugar = sheet.col_values(7)
Res = sheet.col_values(8)
 
# 读取原始数据
X = np.array([Density, Sugar])
# y的尺寸为(17,)
y = np.array(Res)
X = X.reshape(17,2)
 
# 绘制分类数据
f1 = plt.figure(1)
plt.title('watermelon_3a')
plt.xlabel('density')
plt.ylabel('ratio_sugar')
# 绘制散点图(x轴为密度,y轴为含糖率)
plt.scatter(X[y == 0,0], X[y == 0,1], marker = 'o', color = 'k', s=100, label = 'bad')
plt.scatter(X[y == 1,0], X[y == 1,1], marker = 'o', color = 'g', s=100, label = 'good')
plt.legend(loc = 'upper right')
plt.show()
# 从原始数据中选取一半数据进行训练,另一半数据进行测试
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.5, random_state=0)
 
# 逻辑回归模型
log_model = LogisticRegression()
# 训练逻辑回归模型
log_model.fit(X_train, y_train)
 
# 预测y的值
y_pred = log_model.predict(X_test)
 
# 查看测试结果
print(metrics.confusion_matrix(y_test, y_pred))
print(metrics.classification_report(y_test, y_pred))

3 逻辑回归的优缺点

3.1 优点

形式简单,模型的可解释性非常好:从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。

模型效果不错:在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。

训练速度较快:分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。

资源占用小,尤其是内存:因为只需要存储各个维度的特征值。

方便输出结果调整:逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cutoff,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)。

3.2 缺点:

准确率并不是很高:因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。

很难处理数据不平衡的问题:举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。

处理非线性数据较麻烦:逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。逻辑回归本身无法筛选特征。有时候,我们会用gbdt(梯度提升决策树)来筛选特征,然后再上逻辑回归。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值