机器学习——逻辑回归

之前学习了线性回归,本篇文章将介绍逻辑回归,逻辑回归和线性回归同样都属于有监督机器学习,那么它们有什么区别呢:
线性回归:预测一个连续的值;逻辑回归:预测一个离散的值

下面看一个例子:
良性肿瘤 or 恶性肿瘤
有一家医院希望我们能开发出一款分类器,可以通过数据分析出一块肿瘤到底是良性的,还是恶性的。
0: 负例 “Negative Class” (良性肿瘤)
1: 正例 “Positive Class” (恶性肿瘤)
这样得到下图:
在这里插入图片描述
在这里插入图片描述
当我们要做二分类的时候,我们一般只希望得到两个值 y = 0 或 1。但是, 线性回归得到的值是在一个范围内的连续值,而且可能远 > 1 或远 < 0,这样会给分类带来困难
我们希望的值域:
在这里插入图片描述
那么我们将模型更新:
在这里插入图片描述
在这里插入图片描述
但是这样的模型是阶跃函数,是不连续的。
我们继续更新模型:
在这里插入图片描述
这样就引出了连续的模型:Sigmoid函数,sigmoid函数也叫logistic函数
如果想要模型的y值坐落在[0,1]的区间上那么就需要使用sigmoid函数
在这里插入图片描述
在这里插入图片描述
那么为什么要用Sigmoid函数呢?
数学上,是根据广义线性回归的模型推导所得的结果;
直观上,
(1)输出范围有限,数据在传递中不容易发散
(2)抑制两头,对中间细微变化敏感,对分类有利
(3)性质优秀,方便使用(Sigmoid函数是平滑的,而且任意阶可到,一阶二阶导数可以直接由函数得到不用求导,这在做梯度下降的时候很实用)

熵的引入

熵的意义:

热力学上:熵是一种测量分子不稳定的指标,分子运动越不稳定,熵就越大
信息论(香农):熵是一种测量信息量的单位,信息熵,包含的信息越多,熵就越大。
机器学习:熵是一种测量不确定性的单位,不确定性越大,概率越小,熵就越大!

越不可能的事件发生了,我们获取到的信息量就越大。信息量的公式:
在这里插入图片描述
熵:表示所有信息量的期望。熵的公式:
在这里插入图片描述
在这里插入图片描述
交叉熵公式:
在这里插入图片描述
逻辑函数的损失函数-- 交叉熵(Cross-Entropy)
在这里插入图片描述
变换后公式如下:
在这里插入图片描述
那么损失函数如下:
在这里插入图片描述
逻辑回归的梯度下降:
在这里插入图片描述
在这里插入图片描述
重复直到收敛:
在这里插入图片描述
下面我们用逻辑回归处理鸢尾花数据集
在这里插入图片描述
Sepal length: 花萼长度
Sepal width: 花萼宽度
Petal length: 花瓣长度
Petal width: 花瓣宽度

鸢尾花根据以上的长度和宽度的不同可以分为三类:
山鸢尾花(Setosa)
在这里插入图片描述
杂色鸢尾花(Versicolour)
在这里插入图片描述
维吉尼亚鸢尾(Virginica)
在这里插入图片描述
下面我们就用逻辑回归处理数据集,并做出预测,代码如下:

"""
逻辑回归(处理鸢尾花数据集)
"""
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt

iris = datasets.load_iris()
# print(type(iris['data']))
# print(iris)
# print(iris.keys())
# print(iris['DESCR'])
# print(iris['feature_names'])

# 因为花瓣的相关系数比较高,所以分类效果比较好,所以我们就用花瓣宽度当作X
X = iris['data']
# print(X)

# 把分类结果拿出来
y = iris['target']
# print(y)

# 用以上的数据做逻辑回归
log_reg = LogisticRegression(multi_class='ovr', solver='sag', max_iter=10000)
log_reg.fit(X, y)
# print("w1", log_reg.coef_)
# print("w0", log_reg.intercept_)

# 创建新的数据集去预测 创建0到3的1000个等差数列,(-1,1)就是让他在不知道多少行的情况下,变成1列,
X_new = np.array([[5.1, 3.5, 1.4, 0.2]])
# np.set_printoptions(suppress=True)
# print(X_new)

# 用来预测分类的概率值,比如第一个行第一个概率最大,那么得到的y=0
y_proba = log_reg.predict_proba(X_new)
# 用来预测分类号的
y_hat = log_reg.predict(X_new)
print(y_proba)
print(y_hat)

输出结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值