机器学习之逻辑回归及扩展

 

什么是逻辑回归

逻辑回归(logistic regression),虽然名字上有“回归”两字,但它实际应用的是处理分类问题(二分类、多分类)。逻辑回归的核心思想是:如果回归的结果输出是一个连续值,而值的范围是无法限定的,那么想办法把这个连续结果值映射为可以帮助我们判断的结果值,从而进行分类。所以,从本质上讲,逻辑回归是在回归的基础上,进行了特殊的改进(利用激活函数),而被用于分类问题上。

 

 

逻辑回归的激活函数

Sigmoid函数,因图形像S,才得名Sigmoid函数

 

 

Sigmoid 函数的求导过程如下,导数可以用原函数表示出,这是sigmoid函数的一个特点

因为个g(x)取值在0-1之间,即如果看成概率的话,p(1-p),把值域压缩到0-1之间,以概率的形式表示。这特性使得在一些机器学习过程可以用作打分排序之类。

 

 

逻辑回归模型

Sigmoid函数作为激活函数,将原线性模型代入得到逻辑回归的模型

 

 

逻辑回归将y值压缩到0-1之间,可以以0.5为分界对样本进行二分类,大于0.5->1,小于0.5->0,即逻辑回归可以用于解决二分类问题。

 

 

Logistic回归的参数估计

Logistic回归的参数估计是利用最大似然估计(负对数似然)方法

假定

 

 

连到一起则:

 

 

似然函数为

两边取对数,即对数似然:

 

 

得到逻辑回归的目标函数为

 

 

 

 

目标函数参数求解

利用梯度下降法求解参数

先求梯度

Logistic回归参数的学习规则如下,迭代直到收敛,求得参数

 

 

 

 

Sofmax 回归

Sofmax 回归是逻辑回归的推广,也可以说逻辑回归是softmax回归的特例。逻辑回归是用来处理二分类问题,softmax是解决多分类问题。

先说下指数归一化

归一化是把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

指数归一化即以指数形式做归一化,以自然底数e

参考下图(截图来自邹博课程)

扩展到θx

由此归纳得到Softmax回归概率:

类似逻辑回归求它的似然函数如下:

对数似然:

 

 

随机梯度:

根据以上使用梯度下降优化方法可以迭代求出最优参数,此处就不重复。

 

代码实战:

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model, model_selection

def load_data():
   '''
   加载用于分类问题的数据集
   :return: 一个元组,用于分类问题。元组元素依次为:训练样本集、测试样本集、训练样本集对应的标记、测试样本集对应的标记
   '''
   iris = datasets.load_iris()  # 使用 scikit-learn 自带的 iris 数据集
   X_train = iris.data
   y_train = iris.target
   return model_selection.train_test_split(X_train, y_train, test_size=0.25,
                                           random_state=0, stratify=y_train) 
# 分层采样拆分成训练集和测试集,测试集大小为原始数据集大小的 1/4

def mytest_LogisticRegression(*data):
   '''
   测试 LogisticRegression 的用法
   :param data: 可变参数。它是一个元组,这里要求其元素依次为:训练样本集、测试样本集、训练样本的标记、测试样本的标记
   :return: None
   '''
   X_train, X_test, y_train, y_test = data
   regr = linear_model.LogisticRegression()
   regr.fit(X_train, y_train)
   print('Coefficients:%s, intercept %s' % (regr.coef_, regr.intercept_))
   print('Score: %.2f' % regr.score(X_test, y_test))
   """score(X, y, sample_weight=None)
   Returns the mean accuracy(平均精度) on the given test data and labels.
   In multi-label classification, this is the subset accuracy
   which is a harsh metric since you require for each sample that each label set be correctly predicted."""
   # print(regr.predict(X_test)) # 预测值
   # print(regr.predict_log_proba(X_test))
   # print(regr.predict_proba(X_test))
if __name__ == '__main__':
   X_train, X_test, y_train, y_test = load_data()  # 加载用于分类的数据集
mytest_LogisticRegression(X_train, X_test, y_train, y_test)  
# 调用  mytest_LogisticRegression

 

关注-微-公众号【学习与成长资源库】获取更多免费学习资料

参考资料

https://blog.csdn.net/joshly/article/details/50494548

Python大战机器学习

周志华 机器学习

邹博 机器学习

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长青_changqingqingge01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值