逻辑回归-分类算法

目录

                                          逻辑回归-分类算法

1 概述

2 sigmoid函数

3 逻辑回归公式

4 逻辑回归的损失函数

5 均方误差与对数自然损失对比

6 sklearn逻辑回归API

7 案例

8 总结


                                          逻辑回归-分类算法

1 概述

逻辑回归(Logistic Regression),简称LR。它的特点是能够是我们的特征输入集合转化为0和1这两类的概率。一般来说,回归不用在分类问题上,因为回归是连续型模型,而且受噪声影响比较大。如果非要应用进入,可以使用逻辑回归。

逻辑回归只能解决二分类问题,并且逻辑回归非常擅长解决二分类问题,因为任何二分类场景都能得出概率。

逻辑回归的输入和线性回归的输入是一摸一样的,所以线性回归会出现的问题逻辑回归也会出现,比如过拟合。逻辑回归的核心:线性回归的输入到问题分类,那就是sigmoid函数

2 sigmoid函数

该函数的特点:横坐标是输入的值,这些值经过函数映射后得到某个值,这些值的特点就是0-1之间,也就是说sigmoid能将你的输入转换为一个0-1的值,交叉点为0.5

因为概率值就是0-1之间的,所以sigmoid就能将逻辑回归的输入转换为一个概率值。

3 逻辑回归公式

e为一个常数2.71            z就是逻辑回归的结果

输出:[0,1]区间的概率值,默认0.5作为阀值                         注:g(z)为sigmoid函数

因为逻辑回归也有权重,也需要去迭代更新,那就应该也要有策略(损失函数)和优化的过程

4 逻辑回归的损失函数

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

对数似然损失函数:

注意:逻辑回归是选择某一个类别作为目标作为目标判断的概率(注意:哪一个类别少,判定概率值是指这个类别)。假设有A,B两种类型需要判断,逻辑回归只做一件事情就是判断属于A的概率是多少不判断属于B的概率(或者判断属于B的概率是多少那就不判断属于A的概率),当所有样本来了,只判断属于A的概率是多少,如果是1就是A了,如果概率是0.1,阈值是0.5,那就属于B类。

当目标值为1的时候,如果判断的是属于1的概率,如果说属于1的概率越来越大,目标值是1那损失越来越小。如果判断属于1的概率越来越小,那么损失越来越大

当目标值为0的时候,如果判断的是属于1的概率,如果说属于1的概率越来越大,目标值是0那损失越来越大。如果判断属于1的概率越来越小,那么损失越来越小

完整的损失函数:

cost损失的值越小,那么预测的类别准确度更高

假设有四个样本,[样本1,样本2,样本3,样本4],对应的目标值为[1,0,0,1]

假设逻辑回归的预测值为[0.6,0.1,0.51,0.7],阈值为0.5,那么预测的目标值就位[1,0,1,1]。我们可以看出这个结果是错的,但是,算法是通过损失函数去衡量,那就要建立一个损失函数。就是根据损失函数公式,得知每个样本都有损失值,那么就是1*log(0.6)+0*log(0.1)+0*log(0.51)+1*log(0.7)。

 

5 均方误差与对数自然损失对比

均方误差和对数自然损失的优化都可以通过梯度下降,损失函数的最低点,但是均方误差,有一个最低点,自然对数损失有很多个最低点

均方误差:是不存在局部最低点的,只有一个最小值

对数自然损失:多个局部最小值,是没有全局最低点,如下图,目前也是没有解决全局最低点的方法,只能通过两个方法区尽量改善,使其趋近于全局最低点。①多个值随机初始化,让他们分别找各自的最低点,比较他们每个的最低点,②在整个求解的过程中,调整学习率。

尽管没有最低点,但是通过这两个方法改善效果还是不错的。

 

6 sklearn逻辑回归API

sklearn.linear_model.LogisticRegression

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

penalty=‘l2’:L2正则化                      C:正则化力度

Logistic回归分类器                   coef_:回归系数

 

7 案例

良/恶性乳腺癌肿瘤预测

原始数据的下载地址: https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/

数据描述:

主要信息:①699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤 相关的医学特征,最后一列表示肿瘤类型的数值。2表示良性,4表示恶性 ②包含16个缺失值,用”?”标出。

哪一个类别少,判定概率值是指这个类别,因为恶性少,所以判定恶性为正例,此时良性就是反例。假如良性比较少,那就判定良性为正例,恶性为反例

注意:①数据样本如上,因为第一个行没有指定特征值的名字是什么,如果pd去读取他的时候没有默认给定每一列的名字,那么会默认把第一行当做列表名,所以读取的时候要指定列名

②因为缺失值为?,所以需要修改为np.NaN

实现步骤:①网上获取数据(工具pandas) ②数据缺失值处理、标准化(回归都是需要标准化的) ③LogisticRegression估计器流程

pandas使用:

pd.read_csv(’’,names=column_names)

column_names:指定类别名字

return:数据

replace(to_replace=’’,value=):返回数据

dropna():返回数据

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# 构造列标签名字
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("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",names=column)
print(data)# 缺失值处理,将?替换
data = data.replace(to_replace='?',value=np.nan)
# 删除缺失值,使用dropna,把有缺失值的整行删除
data = data.dropna()# 将数据切分分训练集合测试集,切片是的索引是从0开始的
x_train,x_test,y_train,y_test = train_test_split(data[column[1:10]],data[column[10]],test_size=0.25)# 特征值标准化处理,因为是分类问题,所以目标值不用标准化
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)# 逻辑回归预测
# 有默认值penalty='l2', dual=False, tol=1e-4, C=1.0,
log = LogisticRegression()
log.fit(x_train,y_train)
print("权重为",log.coef_)# 预测测试集的目标值
y_predict = log.predict(x_test)# target_names指定目标分类,labels对应目标分类,指定4为恶性,2位良性
print("召回率为",classification_report(y_test,y_predict,labels=[4,2],target_names=["恶性","良性"]))

8 总结

应用:广告点击率预测、电商购物搭配推荐

优点:适合需要得到一个分类概率的场景

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

二分类问题首先想到用逻辑回归问题做。

判别模型与生成模型的区分:是否有先验概率,有先验概率的为生成模型,没有的为判别模型。先验概率就是说是否需要从历史数据中总结出一些概率信息。如朴素贝叶斯求本文概率的时候要先求某个文章的,某个类别下某个词的概率P(f1,f2..|c)P(c),求这些就提前需要在数据中获取这些东西,P(c)就是先验概率,要先求每个类型的概率是多少。现在某个文章过来了,要判断这个文章类别就要判断在历史数据上面他是怎样的一个概率情况

常见的判别模型:k-近邻,决策树,随机森林,神经网络

常见生成模型:朴素贝叶斯,隐马尔可夫模型

朴素贝叶斯和逻辑回归的比较:

 逻辑回归朴素贝叶斯
解决问题二分类多分类
应用场景癌症预测,二分类需要概率文本分类
参数正则化力度没有
模型判别模型生成模型
相同点得出的结果都有概率解释

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1220. 统计元音字母序列的数目(DP)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母(a, e, i, o, u) - 每个元音 a 后面都只能跟着 e - 每个元音 e 后面…

Django视图(python函数)

1.视图 视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者响应可以是一张网页的HTML内容,一个重定向,一个404错误等 视图就是python中的函数视图一般被定义在“应用/views.py”文件中 视图的第一个…

非监督学习

非监督学习 1 什么是非监(unsupervised learning)督学习 无监督学习,就是不受监督的学习,一种自由的学习方式。该学习方式不需要先验知识进行指导,而是不断地自我认知,自我巩固,最后进行自我归纳,在机器学…

LeetCode 1250. 检查「好数组」(set / 最大公约数)

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。 假如该和结果为 1,那么原数组就是一个「好数组」,则返回 True&#xff1…

用户画像系统

用户画像系统 1 用户画像概述 1.1 什么是用户画像 用户画像就是对现实世界中用户的数学建模。现实世界的用户通过自己各种各样的行为,浏览购买,或者收藏,等等这些行为会把自己的兴趣爱好等体现在这些行为中,比如喜欢看书就会有…

编程思想:面向对象和面向过程

何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中。我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起,最后可能也只会说出一句就是那样啦&#…

LeetCode 1210. 穿过迷宫的最少移动次数(状态压缩BFS)

文章目录1. 题目2. 解题1. 题目 你还记得那条风靡全球的贪吃蛇吗? 我们在一个 n*n 的网格上构建了新的迷宫地图,蛇的长度为 2,也就是说它会占去两个单元格。 蛇会从左上角((0, 0) 和 (0, 1))开始移动。 我们用 0 表示…

Django模板(编写html代码

1.模板 用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器 模版致力于表达外观,一个视图可以使用任意一个模板,一个模板可以供多个视图…

用户画像之Spark ML实现

用户画像之Spark ML实现 1 Spark ML简单介绍 Spark ML是面向DataFrame编程的。Spark的核心开发是基于RDD(弹性分布式数据集),但是RDD,但是RDD的处理并不是非常灵活,如果要做一些结构化的处理,将RDD转换成…

[Kaggle] Digit Recognizer 手写数字识别(神经网络)

文章目录1. baseline2. 改进2.1 增加训练时间2.2 更改网络结构Digit Recognizer 练习地址 相关博文: [Hands On ML] 3. 分类(MNIST手写数字预测) [Kaggle] Digit Recognizer 手写数字识别 1. baseline 导入包 import tensorflow as tf fr…

逻辑回归原理

逻辑回归原理 1 逻辑回归简介 logistic回归(LR),是一种广义的线性回归分析模型,常用于数据挖掘,疾病预测,经济预测等方面。 优点:计算代价低,思路清晰易于理解和实现;…

LeetCode 956. 最高的广告牌(DP)

文章目录1. 题目2. 解题1. 题目 你正在安装一个广告牌,并希望它高度最大。 这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。 你有一堆可以焊接在一起的钢筋 rods。 举个例子,如果钢筋的长度为 1、2 和 3,则…

Tensorflow线程队列与IO操作

目录 Tensorflow线程队列与IO操作 1 线程和队列 1.1 前言 1.2 队列 1.3 队列管理器 1.4 线程协调器 2 文件读取 2.1 流程 2.2 文件读取API: 3 图像读取 3.1 图像读取基本知识 3.2 图像基本操作 3.3 图像读取API 3.4 图片批处理流程 3.5 读取图片案例 …

LeetCode 1298. 你能从盒子里获得的最大糖果数(BFS)

文章目录1. 题目2. 解题1. 题目 给你 n 个盒子,每个盒子的格式为 [status, candies, keys, containedBoxes] ,其中: - 状态字 status[i]:整数,如果 box[i] 是开的,那么是 1 ,否则是 0 。 - 糖…

给javascript初学者的24条最佳实践

1.使用 代替 JavaScript 使用2种不同的等值运算符:|! 和 |!,在比较操作中使用前者是最佳实践。 “如果两边的操作数具有相同的类型和值,返回true,!返回false。”——JavaScript:语言精粹 然而,当使用和&a…

LeetCode 1614. 括号的最大嵌套深度

文章目录1. 题目2. 解题1. 题目 如果字符串满足一下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS): 字符串是一个空字符串 "",或者是一个不为 "("…

[AngularJS]Chapter 1 AnjularJS简介

创建一个完美的Web应用程序是很令人激动的,但是构建这样应用的复杂度也是不可思议的。我们Angular团队的目标就是去减轻构建这样AJAX应用的复杂度。在谷歌我们经历过各种复杂的应用创建工作比如:GMail、Map和日历。我们认为我们有必要把这些经验总结下来…

LeetCode 1615. 最大网络秩(出入度)

文章目录1. 题目2. 解题1. 题目 n 座城市和一些连接这些城市的道路 roads 共同组成一个基础设施网络。 每个 roads[i] [ai, bi] 都表示在城市 ai 和 bi 之间有一条双向道路。 两座不同城市构成的 城市对 的 网络秩 定义为:与这两座城市 直接 相连的道路总数。如果…

使用JSLint提高JS代码质量

随着富 Web 前端应用的出现,开发人员不得不重新审视并重视 JavaScript 语言的能力和使用,抛弃过去那种只靠“复制 / 粘贴”常用脚本完成简单前端任务的模式。JavaScript 语言本身是一种弱类型脚本语言,具有相对于 C 或 Java 语言更为松散的限…

Django工具:Git简介与基本操作

1.Git简介: 1.Git是目前世界上最先进的分布式版本控制系统 网址:http://github.com 2.总结git的两大特点: 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题 分布式:Git是分布式…