逻辑回归与Softmax回归

目录

逻辑回归概述

逻辑回归的作用

逻辑回归的假设函数

实战------逻辑回归解决二分类问题

实战------对逻辑回归调整概率阈值

股票客户流失预警模型

背景介绍

分析步骤

代码实现

Softmax回归简介

什么是Softmax回归

softmax函数

实战_Softmax回归预测鸢尾花多分类问题

sklearn中实现Softmax回归


逻辑回归概述

逻辑回归的作用

逻辑回归又称Logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘、

疾病自动诊断、经济预测等领域。逻辑回归从本质来说属于二分类问题。

二分类问题是指预测的y值只有两个取值(0或1)。例如:一个垃圾邮件过滤系统,x是

邮件的特征,预测的y值就是邮件的类别(是垃圾邮件还是正常邮件)。

逻辑回归的假设函数

逻辑回归是将样本的特征和样本分类的概率联系起来

先来看Sigmoid函数:

g(z)=11+e−z

Sigmoid函数图像为:

逻辑回归的假设函数是:

hθ(x)=11+e−θTx

假设函数的理解:

  • θ^T^x其实就是线性模型
  • 将线性模型的结果交给sigmoid函数处理,即为逻辑回归的假设函数
  • 该假设函数预测的是分类y=1的发生概率的大小

实战------逻辑回归解决二分类问题

在sklearn中,实现逻辑回归使用的是sklearn.linear_model.LogisticRegression

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split


# 自己编造一些数据
np.random.seed(666)


X = np.random.normal(0, 1, size=(200, 2)) # 样本特征
y = np.array((X[:,0]**2+X[:,1])<1.5, dtype='int') # 样本标签


for _ in range(20):
  y[np.random.randint(200)] = 1 # 随机改变样本标签值


# 散点图观察
plt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.show()


# 数据集拆分
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)


# 使用逻辑回归进行二分类
from sklearn.linear_model import LogisticRegression
log = LogisticRegression() # 逻辑回归算法对象
log.fit(X_train,y_train) # 通过训练样本集拟合(学习)


print(log.score(X_test,y_test)) # 在测试集上评估模型

实战------对逻辑回归调整概率阈值

在sklearn中LogisticRegression的默认概率阈值是0.5,可是有时候我们会根据实际需要

调整这个概率阈值

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split


# 自己编造一些数据
np.random.seed(666)


X = np.random.normal(0, 1, size=(200, 2)) # 样本特征
y = np.array((X[:,0]**2+X[:,1])<1.5, dtype='int') # 样本标签


for _ in range(20):
  y[np.random.randint(200)] = 1 # 随机改变样本标签值


# 散点图观察
plt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.show()


# 数据集拆分
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)


# 调整逻辑回归的概率阈值
from sklearn.linear_model import LogisticRegression


log = LogisticRegression()
log.fit(X_train,y_train) # 训练拟合


# 预测出测试集样本中的概率
predict_proba = log.predict_proba(X_test)
# 获取每个样本被预测为y=1种类的概率
predict_proba_one = predict_proba[:,1]
threashold = 0.7 # 自己设定的概率阈值
predict_result = np.array(predict_proba_one > threashold,dtype=int)
# 判断准确率
print(np.sum(predict_result == y_test) / len(y_test)) 

股票客户流失预警模型

背景介绍

在进行每一笔股票交易的时候,交易者(股民)都是要付给开户所在的证券公司一些手

续费的,虽然单笔交易的手续费并不高,然而股票市场每日都有巨额的成交量,使得每一笔

交易的手续费汇总起来的数目相当可观,而这一部分收入对于一些证券公司来说很重要,甚

至可以占到所有营业收入50%以上,因此证券公司对于客户(也即交易者)的忠诚度和活跃

度是很看重的。

如果一个客户不再通过该证券公司交易,也即该客户流失了,那么对于证券公司来说便

损失了一个收入来源,因此证券公司会搭建一套客户流失预警模型来预测交易者是否会流

失,从而对于流失概率较大的客户进行相应的挽回措施,因为通常情况下,获得新客户的成

本比保留现有客户的成本要高的多。

分析步骤

  1. 读取数据

  2. 划分特征变量和目标变量

  3. 划分训练集和测试集

  4. 模型训练

  5. 查看模型预测准确率

  6. 模型使用

    • 预测数据结果
    • 预测股票客户流失概率

代码实现

python 复制代码
# 1.读取数据
import pandas as pd
df = pd.read_excel('股票客户流失.xlsx')
df.head()


# 2.划分特征变量和目标变量
X = df.drop(columns='是否流失') 
y = df['是否流失'] 


# 3.划分训练集和测试集
from sklearn.model_selection import train_test_split
# 设置random_state使得每次划分的数据一样
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) 


# 4.模型训练
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)


# 5.查看模型预测准确率
model.score(X_test, y_test)


# 6.模型使用1 - 预测数据结果
y_pred = model.predict(X_test)
print(y_pred[:100]) # 打印预测内容的前100个看看


# 模型使用2 - 预测股票客户流失概率
y_pred_proba = model.predict_proba(X_test) 
print(y_pred_proba[:5]) # 打印前5个客户的分类概率
# 只查看流失的概率(也即y=1概率,即上面二维数组的第二列)
print("股票客户流失概率:",y_pred_proba[:,1])

Softmax回归简介

什么是Softmax回归
  • Softmax回归模型是逻辑回归模型在多分类问题上的推广

  • Softmax回归使用的是softmax函数

softmax函数

pl=ezl∑j=1kezj

由上式可以看出:softmax函数可以巧妙地将多个分类的分数(z~l~)转化为(0,1)的值并且和

为1

softmax函数计算的结果是各个分类的预测概率值

实战_Softmax回归预测鸢尾花多分类问题

sklearn中实现Softmax回归

在sklearn中没有直接封装Softmax回归,但是可以对LogisticRegression中的参数进行

变化,从而达到Softmax回归的效果。

主要是将multi_class参数设置为'multinomial'就可以了

相关推荐
郑州光合科技余经理2 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
d111111111d5 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
Jiangxl~6 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢6 小时前
wolfram详解山峦算法
前端·算法
counting money7 小时前
prim算法最小生成树(java)
算法
澈2077 小时前
C++面向对象:类与对象核心解析
c++·算法
用户690673881927 小时前
基于无人机的单目测距系统,平均误差仅2.12%
算法
dinl_vin7 小时前
LangChain 系列·(四):RAG 基础——给大模型装上“外脑“
人工智能·算法·langchain
探物 AI8 小时前
【感知·医学分割】当 YOLOv11 杀入医学赛道:先检测后分割的级联架构
算法·yolo·计算机视觉·架构