1、线性回归模型

线性回归模型(Liner Regression),是利用线性拟合的方式来探寻数据背后的规律。通过搭建线性回归模型,可以寻找这些散点(也称样本点)背后的趋势线(也称回归曲线)。

借助回归曲线,我们可以进行一些简单的预测分析,或因果关系分析

1.1、一元线性回归数学原理

一元线性回归模型也称为简单线性回归模型,其形式可以通过如下方程公式表达:

其中:y是目标(因)变量,x是特征(自)变量,a表示回归系数,b表示截距。

一元线性回归的目的,是拟合出一条线使得预测值()和实际值()尽可能的接近,如果大部分点都落在拟合出来的线上,那么该线性回归模型拟合效果较好。

此外,我们可以通过两者差值平方和(,也称为残值平方和)来进行衡量,在机器学习领域,该残差平方和也被称之为回归模型的损失函数

1.2、一元线性回归的代码实现

在Python中,我们可以通过Scikit-learn工具库,快速构建一元线性回归模型。实现一元线性回归的核心功能代码如下:

from sklearn.linear_model import LinearRegression
from matplotlib import pyplot as plt
import matplotlib# pycharm工具:设置本地显示后端
matplotlib.use('TkAgg')if __name__ == '__main__':X = [[1],[2],[3],[5]]Y = [2,4,6,8]# 1. 构建线性回归模型对象lg = LinearRegression()# 2. 使用准备的自变量、因变量数据做训练lg.fit(X, Y)# 3. 使用训练好的模型预测新数据集y_pred = lg.predict([[4]])print(f"预测值:{y_pred[0]:.4f}") # 6.8571# 4. 绘制自变量、因变量组成的散点图plt.scatter(X, Y, label='实际数据')# 5. 绘制训练结果一元线性回归方程plt.plot(X, lg.predict(X), color='red', label='回归线')# 6. 展示执行效果|或使用Jupyter执行效果plt.show()

借助matplotlib工具,将模型进行可视化展示:

1.3、多元线性回归

同理,多元线性回归模型是在一元线性回归模型基础上,增加多个自变量,其形式可以通过如下方程公式表达:

其中:y是目标(因)变量,是特征(自)变量,表示权重系数,表示(误差项)截距。

线性回归使用均方误差(MSE)作为损失函数

1.3.1、经典案例

此处,我们使用波士顿房价数据集(Boston Housing Dataset)一个经典的回归分析数据集,常用于预测房价。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegressionif __name__ == '__main__':# 1. 数据加载data = pd.read_csv("boston_house_prices.csv", skiprows=1)# 2. 特征和标签分离X = data.loc[:, :"LSTAT"].to_numpy()  # 特征y = data.loc[:, "MEDV"].to_numpy()    # 目标标签# 3. 数据切分X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# 4. 手动数据标准化(可用标准库实现)mu = X_train.mean(axis=0)sigma = X_train.std(axis=0) + 1e-9X_train = (X_train - mu) / sigmaX_test = (X_test - mu) / sigma# 5. 模型训练lr = LinearRegression()lr.fit(X=X_train, y=y_train)# 6. 预测与评估y_pred = lr.predict(X=X_test)mse = ((y_pred - y_test) ** 2).mean()print(f"均⽅误差: {mse}")

1.3.2、实战案例

案例:基于线性回归模型的客户价值预测

客户价值可以帮助企业预测未来一段时间,客户预计能够为企业带来多少利润。尝试结合已有的客户价值数据表,完成以下功能。

1、结合客户的价值数据,构建回归模型;

历史贷款金额贷款次数学历月收入性别是否有房产客户价值
500002220000112000
500003115000001200
1000005232000101800
-------
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_reportif __name__ == '__main__':# 1. 加载数据df = pd.read_csv("cust_value_data.csv", skiprows=1)# 2. 查看原始数据信息print("原始数据前10行:")print(df.head(10))print("\n数据信息:")print(df.info())print("缺失值统计:")print(df.isnull().sum())# 3. 找出存在null值的行null_rows = df[df.isnull().any(axis=1)]print("\n存在缺失值的行:")print(null_rows)# 4. 数据预处理# 4.1. 均值填充:将age为null的使用均值填充age_mean = df['age'].mean()df['age'].fillna(age_mean, inplace=True)# 4.2. 缺失值填充:将贷款均值填充history_debit_mean = df['history_debit'].mean()df['history_debit'].fillna(history_debit_mean, inplace=True)# 4.3. 缺失值填充:将月收入均值填充month_income_mean = df['month_income'].mean()df['month_income'].fillna(month_income_mean, inplace=True)# 5. 选择特征和目标变量# 选择特征列和目标列feature_cols = ['history_debit', 'debit_times', 'degree', 'month_income', 'sex', 'house_flag']X = df[feature_cols]y = df['customer_value']# 6. 数据切分(70%训练,30%测试)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 7. 模型训练model = LinearRegression()model.fit(X_train, y_train)# 8. 预测与评估y_pred = model.predict(X_test)# 5. 模型评估accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred)print("模型准确率:", accuracy)print("分类报告:")print(report)

2、逻辑回归模型

逻辑回归(Logistic Regression)是线性回归的一种扩展,主要用来处理分类模型,因其简单有效、可解释性强的特点,目前在多行业中被广泛应用。

逻辑回归的本质,是将线性回归模型(-∞,+∞)通过Sigmoid()函数(也称Logistic函数)y = \frac{1} {1+e^{-z}} 进行了非线性转换,从而得到一个介于(0,1)之间的概率值,从而实现分类的效果。

sigmoid函数代码实现:

import numpy as np
import matplotlib.pyplot as pltdef sigmoid(x):"""Sigmoid 激活函数"""return 1 / (1 + np.exp(-x))if __name__ == '__main__':# 可视化 Sigmoid 函数x = np.linspace(-10, 10, 100)plt.plot(x, sigmoid(x))plt.grid()plt.title('Sigmoid Function')plt.xlabel('Input')plt.ylabel('Output')plt.show()

2.1、分类与回归的区别

回归模型:用于对连续变量进行预测,如预测收入范围、房价变化、客户价值等,线性回归就是一种典型的回归模型。

分类模型:用于对离散变量进行预测,分类模型预测的变量不是连续的,而是离散的一些类型。例如,使用常见的二分类模型,预测客户是否违约、客户是否会流失、肿瘤是良性还是恶性等。

2.2、经典案例

这是一个经典的二分类数据集,其目标是根据乳腺肿瘤的显微图像特征来诊断肿瘤是恶性(Malignant)还是良性(Benign)

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_splitif __name__ == '__main__':# 1. 加载数据X, y = load_breast_cancer(return_X_y=True)# 2. 数据切分X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# 3. 数据标准化mu = X_train.mean(axis=0)sigma = X_train.std(axis=0) + 1e-9X_train = (X_train - mu) / sigmaX_test = (X_test - mu) / sigma# 4. 模型训练lr = LogisticRegression()lr.fit(X=X_train, y=y_train)# 5. 预测与评估y_pred = lr.predict(X=X_test)accuracy = (y_pred == y_test).mean()print(f"准确率: {accuracy:.4f}")# 查看模型参数print(f"权重数量: {lr.coef_.shape}")print(f"偏置项: {lr.intercept_}")

2.3、实战案例

案例:信用卡客户流失预警模型

客户流失预警模型可以用于预测客户未来的流失情况。针对流失概率较大的客户,可以采取适当的措施进行挽留,有效降低客户的流失率。根据案例数据集,完成以下功能:

用户ID账户金额(元)用户年龄学历性别最后一次交易时间上月交易佣金(元)累计交易佣金(元)使用信用卡年限(年是否流失
100115200032本科2025/6/2232.21350050

1、结合信用卡客户流失数据,构建逻辑回归模型(分类)

2、结合已有的数据判断模型预测准确性,查看每名客户的预估流失概率

import pandas as pd
from datetime import datetime
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_reportif __name__ == '__main__':# 1. 加载数据df = pd.read_csv("credit_data.csv", skiprows=1)# 2. 查看原始数据信息print("原始数据前10行:")print(df.head(10))print("\n数据信息:")print(df.info())print("缺失值统计:")print(df.isnull().sum())# 3. 找出存在null值的行null_rows = df[df.isnull().any(axis=1)]print("\n存在缺失值的行:")print(null_rows)# 4. 数据预处理# 4.1. 删除行:删除amount为null的行df = df.dropna(subset=['amount'])# 4.2. 均值填充:将age为null的使用均值填充age_mean = df['age'].mean()df['age'].fillna(age_mean, inplace=True)# 4.3. 缺失值填充:将degree为null的使用"本科"填充df['degree'].fillna('本科', inplace=True)# 4.4. 删除列:userId列(与训练无关列),axis=1 表示删除列df = df.drop('userId', axis=1)# 4.5.特征工程:性别编码(男=0, 女=1)df['sex'] = df['sex'].map({'男': 0, '女': 1})current_date = datetime.now()# 4.6 最后一次交易时间处理为距现在时间的天数df['last_txn_time'] = pd.to_datetime(df['last_txn_time'])df['days_since_last_txn'] = (current_date - df['last_txn_time']).dt.days# 4.7 对学历进行one-hot编码,并避免多重共线性(删除基准类别"本科")degree_dummies = pd.get_dummies(df['degree'], prefix='degree')if 'degree_本科' in degree_dummies.columns:degree_dummies = degree_dummies.drop('degree_本科', axis=1)# axis=1,指定df,degree_dummiesdf = pd.concat([df, degree_dummies], axis=1)# 5. 选择特征和目标变量# 选择特征列和目标列feature_cols = ['amount', 'age', 'last_month_kickback', 'accu_kickback', 'used_limit', 'days_since_last_txn', 'sex']X = df[feature_cols + degree_dummies.columns.tolist()]y = df['loss_flag']# 6. 数据切分(70%训练,30%测试)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 7. 模型训练model = LogisticRegression(random_state=42)model.fit(X_train, y_train)# 8. 预测与评估y_pred = model.predict(X_test)# 5. 模型评估accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred)print("模型准确率:", accuracy)print("分类报告:")print(report)

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

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

相关文章

eclipse 安装 lombok

好久没有用eclipse,新装eclipse 发现lombok 没有生效,如下安装最省事,无需安装plugin等。 进入maven 本地目录,如:org\projectlombok\lombok\1.18.38,点击lombok jar文件指定eclipse 目录,安装完…

linux离线安装elasticsearch8.19.3

下载: 官网多版本下载: Past Releases of Elastic Stack Software | Elastic github多版本下载: https://github.com/elastic/elasticsearch/releases 上传后解压到当前目录 tar -zxvf elasticsearch-8.19.3-linux-x86_64.tar.gz 或指定解压目录 tar -xzf elasticsearch-8…

Uniapp中进行微信小程序头像和昵称的更改

一、官方文档: 1、wx.getUserInfo(uni.getUserInfo):基础库版本低于2.27.1可用 ① 文档链接: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.htmlhttps://uniapp.dclou…

交换机详细

交换机(Sritch):一种用于电(光)信号转发的网络设备,可以为接入交换机的任意两个网络节点提供独享的电信号通路。解决什么问题?多台设备之间的数据交换的问题。因此根据它的功能,它通…

功能强大的多线程端口扫描工具,支持批量 IP 扫描、多种端口格式输入、扫描结果美化导出,适用于网络安全检测与端口监控场景

工具介绍 PortScanner - 多线程端口扫描工具,一款功能强大的多线程端口扫描工具,支持批量 IP 扫描、多种端口格式输入、扫描结果美化导出,适用于网络安全检测与端口监控场景。🌟 功能特性 🔍 灵活的扫描目标&#xff1…

【OpenHarmony文件管理子系统】文件访问接口mod_fileio解析

OpenHarmony文件访问接口mod_fileio解析 概述 mod_fileio模块是OpenHarmony文件管理API中的核心模块之一,提供了完整的文件I/O操作功能。该模块基于Node.js N-API构建,为JavaScript应用提供了丰富的文件系统操作接口,包括文件读写、目录操作、…

js逆向Webpack模块加载机制解析:从数组到JSONP

1. 概述 Webpack作为现代前端开发中最流行的模块打包工具,其模块加载机制值得深入理解。本文将解析Webpack的几种模块加载方式,包括数组形式、键值对形式和JSONP动态加载。只有理解了它的相关加载机制,我们才可以进行逆向工作。 2. 数组形式的…

Joplin-解决 Node.js 中 “digital envelope routines::unsupported“ 错误

解决 Node.js 中 “digital envelope routines::unsupported” 错误 在使用 Webpack 构建 Joplin 插件时,你可能会遇到 error:0308010C:digital envelope routines::unsupported 错误。这个错误看起来很复杂,但实际上有明确的原因和解决方案。 错误原因…

UE5 UAT

通过UAT 打包的流程&#xff0c;先整理这么点入口// Engine\Source\Programs\AutomationTool\Program.cs /// <summary> /// Main entry point /// </summary> public partial class Program {public static async Task<int> Main(string[] Arguments){Logge…

Python带状态生成器完全指南:从基础到高并发系统设计

引言&#xff1a;状态化生成器的核心价值在复杂系统开发中&#xff0c;带状态的生成器是处理复杂逻辑的核心工具。根据2024年Python开发者调查报告&#xff1a;78%的状态机实现使用带状态生成器85%的数据管道依赖状态化生成器92%的并发系统需要状态管理65%的算法优化通过状态化…

Python元组:不可变但灵活的数据容器

Python元组&#xff1a;不可变但灵活的数据容器 元组(tuple)是Python中一种不可变(immutable)但功能灵活的有序集合数据类型&#xff0c;具有以下核心特性&#xff1a;一、基本特性 不可变性‌&#xff1a;创建后不能修改元素&#xff08;增删改操作均不允许&#xff09; 有序存…

FastGPT源码解析 Agent 大模型对接接口和使用详解

FastGPT 大模型对接核心代码分析 核心架构概览 FastGPT 采用统一模型抽象层设计&#xff0c;通过标准化接口对接多种大模型&#xff0c;支持 LLM、Embedding、ReRank、TTS、STT 等多种 AI 能力。 支持各种大模型能力的配置&#xff0c;包括本地ollama、各个AI云厂商的API接入配…

AI Compass前沿速览:Kimi K2、InfinityHuman-AI数字人、3D-AI桌面伴侣、叠叠社–AI虚拟陪伴

AI Compass前沿速览&#xff1a;Kimi K2、InfinityHuman-AI数字人、3D-AI桌面伴侣、叠叠社–AI虚拟陪伴 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态&#xff0c;通过六大核心模块的系统化组织&#xff0c;为不同层次的学习者和开发者提供从完整学习路…

如何下载B站视频,去水印,翻译字幕

首先先来看下如何下载B站视频及音频工具&#xff1a;手机下载视频打开文件管理器&#xff0c;找到video.m4s和audio.m4s两个文件更改文件后缀名第一步到此为止然后我们再来看一下如何去水印&#xff0c;去字幕工具&#xff1a;剪映导入视频选择蒙版 > 镜面点击反转点击基础&…

用 Cursor AI 快速开发你的第一个编程小程序

Cursor AI 作为新一代 AI 编程助手&#xff0c;集成了代码补全、智能调试、自动生成等强大功能&#xff0c;非常适合用来开发小型应用或小程序。本文我将手把手带你用 Cursor AI 开发一个简单的天气查询小程序&#xff0c;并在文中推荐一门实用的商业变现课程&#xff0c;助你走…

MacOS 使用 luarocks+wrk+luajit

MacOS 使用 luarockswrkluajit luarocks 默认使用的是 lua 5.4 版本&#xff0c;一些工具&#xff0c;例如 wrk 使用的 lua 5.1&#xff0c;那么 luarocks 在安装依赖的时候就需要指定 lua 5.1。 luarocks config 配置 lua 5.1 请确保已经安装了 lua5.1 或者 luajit&#xff0c…

PostgreSQL18-FDW连接的 SCRAM 直通身份验证

PostgreSQL18-FDW连接的 SCRAM 直通身份验证 PostgreSQL 18 为使用 postgres_fdw 或 dblink_fdw 的人带来了很好的改进&#xff1a;SCRAM 直通身份验证。设置外部服务器连接时&#xff0c;您不再需要在“用户映射”选项中存储纯文本密码。 这是实现它的提交&#xff1a; commit…

“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门

在分布式系统中&#xff0c;有效应对节点故障、网络分区延迟和数据一致性等挑战至关重要。本文将剖析保障分布式系统可靠性的核心机制&#xff1a;数据分片实现水平扩展&#xff0c;冗余副本保障数据高可用&#xff0c;租约&#xff08;Lease&#xff09;机制优化节点状态共识与…

【代码随想录算法训练营——Day4】链表——24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题02.07.链表相交、142.环形链表II

LeetCode题目链接 https://leetcode.cn/problems/swap-nodes-in-pairs/ https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/description/ https://leetcode.cn/problems/linked-list-cycle…

C#中一段程序类比博图

using system //博图中要使用自带指令库&#xff0c;指令库名称叫systemnamespace Simple//博图建立程序&#xff0c;分诊断文件夹&#x1f4c2;&#xff0c;vision文件夹&#xff0c;通讯Db文件夹&#x1f4c2;等等&#xff0c;simple类似博图中的文件夹名称{class Program//程…