【Sklearn-LR驯化】一文搞懂分类基石模型-逻辑回归使用总结

【Sklearn-驯化】一文搞懂分类基石模型-逻辑回归使用总结

 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。


文章目录

    • 🎯 1. 基本介绍
    • 💡 2. 理论介绍
    • 🔍 3. 代码实践
      • 3.1 自己实现
      • 3.2 Sklearn实现
      • 3.3 LR重要参数介绍
    • 🔍 4. 注意事项
    • 🔍 5. 总结

🎯 1. 基本介绍

  逻辑回归是一种广泛应用于分类问题的统计方法,特别是在二分类问题中。尽管名字中有“回归”二字,逻辑回归实际上是一种分类算法。在Python的scikit-learn库中,逻辑回归模型通过LogisticRegression类实现,它使用最大似然估计来训练模型。
  逻辑回归比较高效,不需要太大计算,不需要对特征进行缩放,容易实现。但是该算法分类效果一般,且不能处理非线性问题,因为它的决策边界是线性的。因此,当数据分界面是线性平面的时候,可以采用该算法进行分类。
  个人觉得逻辑回归设计的巧妙一点的地方在于,将wx通过sigmod函数缩放(0,1)之间,这样就可以通过设置sigmoid的函数值来归为哪类,从而使输出值满足二项分布的条件。
  逻辑回归的损失函数为交叉熵损失。这个我个人有这么一个解释:对于分类问题,他的损失函数其实是0-1损失函数,但是这种函数很难进行求解,优化,一般都采用类似趋势的可求导函数进行替代,而逻辑回归则通过极大似然估计来转换成log损失函数来替代0-1损失函数

💡 2. 理论介绍

  在线性回归中,我们假设因变量Y和自变量X之间存在以下线性关系:Y = β₀ + β₁X₁ + β₂X₂ + ... + βₙXₙ,其中β₀是截距,β₁至βₙ是自变量X的系数。通过最小化损失函数来确定最佳的系数估计值。
  在博客中我们会详细推导出最小二乘法的公式,这是一种常见的求解线性回归系数的方法。
  逻辑回归假设 p ( y ∣ x , θ ) p(y|x,\theta) p(yx,θ)服从二项分布,同时对 θ T x \theta^Tx θTx通过函数sigmoid进行数据映射,该函数公式和图表如下所示:

h θ ( x ) = 1 1 + e − z h_{\theta} (x)=\frac{1}{1 + e^{-z}} hθ(x)=1+ez1
其中 z = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . . . . + θ n x n = θ T x z=\theta_{0} + \theta_{1}x_{1}+\theta_{2}x_{2}+......+\theta_{n}x_{n}=\theta^{T}x z=θ0+θ1x1+θ2x2+......+θnxn=θTx

  • 具体的推导过程如下所示:

p ( y = 1 ∣ x ; θ ) = h θ ( x ) p(y=1|x;\theta)=h_{\theta}(x) p(y=1∣x;θ)=hθ(x)
p ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) p(y=0|x;\theta)=1-h_{\theta}(x) p(y=0∣x;θ)=1hθ(x)

  • 对上面的二项分布的概率函数的具体表达公式如下所示:

p ( y ∣ x ; θ ) = ( h θ ( x ) ) y ∗ ( 1 − h θ ( x ) ) ( 1 − y ) p(y|x;\theta)=(h_{\theta}(x))^y *(1-h_{\theta}(x))^{(1-y)} p(yx;θ)=(hθ(x))y(1hθ(x))(1y)

  • 对上面的概率函数通过MLE进行参数估计:

L ( θ ) = ∏ i = 1 m p ( y i ∣ x i ; θ ) L(\theta)=\prod_{i=1}^{m}p(y^{i}|x^{i};\theta) L(θ)=i=1mp(yixi;θ)
L ( θ ) = ∏ i = 1 m ( h θ ( x ( i ) ) ) y ( i ) ∗ ( 1 − h θ ( x ( i ) ) ) ( 1 − y ( i ) ) L(\theta)=\prod_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}*(1-h_{\theta}(x^{(i)}))^{(1-y^{(i)})} L(θ)=i=1m(hθ(x(i)))y(i)(1hθ(x(i)))(1y(i))

  • 对上面的似然函数取对数:

l ( θ ) = l o g ( L ( θ ) ) = ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) l(\theta)=log(L(\theta))=\sum_{i=1}^{m}y^{(i)}log(h_{\theta}(x^{(i)})) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)})) l(θ)=log(L(θ))=i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))

  • MLE的目的就是求使得 l ( θ ) l(\theta) l(θ)取最大值的 θ \theta θ,由于函数有很好的凹凸性,故可以通过梯度上升法来求得最大值,为了求解的方便可以在前面添加一个负号,近似的求得函数的最优解:
  • 梯度下降法来求取 J ( θ ) J(\theta) J(θ)的最小值,其中参数 θ \theta θ的更新过程如下所示:

θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_{j}: = \theta_{j}-\alpha\frac{\partial}{\partial \theta_{j}}J(\theta) θj:=θjαθjJ(θ)

  • 其中学习步长为 α \alpha α,具体的求导过程如下所示:

∂ ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) 1 h θ ( x i ) ∂ ∂ θ j h θ ( x ( i ) ) − ( 1 − y i ) 1 1 − h θ ( x ( i ) ) ∂ ∂ θ j h θ ( x ( i ) ) ) \frac{\partial}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{h_{\theta}(x^{i})}\frac{\partial}{\partial \theta_{j}}h_{\theta}(x^{(i)})-(1-y^{i})\frac{1}{1-h_{\theta}(x^{(i)})}\frac{\partial}{\partial \theta_{j}}h_{\theta}(x^{(i)})) θj=m1i=1m(y(i)hθ(xi)1θjhθ(x(i))(1yi)1hθ(x(i))1θjhθ(x(i)))
∂ ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) 1 g ( θ T x ( i ) ) − ( 1 − y ( i ) ) 1 1 − g ( θ T x ( i ) ) ) ∂ ∂ θ j g ( θ T x ( i ) ) \frac{\partial}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{g(\theta^{T}x^{(i)})}-(1-y^(i))\frac{1}{1-g(\theta^{T}x^{(i)})})\frac{\partial}{\partial \theta_{j}}g(\theta^{T}x^{(i)}) θj=m1i=1m(y(i)g(θTx(i))1(1y(i))1g(θTx(i))1)θjg(θTx(i))
∂ ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) 1 g ( θ T x ( i ) ) − ( 1 − y ( i ) ) 1 1 − g ( θ T x ( i ) ) ) g ( θ T x ( i ) ) ( 1 − g ( θ T x ( i ) ) ) ∂ ∂ θ j θ T \frac{\partial}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m} (y^{(i)}\frac{1}{g(\theta^{T}x^{(i)})} - (1-y^{(i)})\frac{1}{1-g(\theta^{T}x^{(i)})})g(\theta^{T}x^{(i)})(1-g(\theta^{T}x^{(i)}))\frac{\partial}{\partial \theta_{j}}\theta^{T} θj=m1i=1m(y(i)g(θTx(i))1(1y(i))1g(θTx(i))1)g(θTx(i))(1g(θTx(i)))θjθT
∂ ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) ( 1 − g ( θ T x ( i ) ) − ( 1 − y ( i ) ) g ( θ T x ( i ) ) ) x j ( i ) \frac{\partial}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}(1-g(\theta^{T}x^{(i)})-(1-y^{(i)})g(\theta^{T}x^{(i)}))x_{j}^{(i)} θj=m1i=1m(y(i)(1g(θTx(i))(1y(i))g(θTx(i)))xj(i)
∂ ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) − g ( θ T x ( i ) ) ) x j ( i ) \frac{\partial}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-g(\theta^{T}x^{(i)}))x_{j}^{(i)} θj=m1i=1m(y(i)g(θTx(i)))xj(i)
∂ ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-h_{\theta}(x^{(i)}))x_{j}^{(i)} θj=m1i=1m(y(i)hθ(x(i)))xj(i)
∂ ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial \theta_{j}}=\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)} θj=m1i=1m(hθ(x(i))y(i))xj(i)

  • 其中对于sigmod函数的求导如下所示,但是由于逻辑回归的函数设定时是带有负号的,所以带入上式计算时需要注意:

f ( x ) = 1 1 + e g ( x ) f(x)=\frac{1}{1+e^{g(x)}} f(x)=1+eg(x)1
∂ ∂ x f ( x ) = − 1 ( 1 + e g ( x ) ) 2 e g ( x ) ∂ ∂ x g ( x ) \frac{\partial}{\partial x}f(x)=-\frac{1}{(1+e^{g(x)})^2}e^{g(x)}\frac{\partial}{\partial x}g(x) xf(x)=(1+eg(x))21eg(x)xg(x)
∂ ∂ x f ( x ) = − 1 1 + e g ( x ) e g ( x ) 1 + e g ( x ) ∂ ∂ x g ( x ) \frac{\partial}{\partial x}f(x)=-\frac{1}{1+e^{g(x)}}\frac{e^{g(x)}}{1+e^{g(x)}}\frac{\partial}{\partial x}g(x) xf(x)=1+eg(x)11+eg(x)eg(x)xg(x)
∂ ∂ x f ( x ) = − f ( x ) ( 1 − f ( x ) ) ∂ ∂ x g ( x ) \frac{\partial}{\partial x}f(x)=-f(x)(1-f(x))\frac{\partial}{\partial x}g(x) xf(x)=f(x)(1f(x))xg(x)

🔍 3. 代码实践

3.1 自己实现

  自行通过python中的numpy库实现LR的代码,具体如下所示:

 import numpy as np
def predict(w, x):
	'''
	w:为训练好的参数w,其数据格式为向量shape(n,m)
	x:为预测数据特征,其数据格式为向量shape(n,m)
	'''
	# 创建sigmod函数形式
	z = np.dot(w, x)
	p_sigmod = np.exp(z) / (1 + np.exp(z))
	# 对sigmod函数输出概率进行判断,将概率等于0.5做为阈值
	if p_sigmod <= 0.5:
		return 0
	else:
		return 1

def train(x, y, iter, step):
	'''
	x:训练数据特征,数据格式为向量shape(n, m)
	y:训练数据label,数据格式为向量(n,1)
	step:为梯度下降的步长
	iter:为梯度下降迭代的次数
	'''
	
	# 初始化参数w, 这里没有将参数b加入了,
	# 如果要加参数b需要将训练数据增加一个维度
	w = np.zeros(x.shape[1])

	# 进行iter次随机梯度下降操作
	for i in range(iter):
		# 每次迭代遍历所以样本进行随机梯度下降算法,每次随机打乱数据的顺序
		index= list(range(x.shape[0]))
        random.shuffle(index)
        for j, idx in enumerate(data_indices):
            tmp_x, tmp_y = x[idx], y[idx]
			# 根据上面的公式最后的最小似然函数的求导结果为:
			#  h(xi)* xi- xi * yi, 所以先构建h(xi)
			z = np.dot(w, tmp_x)
			# 再看上面的梯度下降的算法公式,将构建好的求导结果带入
			w -= step *((np.exp(z) / (1 + np.exp(z)))*tmp_x - tmp_x*tmp_y)
	
	# 也可以直接进行梯度下降操作
	for i in range(iter):
		 z = np.dot(w, x)
         w -= step *((np.exp(z) / (1 + np.exp(z)))*x- x*y)
return w

3.2 Sklearn实现

  我们构建简单的数据集,通过sklearn来实现lr的过程,具体代码如下所示:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# 加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型实例
model = LogisticRegression(max_iter=200)

# 训练模型
model.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)

# 打印分类报告
print(classification_report(y_test, y_pred))

print(f"准确率: {accuracy:.2f}")

              precision    recall  f1-score   support
     0.0       0.00      0.00      0.00         0
     1.0       0.00      0.00      0.00         0
     2.0       0.83      1.00      0.91        39
...

3.3 LR重要参数介绍

  在实际的工作中,lr经常调试的参数如下所示:

  • penalty:惩罚方式,默认为"l2",可选择"l1"或"elasticnet"。"l1"使用L1范数作为惩罚项,可以产生稀疏解;"l2"使用L2范数作为惩罚项,可以防止过拟合;"elasticnet"是"l1"和"l2"的组合。

  • C:正则化强度的倒数。与惩罚项相关联,值越小表示更强的正则化。默认为1.0。

  • fit_intercept:是否计算截距项,默认为True。如果选择False,则模型将不会计算截距。

  • solver:优化算法,默认为"lbfgs"。可选择"newton-cg"、“sag"或"liblinear”。"lbfgs"适用于小型数据集;"newton-cg"适用于多分类问题;"sag"适用于大型数据集;"liblinear"适用于二分类问题。

  • max_iter:迭代次数,默认为100。用于控制优化算法的最大迭代次数。

  • multi_class:多分类问题的处理方式,默认为"auto",可选择"ovr"或"multinomial"。"ovr"使用一对多的方法进行多类别分类,"multinomial"使用Softmax回归进行多类别分类。

  • class_weight:类别权重,默认为None。可以使用balanced来自动平衡不均衡的类别。

🔍 4. 注意事项

  • 逻辑回归假设特征和目标变量之间存在线性关系,即使是在分类问题中。
  • 它对异常值不敏感,但对特征的缩放敏感,因此在训练模型前通常需要进行特征标准化或归一化。
  • max_iter参数是最大迭代次数,有时可能需要调整以确保模型能够收敛。
  • 离散特征的增加和减少都很容易,易于模型快速迭代;
  • 稀疏向量内积乘法速廈快,计算结果方便存储,容易扩展;
  • 离散化的特征对异常数据有很强的鲁棒性(比如年龄为300异常值可归为年龄>30这一段);
  • 逻辑回归属于广义线性模型,表达能力受限。单变量离散化为N个后,每个变量有单独的权重,相当于对模型引入了非线性,能够提升模型表达能力,加大拟合;
  • 离散化进行特征交叉,由 M+N 个变量为M*N个变量(将单个特征分成M个取值),进一步引入非线性,提升表达能力;
  • 特征离散化后,模型会更稳定(比如对用户年龄离散化,20-30作为一个区间,不会因为用户年龄,增加一岁变成完全不同的人;
  • 总得来说就是工业界的做法就是:“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡

🔍 5. 总结

  逻辑回归是处理分类问题的强大工具,特别是在二分类问题中。scikit-learn的LogisticRegression类提供了一个易于使用的接口来训练和预测逻辑回归模型。通过本博客的代码示例,我们学习了如何创建逻辑回归模型,进行训练、预测和评估。希望这篇博客能够帮助你更好地理解逻辑回归模型,并将其应用于实际的分类任务中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第 3 章使用图像和标签

现在您已经对 SwiftUI 有了基本的了解,并了解了如何显示文本内容,现在是时候学习如何在应用中显示图像了。在本章中,我们将探讨Label最常见的用户界面组件之一的用法,以及Image用于在屏幕上渲染图像的视图。与上一章中所做的类似,我将通过构建一个简单的演示向您展示如何使…

Spring项目报错解读与全部报错详解

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我…

基于改进天鹰优化算法(IAO)优化BP神经网络数据回归预测 (IAO-BP)的数据回归预测(多输入多输出)

改进天鹰优化算法(IAO)见&#xff1a;【智能优化算法】改进的AO算法(IAO)-CSDN博客 代码原理 改进天鹰优化算法&#xff08;Improved Eagle Optimization, IAO&#xff09;是一种元启发式优化算法&#xff0c;结合了鹰优化算法&#xff08;Optimization Algorithm, OA&#x…

chrome 配置允许跨域

目录 1.Chrome跨域插件配置 1.1启动插件 1.2. 设置本地调试跨域 2 Firefox跨域插件 2.1. 安装插件 CORS Everywhere 2.2. 启动插件 3 工具下载链接 1.Chrome跨域插件配置 使用chrome插件“Allow CORS: Access-Control-Allow-origin ”来解决跨域问题。 点击pin图标&…

【uml期末复习】统一建模语言大纲

前言&#xff1a; 关于uml的期末复习的常考知识点&#xff0c;可能对你们有帮助&#x1f609; 目录 第一部分 概念与基础 第一章 面向对象技术 第二章 统一软件过程 第三章 UML概述 第四章 用例图 第五章 类图 第六章 对象图 第七章 顺序图 第八章 协作图 第九章 状态…

正版软件 | WIFbox:智能化文件管理工具,让效率与隐私并行

在数字化办公日益普及的今天&#xff0c;文件管理成为了提升工作效率的关键。WIFbox 一款智能文件管理工具&#xff0c;利用强大的人工智能技术&#xff0c;帮助您快速对文件进行分类&#xff0c;完成复杂的智能文件分类任务。 智能分类&#xff0c;效率倍增 WIFbox 通过精细化…

深度学习论文: Separable Self-attention for Mobile Vision Transformers

深度学习论文: Separable Self-attention for Mobile Vision Transformers Separable Self-attention for Mobile Vision Transformers PDF:https://arxiv.org/pdf/2206.02680 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概述 MobileViT是一种融合了CN…

拳打开源SOTA脚踢商业闭源的LI-DiT是怎样炼成的?(商汤/MMLab/上海AI Lab)

文章地址&#xff1a;https://arxiv.org/pdf/2406.11831 仅基于解码器的 Transformer 的大语言模型&#xff08;LLMs&#xff09;与 CLIP 和 T5 系列模型相比&#xff0c;已经展示出卓越的文本理解能力。然而&#xff0c;在文本到图像扩散模型中利用当前先进的大语言模型的范例…

第2章.现场设备的物联网模式--设备网关

第2章.现场设备的物联网模式 本章列出了与现场设备或事物相关的关键模式。阅读本章后&#xff0c;您将能够识别物联网架构中这些模式的存在。它提供了有关模式适合或适用的场景的详细信息&#xff0c;以及需要考虑的约束。这将帮助您相对轻松地理解现有的物联网架构。 本章涵盖…

基于springboot实现商业辅助决策系统项目【项目源码+论文说明】

基于springboot实现商业辅助决策系统演示 摘要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统收支信息和销售订…

展厅设计要合格需满足哪些要求

1、方案的确定 在企业中想做一个合格的展厅那就得找一家展厅设计公司&#xff0c;制定展厅设计的大概方案、展厅的主题、展厅想要呈现的效果&#xff0c;这些都要进行方案论证&#xff0c;经过展厅设计公司对实地情况充分的了解&#xff0c;就会最终达成呈现的方案。 2、展厅的…

Linux系统应用与设置(3):串口调试(minicom)

目录 1. 简述 2. 安装minicom 3. 配置串口参数 4. 打开相应的通信端口 5. 设置 6. 发送字符数据 7. 发送HEX&#xff08;十六进制&#xff09; 1. 简述 在Linux系统中&#xff0c;minicom是一个功能强大的串口通信工具&#xff0c;可用于与外部设备进行字符和HEX数据的收…

脑电微状态与睡眠慢波

摘要 目的&#xff1a;微状态是半稳定的电压拓扑图&#xff0c;它能够解释静息态EEG地形图的大部分差异。然而&#xff0c;白天时间和睡眠对微状态的影响尚未得到检验。为了填补这一空白&#xff0c;本研究评估了在健康参与者中&#xff0c;晚上和早晨之间的微状态是否不同&am…

模拟实现string【C++】

文章目录 全部的实现代码放在了文章末尾准备工作包含头文件定义命名空间和类类的成员变量 构造函数默认构造拷贝构造 重载赋值拷贝函数析构函数迭代器和获取迭代器迭代器获取迭代器 resize【调整size】图解 reserve【调整capacity】empty【判断串是否为空】operator[]appendpus…

【yolov8系列】ubuntu上yolov8的开启训练的简单记录

前言 yolov8的广泛使用&#xff0c;拉取yolov8源码工程&#xff0c;然后配置环境后直接运行&#xff0c;初步验证自己数据的检测效果&#xff0c;在数据集准备OK的情况下 需要信手拈来&#xff0c;以保证开发过程的高效进行。 本篇博客更注意为了方便自己使用时参考。顺便也记录…

万物皆可爬——亮数据代理IP+Python爬虫批量下载百度图片助力AI训练

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【导航大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

AI小白使用Macbook Pro安装llama3与langchain初体验

1. 背景 AI爆火了2年有余&#xff0c;但我仍是一个AI小白&#xff0c;最近零星在学&#xff0c;随手记录点内容供自己复习。 上次在Macbook Pro上安装了Stable Diffusion&#xff0c;体验了本地所心所欲地生成各种心仪的图片&#xff0c;完全没有任何限制的惬意。今天想使用M…

从@Param注解开始,深入了解 MyBatis 参数映射的原理

系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难&#xff0c;MyBatis动态Sql标签解析 Mybatis的CachingExecutor与二级缓存 使用MybatisPlus还是MyBaits &#xff0c;开发者应该如何选择&#xff1f; 巧…

解决所有终端中文输出乱码的问题

一、系统自带的cmd.exe 以及 Git的bash.exe、sh.exe、git-bash.exe和git-cmd.exe&#xff0c;和PowerShell默认使用“当前系统区域设置”设定好的936 (ANSI/OEM - 简体中文 GBK)语言编码。 1、[当前代码页] 的936 (ANSI/OEM - 简体中文 GBK) 是导致中文乱码的原因 在控制面板→…

【基于深度学习方法的激光雷达点云配准系列之GeoTransformer】——模型部分浅析(1)

【GeoTransformer系列】——模型部分 1. create_model2. model的本质3. 模型的主要结构3.1 backbone3.2 transformer本篇继续对GeoTransformer/experiments/geotransformer.kitti.stage5.gse.k3.max.oacl.stage2.sinkhorn/下面的trainval.py进行详细的解读,主要是模型部分, 可以…