当前位置: 首页 > news >正文

机器学习模型--线性回归、逻辑回归、分类

一、线性回归

级别1:简单一元线性回归(手工实现)

import numpy as np
import matplotlib.pyplot as plt# 生成数据
X = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])# 手动实现梯度下降
def gradient_descent(X, y, lr=0.01, epochs=1000):w, b = 0, 0  # 初始化参数n = len(X)for _ in range(epochs):y_pred = w * X + bdw = (2/n) * np.sum((y_pred - y) * X)  # 计算梯度db = (2/n) * np.sum(y_pred - y)w -= lr * dw  # 更新参数b -= lr * dbreturn w, bw, b = gradient_descent(X, y)
print(f"方程: y = {w:.2f}x + {b:.2f}")# 可视化
plt.scatter(X, y, color='red')
plt.plot(X, w*X + b, label='预测线')
plt.legend()
plt.show()

思考:梯度下降中学习率过大/过小会发生什么?


级别2:多元线性回归(特征工程)

from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline# 生成非线性数据
X = np.linspace(-3, 3, 100).reshape(-1,1)
y = 0.5*X**2 + X + 2 + np.random.randn(100,1)# 使用多项式特征(二次项)
model = make_pipeline(PolynomialFeatures(degree=2),  # 添加二次特征LinearRegression()
)
model.fit(X, y)# 可视化拟合曲线
X_test = np.linspace(-3,3,100).reshape(-1,1)
plt.scatter(X, y, alpha=0.3)
plt.plot(X_test, model.predict(X_test), 'r', linewidth=2)
plt.title("二次多项式回归")
plt.show()

思考:如何避免多项式回归中的过拟合?


级别3:正则化回归(岭回归)

from sklearn.linear_model import Ridge
from sklearn.preprocessing import StandardScaler# 生成高维数据(20个特征,仅5个有用)
np.random.seed(42)
X = np.random.randn(100, 20)
y = X[:, 0] + 2*X[:, 1] - 1.5*X[:, 2] + 0.5*X[:, 3] + np.random.randn(100)# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 对比普通线性回归和岭回归
lin_reg = LinearRegression()
lin_reg.fit(X_scaled, y)
print("普通回归系数范围:", np.max(np.abs(lin_reg.coef_)))ridge = Ridge(alpha=10)  # 正则化强度
ridge.fit(X_scaled, y)
print("岭回归系数范围:", np.max(np.abs(ridge.coef_)))

输出

普通回归系数范围: 5.23
岭回归系数范围: 1.87

思考:为什么高维数据需要正则化?如何选择alpha值?


二、逻辑回归

级别1:二分类(基础应用)

from sklearn.datasets import make_classification# 生成可分数据
X, y = make_classification(n_features=2, n_redundant=0, n_clusters_per_class=1)# 训练模型
model = LogisticRegression()
model.fit(X, y)# 可视化决策边界
x_min, x_max = X[:,0].min()-1, X[:,0].max()+1
y_min, y_max = X[:,1].min()-1, X[:,1].max()+1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:,0], X[:,1], c=y, s=20)
plt.title("线性决策边界")
plt.show()

思考:为什么逻辑回归的决策边界是线性的?


级别2:多分类(鸢尾花数据集)

from sklearn.datasets import load_iris# 加载数据
iris = load_iris()
X, y = iris.data[:, :2], iris.target  # 只用前两个特征# 使用One-vs-Rest策略
model = LogisticRegression(multi_class='ovr', max_iter=1000)
model.fit(X, y)# 可视化多类决策边界
Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:,0], X[:,1], c=y, edgecolor='k')
plt.xlabel("花萼长度")
plt.ylabel("花萼宽度")
plt.title("多分类决策边界")
plt.show()

思考:OvR(One-vs-Rest)和Softmax多分类的区别是什么?


级别3:类别不平衡处理(信用卡欺诈检测)

from sklearn.datasets import fetch_openml
from sklearn.metrics import precision_recall_curve# 加载高度不平衡数据
data = fetch_openml('creditcardfraud')
X, y = data.data, data.target.astype(int)# 重采样(SMOTE方法)
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_res, y_res = smote.fit_resample(X, y)# 带权重调整的逻辑回归
model = LogisticRegression(class_weight='balanced', max_iter=1000)
model.fit(X_res, y_res)# 绘制PR曲线
probs = model.predict_proba(X_res)[:,1]
precision, recall, _ = precision_recall_curve(y_res, probs)
plt.plot(recall, precision)
plt.xlabel("召回率")
plt.ylabel("精确率")
plt.title("类别不平衡下的PR曲线")
plt.show()

思考:为什么在处理欺诈检测时,精确率-召回率曲线比ROC曲线更有意义?


三、分类任务

级别1:KNN分类(原理理解)

from sklearn.neighbors import KNeighborsClassifier# 生成同心圆数据
X, y = make_circles(n_samples=200, noise=0.1, factor=0.5)# 不同K值对比
plt.figure(figsize=(12,4))
for i, k in enumerate([1, 10, 50]):knn = KNeighborsClassifier(n_neighbors=k)knn.fit(X, y)Z = knn.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)plt.subplot(1,3,i+1)plt.contourf(xx, yy, Z, alpha=0.4)plt.scatter(X[:,0], X[:,1], c=y, s=20)plt.title(f"K={k}")
plt.show()

思考:K值如何影响模型的偏差-方差权衡?


级别2:支持向量机(核技巧)

from sklearn.svm import SVC# 生成螺旋数据
def generate_spiral():theta = np.sqrt(np.random.rand(200))*2*np.pir = np.linspace(0, 1, 200)X1 = np.array([r*np.cos(theta), r*np.sin(theta)]).TX2 = np.array([-r*np.cos(theta), -r*np.sin(theta)]).Treturn np.vstack((X1,X2)), np.hstack((np.zeros(200), np.ones(200)))X, y = generate_spiral()# 不同核函数对比
kernels = ['linear', 'rbf', 'poly']
plt.figure(figsize=(15,4))
for i, kernel in enumerate(kernels):svm = SVC(kernel=kernel, gamma='auto')svm.fit(X, y)Z = svm.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)plt.subplot(1,3,i+1)plt.contourf(xx, yy, Z, alpha=0.4)plt.scatter(X[:,0], X[:,1], c=y, s=20)plt.title(f"{kernel} kernel")
plt.show()

思考:RBF核中的gamma参数控制什么?


级别3:集成方法(Stacking)

from sklearn.ensemble import StackingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB# 定义基模型和元模型
base_models = [('dt', DecisionTreeClassifier(max_depth=3)),('nb', GaussianNB()),('svm', SVC(probability=True))
]
meta_model = LogisticRegression()# 构建堆叠模型
stacking = StackingClassifier(estimators=base_models,final_estimator=meta_model,stack_method='predict_proba'
)# 在复杂数据集上测试
X, y = make_classification(n_samples=2000, n_features=20, n_informative=15)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)stacking.fit(X_train, y_train)
print(f"Stacking准确率: {stacking.score(X_test, y_test):.4f}")
print(f"对比单模型准确率:")
for name, model in base_models:model.fit(X_train, y_train)print(f"{name}: {model.score(X_test, y_test):.4f}")

输出示例

Stacking准确率: 0.9233
对比单模型准确率:
dt: 0.8817
nb: 0.8567
svm: 0.8983

思考:为什么堆叠集成通常能提升性能?可能带来哪些缺点?


学习路径建议:

  1. 线性回归:从手工实现 → 理解多项式特征 → 掌握正则化
  2. 逻辑回归:从二分类基础 → 多分类扩展 → 处理实际数据问题
  3. 分类任务:从最近邻原理 → 理解核方法 → 掌握集成策略

我眼下日复一日的生活,将会成为我从未体察过的爱的记忆。 —费尔南多·佩索阿

相关文章:

机器学习模型--线性回归、逻辑回归、分类

一、线性回归 级别1:简单一元线性回归(手工实现) import numpy as np import matplotlib.pyplot as plt# 生成数据 X np.array([1, 2, 3, 4, 5]) y np.array([2, 4, 5, 4, 5])# 手动实现梯度下降 def gradient_descent(X, y, lr0.01, epo…...

gitlab个别服务无法启动可能原因

目录 一、gitlab的puma服务一直重启 1. 查看日志 2. 检查配置文件 3. 重新配置和重启 GitLab 4. 检查系统资源 5. 检查依赖和服务状态 6. 清理和优化 7. 升级 GitLab 8. 查看社区和文档 二、 gitlab个别服务无法启动可能原因 1.服务器内存或磁盘已满 2.puma端口冲突…...

react的antd表格数据回显在form表单中

1、首先为table添加编辑按钮 {title: 操作,align: center,render: (_: any, record: any) > (<div style{{ display: flex, alignItems: center, justifyContent: space-evenly }}><Buttonsize"small"onClick{() > deitor(record)} style{{ margin…...

深度分析:网站快速收录与网站内容多样性的关系

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/87.html 网站快速收录与网站内容多样性之间存在着密切的关系。以下是对这一关系的深度分析&#xff1a; 一、网站内容多样性对快速收录的影响 提升搜索引擎抓取效率&#xff1a; 多样化的…...

feign 远程调用详解

在平常的开发工作中&#xff0c;我们经常需要跟其他系统交互&#xff0c;比如调用用户系统的用户信息接口、调用支付系统的支付接口等。那么&#xff0c;我们应该通过什么方式进行系统之间的交互呢&#xff1f;今天&#xff0c;简单来总结下 feign 的用法。 1&#xff1a;引入依…...

【Android】jni开发之导入opencv和libyuv来进行图像处理

做视频图像处理时需要对其进行水印的添加&#xff0c;放在应用层调用工具性能方面不太满意&#xff0c;于是当下采用opencvlibyuv方法进行处理。 对于Android的jni开发不是很懂&#xff0c;我的需求是导入opencv方便在cpp中调用&#xff0c;但目前找到的教程都是把opencv作为模…...

【Elasticsearch】terms聚合误差问题

Elasticsearch中的聚合查询在某些情况下确实可能存在误差&#xff0c;尤其是在处理分布式数据和大量唯一值时。这种误差主要来源于以下几个方面&#xff1a; 1.分片数据的局部性 Elasticsearch的索引通常被分成多个分片&#xff0c;每个分片独立地计算聚合结果。由于数据在分…...

深入理解 `box-sizing: border-box;`:CSS 布局的利器

深入理解 box-sizing: border-box;&#xff1a;CSS 布局的利器 默认行为示例代码 使用 box-sizing: border-box;示例代码 全局应用 box-sizing: border-box;示例代码 实际应用场景1. 表单布局2. 网格布局 总结 在 CSS 中&#xff0c;box-sizing 属性决定了元素的总宽度和高度是…...

【原子工具】快速幂 快速乘

题幂算.一切即1 阴阳迭变积微著&#xff0c;叠浪层峦瞬息功 莫道浮生千万事&#xff0c;元知万象一归宗 文章目录 快速幂原始快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 模下意义的快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 快速乘龟速…...

Apache SeaTunnel 整体架构运行原理

概述 SeaTunnel 缘起 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长及业务需求的快速变化&#xff0c;企业需要具备强大的数据集成能力来高效地处理数据。SeaTunnel通过其高度可扩展和灵活的架构&#xff0c;帮助企业…...

Nginx如何实现 TCP和UDP代理?

文章目录 前言 Nginx之TCP和UDP代理 工作原理示意图 配置文件和命令参数注释 基本命令 配置实例说明 TCP代理实例UDP代理实例 总结 前言 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;同时也支持TCP/UDP代理。在1.9.13版本后&#xff0c;Nginx已经支持端口转发&…...

蓝桥杯思维训练营(三)

文章目录 题目详解680.验证回文串 II30.魔塔游戏徒步旅行中的补给问题观光景点组合得分问题 题目详解 680.验证回文串 II 680.验证回文串 II 思路分析&#xff1a;这个题目的关键就是&#xff0c;按照正常来判断对应位置是否相等&#xff0c;如果不相等&#xff0c;那么就判…...

开箱即用的.NET MAUI组件库 V-Control 发布了!

之前写过挺多的MAUI Sample&#xff0c;其中有很多代码可以打包成组件&#xff0c;当组件完善到一定程度&#xff0c;我会把控件封装起来放到控件库中。 今天&#xff0c;在这个仓库建立一年零八个月后&#xff0c;我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET …...

动手学图神经网络(9):利用图神经网络进行节点分类 WeightsBiases

利用图神经网络进行节点分类Weights&Biases 引言 在本篇博客中,将深入探讨如何使用图神经网络(GNNs)来完成节点分类任务。以 Cora 数据集为例,该数据集是一个引用网络,节点代表文档,推断每个文档的类别。同时,使用 Weights & Biases(W&B)来跟踪实验过程和…...

【文件上传、秒传、分片上传、断点续传、重传】

文章目录 获取文件对象文件上传&#xff08;秒传、分片上传、断点续传、重传&#xff09;优化 获取文件对象 input标签的onchange方法接收到的参数就是用户上传的所有文件 <html lang"en"><head><title>文件上传</title><style>#inp…...

使用Pygame制作“打砖块”游戏

1. 前言 打砖块&#xff08;Breakout / Arkanoid&#xff09; 是一款经典街机游戏&#xff0c;玩家控制一个可左右移动的挡板&#xff0c;接住并反弹球&#xff0c;击碎屏幕上方的砖块。随着砖块被击碎&#xff0c;不仅能获得分数&#xff0c;还可以体验到不断加速或复杂的反弹…...

【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra)

文章目录 0 DeepSeek系列总览1 模型架构设计基本参数专家混合模型&#xff08;MoE&#xff09;[DeepSeek-V2提出, DeepSeek-V3改良]多头潜在注意力&#xff08;MLA&#xff09;[DeepSeek-V2提出]多token预测&#xff08;MTP&#xff09;[DeepSeek-V3提出] 2 DeepSeek-R1-Zero及…...

深入解析:如何利用 Python 爬虫获取商品 SKU 详细信息

在电商领域&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;详细信息是电商运营的核心数据之一。它不仅包含了商品的规格、价格、库存等关键信息&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。本文将详细介绍如何利用 Pyth…...

【3】高并发导出场景下,服务器性能瓶颈优化方案-文件压缩

使用EasyExcel导出并压缩文件是一种高效且常见的解决方案&#xff0c;尤其适用于需要处理大量数据的场景。 1. 导出多个Excel文件并压缩成ZIP文件的基本流程 &#xff08;1&#xff09;数据准备&#xff1a;从数据库或其他数据源获取需要导出的数据&#xff0c;并将其存储在Ja…...

FPGA|生成jic文件固化程序到flash

1、单击file-》convert programming files 2、flie type中选中jic文件&#xff0c;configuration decive里根据自己的硬件选择&#xff0c;单击flash loader选择右边的add device选项 3、选择自己的硬件&#xff0c;单击ok 4、选中sof选项&#xff0c;单机右侧的add file 5、选…...

NLP学习路线图(二十):FastText

在自然语言处理(NLP)领域,词向量(Word Embedding)是基石般的存在。它将离散的符号——词语——转化为连续的、富含语义信息的向量表示,使得计算机能够“理解”语言。而在众多词向量模型中,FastText 凭借其独特的设计理念和卓越性能,尤其是在处理形态丰富的语言和罕见词…...

CRM管理系统中的客户分类与标签管理技巧:提升转化率的核心策略

在客户关系管理(CRM)领域&#xff0c;有效的客户分类与标签管理是提升销售效率、优化营销ROI的关键。据统计&#xff0c;使用CRM管理系统进行科学客户分层的企业&#xff0c;客户转化率平均提升35%(企销客数据)。本文将深入解析在CRM管理软件中实施客户分类与标签管理的最佳实践…...

C语言中的数据类型(二)--结构体

在之前我们已经探讨了C语言中的自定义数据类型和数组&#xff0c;链接如下&#xff1a;C语言中的数据类型&#xff08;上&#xff09;_c语言数据类型-CSDN博客 目录 一、结构体的声明 二、结构体变量的定义和初始化 三、结构体成员的访问 3.1 结构体成员的直接访问 3.2 结…...

DelayQueue、ScheduledThreadPoolExecutor 和 PriorityBlockingQueue :怎么利用堆实现定时任务

DelayQueue DelayQueue 的最大亮点&#xff1a; 并不是简单全局锁的“单调队列”实现&#xff0c;而是用Leader-Follower 模式极大减少了线程唤醒的开销。插入与唤醒、等待与 leader 变更&#xff0c;都通过巧妙的锁和条件变量组合完成。 如果只关注“线程安全的优先队列全局…...

vue组件的data为什么是函数?

vue组件的data为什么是函数&#xff1f; 在JS中&#xff0c;实例是通过构造函数创建的&#xff0c;每个构造函数可以new出多个实例&#xff0c;每个实例都会继承原型上的方法和属性。 在vue中&#xff0c;一个vue组件就是一个实例&#xff0c;当一个组件被复用多次&#xff0…...

多模型协同:基于 SAM 分割 + YOLO 检测 + ResNet 分类的工业开关状态实时监控方案

一、技术优势与适配性分析 1. 任务分工的合理性 YOLO&#xff08;目标检测&#xff09; 核心价值&#xff1a;快速定位工业开关在图像中的位置&#xff08;边界框&#xff09;&#xff0c;为后续分割和分类提供ROI&#xff08;感兴趣区域&#xff09;。工业场景适配性&#xf…...

小白的进阶之路系列之十----人工智能从初步到精通pytorch综合运用的讲解第三部分

本文将介绍Autograd基础。 PyTorch的Autograd特性是PyTorch灵活和快速构建机器学习项目的一部分。它允许在一个复杂的计算中快速而简单地计算多个偏导数(也称为梯度)。这个操作是基于反向传播的神经网络学习的核心。 autograd的强大之处在于它在运行时动态地跟踪你的计算,…...

My图床项目

引言: 在海量文件存储中尤其是小文件我们通常会用上fastdfs对数据进行高效存储,在现实生产中fastdfs通常用于图片,文档,音频等中小文件。 一.项目中用到的基础组件(Base) 1.网络库(muduo) 我们就以muduo网络库为例子讲解IO多路复用和reactor网络模型 1.1 IO多路复用 我们可以…...

Java 集合面试题 PDF 及常见考点解析与备考指南

为了帮助你更好地学习Java集合相关知识&#xff0c;我将围绕Java集合面试题展开&#xff0c;介绍常见的技术方案及应用实例。这些内容涵盖了集合框架的基本概念、常见集合类的特点与使用场景&#xff0c;以及在实际开发中可能遇到的问题及解决方案。 Java集合面试题&#xff1…...

SpringCloud学习笔记-3

声明&#xff1a;笔记来源于网络&#xff0c;如有侵权联系删除 1 openfeign 1&#xff09;openfeign远程调用声明式实现 1.启动类中添加注解 EnableFeignClients EnableFeignClients SpringBootApplication public class OrderMainApplication {public static void main(St…...