1.介绍

1.1 sigmoid函数

逻辑回归中的sigmoid函数:
g(θ0+θ1X1+⋯θnXn)=h(θX)=p=eθX1+eθXg(θ_0+θ_1X_1+\cdotsθ_nX_n)=h(θX)=p=\frac{e^{θX}}{1+e^{θX}} g(θ0​+θ1​X1​+⋯θn​Xn​)=h(θX)=p=1+eθXeθX​
也可写成(分子分母同时除以eθX):
g(θ0+θ1X1+⋯θnXn)=h(θX)=p=11+e−θXg(θ_0+θ_1X_1+\cdotsθ_nX_n)=h(θX)=p=\frac{1}{1+e^{-θX}} g(θ0​+θ1​X1​+⋯θn​Xn​)=h(θX)=p=1+e−θX1​

得到的sigmoid函数图像为:

可知,当θX>=0,即θ01X1+…+θnXn>=0时,p>=0.5,预测y=1

当θX<0,即θ01X1+…+θnX<0时,p<0.5,预测y=0

1.2 代价函数

为什么不使用像线性回归那样的代价函数?

如图,因为所得到的代价函数为非凸函数,会有很多个局部最优解,使用梯度下降时不一定能够收敛到全局最小值。

sigmoid函数:
hθ(x)=11+e−θxh_\theta(x)=\frac{1}{1+e^{-\theta x}} hθ​(x)=1+e−θx1​

因此,采用如下的代价函数:

写在一起如下:

使用梯度下降求θ:

∂J(θ)∂θj=(hθ(x)−y)xj\frac{\partial J(\theta)}{\partial\theta_j}= (h_\theta(x)-y)x_j ∂θj​∂J(θ)​=(hθ​(x)−y)xj​
可得:
θj:=θj−α∑i=1m(hθ(x)(i)−y(i))xj(i)\theta_j:=\theta_j-\alpha\sum_{i=1}^m(h_\theta(x)^{(i)}-y^{(i)})x_j^{(i)} θj​:=θj​−αi=1∑m​(hθ​(x)(i)−y(i))xj(i)​
其中i表示第几个样本,j表示第几个特征值

1.3 多元分类:一对多

思想:将多个类别分成独立的二元问题,然后分别求出各个分类的代价函数,再将测试集的数据代入所获得的结果中,取结果最大的预测概率,就能判断出这个数据属于哪一个类别。

使用逻辑回归将鸢尾花数据进行分类。鸢尾花数据为3类,属于多元分类问题。可以将其分解成多个二元问题,即对于每个类别,进行模型训练得到模型,然后对于测试集中的每个数据,使用得到的参数对其进行计算,得到的最大值即为这个数据属于的类别。

2.代码

"""@Author: sanshui
@Time:2021/11/15 15:15
@Software: PyCharm
"""import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_reportdef get_data():"""获取数据集:return:"""iris = load_iris()return iris.data, iris.targetdef split_data(data, target):"""划分数据集:param data::param target::return:"""data = np.array(data)target = np.array(target)target = np.reshape(target, (target.shape[0], 1))# 正则化数据,防止数据大小本身对结果造成影响sd = StandardScaler()data = sd.fit_transform(data)# 拼接特征值与类别dataset = np.hstack((data, target))n = dataset.shape[0]# 打乱数据np.random.shuffle(dataset)# 划分数据集,返回训练集与测试集train = dataset[:int(0.7 * n), :]test = dataset[int(0.7 * n):, :]return train, testdef sigmoid(z):"""sigmoid函数:param z::return:"""return 1 / (1 + np.exp(-z))def draw_sigmoid():"""画出sigmoid函数:return:"""fig, ax = plt.subplots()x_data = np.arange(-10, 10, 0.1)ax.plot(x_data, sigmoid(x_data))plt.show()def calCost(dataset, theta):"""计算代价函数:param dataset::param theta::return:"""x = dataset[:, :-1]y = dataset[:, -1:]z = x @ theta.T# 训练数据个数,或者用m = y.shape[1]m = y.sizepara1 = np.multiply(-y, np.log(sigmoid(z)))para2 = np.multiply((1 - y), np.log(1 - sigmoid(z)))# 代价函数YJ = 1 / m * np.sum(para1 - para2)return Jdef gradient(dataset, theta, iters, alpha):"""梯度下降:param dataset::param theta::param iters::param alpha::return:"""# 存放每次梯度下降后的损失值x = dataset[:, :-1]y = dataset[:, -1:]for i in range(iters):h_x = sigmoid(x @ theta.T)theta = theta - alpha / len(x) * (h_x - y).T @ xreturn thetadef get_per_classify_data(data, i):"""返回第i类的数据:param data:数据集:param i:类别:return:"""return data[data[:, -1] == i]def get_final_theta(data, i, theta, iters, alpha):"""获取梯度下降后的theta值:param data::param i::param theta::param iters::param alpha::return:"""dataset = get_per_classify_data(data, i)return gradient(dataset, theta, iters, alpha)def predict(dataset, theta_list):"""预测结果:param dataset::param theta_list::return:"""x = dataset[:, :-1]per_theta_list = [i[0] for i in theta_list]per_theta_list = np.array(per_theta_list)per_prob = sigmoid(np.dot(x, per_theta_list.T))# 返回每行最大值所在的索引,即概率最大的类别return np.argmax(per_prob, axis=1)if __name__ == '__main__':plt.rcParams['font.sans-serif'] = 'SimHei'  # 黑体plt.rcParams['axes.unicode_minus'] = False  # 显示负号data, target = get_data()train, test = split_data(data, target)draw_sigmoid()iters = 1000 # 迭代次数alpha = 0.5 # 学习率theta_list = []for i in range(data.shape[1]):theta = np.zeros((1, data.shape[1]))theta_list.append(theta)final_theta_list = []target_list = list(set(target))for i in target_list:theta_i = get_final_theta(train, i, theta_list[target_list.index(i)], iters, alpha)final_theta_list.append(theta_i)y_predict = predict(test, final_theta_list)# 查看预测准确度print(classification_report(y_predict, test[:, -1]))

3 预测结果

【机器学习】逻辑回归(LogisticRegression)分类鸢尾花相关推荐

  1. python数据挖掘学习笔记】十六.逻辑回归LogisticRegression分析鸢尾花数据

    但是很多时候数据是非线性的,所以这篇文章主要讲述逻辑回归及Sklearn机器学习包中的LogisticRegression算法 #2018-03-28 16:57:56 March Wednesday ...

  2. python分析鸢尾花数据_python数据挖掘学习笔记】十六.逻辑回归LogisticRegression分析鸢尾花数据...

    但是很多时候数据是非线性的,所以这篇文章主要讲述逻辑回归及Sklearn机器学习包中的LogisticRegression算法 #2018-03-28 16:57:56 March Wednesday ...

  3. 【python数据挖掘课程】十六.逻辑回归LogisticRegression分析鸢尾花数据

    今天是教师节,容我先感叹下. 祝天下所有老师教师节快乐,这是自己的第二个教师节,这一年来,无限感慨,有给一个人的指导,有给十几个人讲毕设,有几十人的实验,有上百人的课堂,也有给上千人的Python网络 ...

  4. 机器学习笔记-基于逻辑回归的分类预测

    天池学习笔记:AI训练营机器学习-阿里云天池 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有&quo ...

  5. ML机器学习算法(一): 基于逻辑回归的分类预测

    机器学习算法(一): 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个 ...

  6. 逻辑回归算法实现鸢尾花数据集的二分类

    1.介绍 前言   为了更好的理解本章内容,请参考下面的网址,自主学习一些矩阵求导运算. https://zhuanlan.zhihu.com/p/158182135机器学习约定规则: 向量对标量求导 ...

  7. 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例

    传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...

  8. 机器学习核心总结-概念、线性回归、损失函数、泛化及数据集划分、特征工程、逻辑回归和分类

    文章目录 一.机器学习入门概念 一.基本概念 机器学习:让机器进行学习和决策 机器学习分类:无监督学习.监督学习.强化学习 深度学习:模拟人脑,自动提取输入特征,是实现机器学习的方式之一 神经网络:一 ...

  9. 吴恩达机器学习之逻辑回归(二分类)

    吴恩达机器学习之逻辑回归 逻辑回归 二分类逻辑回归 二分类逻辑回归案例 python代码实现(含详细代码注释): 案例中几个问题的解析 不同于线性回归,逻辑回归的hθ(x)还需要用sigmoid函数处 ...

  10. 基于逻辑回归模型对鸢尾花数据集进行分类

    基于逻辑回归模型对鸢尾花数据集进行分类 理论知识 不做过多赘述,相关知识有:指数分布族.GLM建模(分布函数+连接函数,对于本例来说是二项分布+sigmoid函数).最大似然函数.交叉熵函数(评估逻辑 ...

最新文章

  1. 手撸一个JdbcTemplate,带你了解其原理
  2. 微信、陌陌等著名IM软件设计架构详解【转】
  3. nodogsplash的内部机制分析
  4. Mybatis入门---一对多、多对多
  5. 【转】使用多个 Azure 订阅(按照订阅收费)
  6. php设置session 生命周期,php会话(session)生命周期概念介绍及设置更改和回收
  7. c语言怎么运行出星星,C语言打印星星的问题
  8. heart beat 安装与配置
  9. matlab曲面程序,matlab练习程序(曲面拟合)
  10. Linux 查看进程之PS命令
  11. 南京大学计算机实验教程,南京大学 计算机系统基础 课程实验 2018(PA2)
  12. php 内网/外网ip判断
  13. vscode php格式化插件
  14. VS2008 开发 Sharepoint Workflow 遇到的一些细节
  15. Cascading介绍
  16. 二手车APP软件开发主要功能
  17. TGRS2022/遥感:An Empirical Study of Remote Sensing Pretraining遥感预训练的实证研究
  18. 计算机组成原理实验四 微程序控制器实验报告
  19. Vue过滤器-filter
  20. IOS启动动画(广告)

热门文章

  1. 动软代码生成器连接8.0.17版本的mysql
  2. 吴恩达深度学习——人脸识别与神经风格转换
  3. 解决NLPIR汉语分词系统init failed问题
  4. 2021年机修钳工(初级)考试资料及机修钳工(初级)证考试
  5. 欧姆龙c200he基本语言,欧姆龙C200HE-CPU42-ZE支持软件操作手册PLC手册 - 广州凌控
  6. Android 开源绘画板项目 (ScaleSketchPadDemo)
  7. 简单git用ssh方式下载代码
  8. MATLAB函数取整
  9. java的json解析工具_json在java中的几种解析工具的使用
  10. Drools规则引擎之动态规则