【Sklearn-线性回归驯化】史上最为全面的预测分析的基石-线性回归大全

【Sklearn-驯化】史上最为全面的预测分析的基石-线性回归大全

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

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

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

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

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


文章目录

    • 🎯 1. 基本介绍
    • 💡 2. 理论推导
      • 2.1 数学基础知识
      • 2.2 极大似然估计(MLE)
      • 2.3 极大后验估计(MAP)
      • 2.4 岭回归
      • 2.5 Lasso回归
    • 🔍 3. 代码实践
      • 3.1 自己实现
      • 3.2 sklearn线性回归使用
    • 🔍 4. 注意事项

🎯 1. 基本介绍

  线性回归是统计学中最基础的预测模型之一,用于分析一个或多个自变量(解释变量)与一个因变量(响应变量)之间的线性关系。在Python中,scikit-learn库提供了一个简单而强大的线性回归实现,适用于各种回归任务。
  线性回归就两个参数,从频率学派去解释就是去最小化均方根误差,而最小化误差的方法就是最小二乘法,而对于最小二乘法可以通过极大似然估计推导出来。对于贝叶斯角度去,通过极大后验来估计线性回归的参数,个人感觉更好理解。
  线性回归模型简单,计算速度快,解释性较强,但模型假设较强,如果不符合模型假设拟合效果较差
   线性回归就是通过最小二乘方,拟合得出w矩阵,通过调用sklearn实现简单,但是不符合模型假设,噪声较多时,模型训练效果较差。

💡 2. 理论推导

2.1 数学基础知识

  • 矩阵的转置:

( a b ) T = b T a T , ( a + b ) T = a T + b T (ab)^T = b^Ta^T, (a+b)^T=a^T+b^T (ab)T=bTaT,(a+b)T=aT+bT

  • 矩阵的微分计算:

d(X+Y) = d(X) + d(Y),
d(XY) = d(XY) + Xd(Y),
d( X T X^T XT)= ( d ( X ) ) T (d(X))^T (d(X))T

  • 矩阵的求导:

∂ x T A x ∂ x = ( A T + A ) x \frac{\partial x^TAx}{\partial x}=(A^T+A)x xxTAx=(AT+A)x
∂ x T x ∂ x = 2 x \frac{\partial x^Tx}{\partial x}=2x xxTx=2x
∂ β T x ∂ x = β \frac{\partial \beta^Tx}{\partial x}=\beta xβTx=β
∂ x T β ∂ x = β \frac{\partial x^T\beta}{\partial x}=\beta xxTβ=β

  • 证明上述第一条公式:

d ( x T A x ) = d ( x T ) A x + x T d ( A x ) d(x^TAx)=d(x^T)Ax+x^Td(Ax) d(xTAx)=d(xT)Ax+xTd(Ax)
d ( x T A x ) = ( A x ) T d ( x ) + x T ( A T ) T d x d(x^TAx)=(Ax)^Td(x)+x^T(A^T)^Tdx d(xTAx)=(Ax)Td(x)+xT(AT)Tdx
d ( x T A x ) = ( x T A T + x T A ) d x d(x^TAx)=(x^TA^T+x^TA)dx d(xTAx)=(xTAT+xTA)dx
则: ∂ x T A x ∂ x = ( x T A T + x T A ) T = ( A T + A ) x \frac{\partial x^TAx}{\partial x}=(x^TA^T+x^TA)^T=(A^T+A)x xxTAx=(xTAT+xTA)T=(AT+A)x

2.2 极大似然估计(MLE)

  对于给定的数据集,我们可以把其中的数据看做是事实,而我们要做的工作就是得到参数为了使我们的模型更加接近事实,也就使得由数据集中的X得到对应的Y这件事发生的可能性最大。也即对于数据集中的数据D (Y, X), p ( D ∣ X , θ ) = ∏ ( P ( y ∣ x , θ ) ) p(D|X, \theta ) = \prod (P(y|x, \theta )) p(DX,θ)=(P(yx,θ))的值最大。显然对于每一组(x,y)他们之间是独立的。因此,对于一组数据(x,y)存在:

P ( y ∣ x , θ ) = p ( y ∣ h θ ( x ) + ε ) = p ( y − h θ ( x ) ∣ ϵ ) P(y|x, \theta ) = p(y|h_{\theta }(x)+\varepsilon ) = p(y-h_{\theta }(x)|\epsilon ) P(yx,θ)=p(yhθ(x)+ε)=p(yhθ(x)ϵ)

  • 假设 ϵ \epsilon ϵ服从(0,1)高斯分布,则似然函数为:

l ( θ ) = l o g p ( D ∣ θ ) ) = ∑ i = 1 n l o g p ( y i ∣ x i , θ ) l(\theta ) = logp(D|\theta )) = \sum_{i=1}^{n}logp(y_{i}|x_{i},\theta ) l(θ)=logp(Dθ))=i=1nlogp(yixi,θ)
P ( y ∣ x , θ ) = p ( y − h θ ( x ) ∣ ϵ ) = 1 2 π σ e − ( x − u ) 2 2 σ 2 = 1 2 π σ e − ( y − h θ ) 2 2 P(y|x, \theta ) = p(y-h_{\theta }(x)|\epsilon ) = \frac{1}{\sqrt{2\pi \sigma }}e^{-\frac{(x-u)^{2}}{2\sigma ^{2}}}= \frac{1}{\sqrt{2\pi \sigma }}e^{-\frac{(y-h_{\theta})^{2}}{2}} P(yx,θ)=p(yhθ(x)ϵ)=2πσ 1e2σ2(xu)2=2πσ 1e2(yhθ)2
l n ( p ( y ∣ x , θ ) ) = ∑ l n ( 1 2 π σ ) − ( y − h θ ( x ) ) 2 2 = C − 1 2 ∑ ( y − h θ ( x ) ) 2 ln(p(y|x,\theta))= \sum ln(\frac{1}{\sqrt{2\pi \sigma }}) - \frac{(y-h_{\theta}(x))^{2}}{2}=C-\frac{1}{2}\sum (y-h_{\theta }(x))^{2} ln(p(yx,θ))=ln(2πσ 1)2(yhθ(x))2=C21(yhθ(x))2

  • 所以要是上面的似然函数值最大化就是要最小化:min: 1 2 ∑ ( y − h θ ( x ) ) 2 \frac{1}{2}\sum (y-h_{\theta }(x))^{2} 21(yhθ(x))2,而由于是二次方,所以也叫做最小二乘方,最小二乘法的推导过程如下所示:

▽ w J ( w ) = ▽ w ( X w − Y ) T ( X w − Y ) \triangledown_wJ(w)=\triangledown_w(Xw-Y)^T(Xw-Y) wJ(w)=w(XwY)T(XwY)
▽ w J ( w ) = ▽ w ( w T X T X w − Y T X w − w T X T Y + Y T Y ) \triangledown_wJ(w)=\triangledown_w(w^TX^TXw-Y^TXw-w^TX^TY+Y^TY) wJ(w)=w(wTXTXwYTXwwTXTY+YTY)
▽ w J ( w ) = ▽ w ( w T X T X w ) − ▽ w ( Y T X w ) − ▽ w ( w T X T Y ) \triangledown_wJ(w)=\triangledown_w(w^TX^TXw)-\triangledown_w(Y^TXw)-\triangledown_w(w^TX^TY) wJ(w)=w(wTXTXw)w(YTXw)w(wTXTY)
▽ w J ( w ) = 2 ∗ X T X w − X T Y − X T Y \triangledown_wJ(w)=2*X^TXw-X^TY-X^TY wJ(w)=2XTXwXTYXTY
▽ w J ( w ) = 2 ∗ X T X w − 2 X T Y \triangledown_wJ(w)=2*X^TXw-2X^TY wJ(w)=2XTXw2XTY

  • 最后得出来的w的结果如下所示:

w = ( x T x ) − 1 x T y w =(x^Tx)^{-1}x^Ty w=(xTx)1xTy

2.3 极大后验估计(MAP)

  极大后验估计的方法来估计线性回归中的参数w,具体的公式如下所示:

a r g m a x : p ( θ ∣ D ) = a r g m a x : p ( D ∣ θ ) p ( θ ) p ( D ) = a r g m a x : p ( D ∣ θ ) p ( θ ) argmax:p(\theta |D) = argmax:\frac{p(D|\theta )p(\theta )}{p(D)}= argmax:p(D|\theta )p(\theta ) argmax:p(θD)=argmax:p(D)p(Dθ)p(θ)=argmax:p(Dθ)p(θ)

  • 从上面的公式可以看出,当 p ( θ ) p(\theta ) p(θ)服从均值分布时,MAP和MLE等同,当服从高斯时,就是岭回归,当服从拉普拉斯时就是lassos回归。

2.4 岭回归

  岭回归的loss如下所示:

J ( w ) = ∑ ( y − h θ ( x ) ) ) 2 + λ ∣ ∣ w ∣ ∣ 2 2 J(w) = \sum (y - h_{\theta }(x)))^2 + \lambda ||w||_{2}^{2} J(w)=(yhθ(x)))2+λ∣∣w22
J ( w ) = 2 X T X w − 2 X T y + λ I J(w) = 2X^TXw-2X^Ty+\lambda I J(w)=2XTXw2XTy+λI

  • 令上述为0,则可以求解得出w的值如下所示:

w = ( λ I D + X T X ) − 1 X T y w = (\lambda I_{D} + X^{T}X)^{-1}X^{T}y w=(λID+XTX)1XTy

  • 关于岭回归为啥是防止过拟合降维的作用,当矩阵 A − 1 = 1 ∣ A ∣ A ∗ A^{-1}=\frac{1}{|A|}A^{*} A1=A1A,当x中很多的行相关时,则|A|可能为零,从而导致 A − 1 A^{-1} A1的值很大,但是岭回归中添加了$\lambda I_{D} $防止其值不过大,当x中行向量相关时。
  • 当然从最优化的角度更好理解的是,最小化上面的公式,第一项要最小化,那么第二项是个大于0的值,所有限制了w的值比较大,从而增加了模型的鲁棒性。
  • 还有一种解释的方法就是对参数进行梯度下降法,第一步导数的求取:

$ J(w) = \frac{1}{2m} \sum_{i=1}{m}(h_{w}(x{i})-y{i}){2} + \frac{1}{2m} \lambda ||w||_{2}^{2}$
∂ ( J ( w ) ) ∂ ( w ) = 1 m ( h w ( x i ) − y i ) ∗ ∂ ( h w ( x i ) ) x i + λ m w \frac{\partial(J(w))}{\partial(w)} = \frac{1}{m}(h_{w}(x^{i})-y^{i})*\frac{\partial(h_{w}(x^{i}))}{x^{i}} + \frac{\lambda}{m}w (w)(J(w))=m1(hw(xi)yi)xi(hw(xi))+mλw
∂ ( J ( w ) ) ∂ ( w ) = 1 m ( h w ( x i ) − y i ) ∗ x j i + λ m w \frac{\partial(J(w))}{\partial(w)} = \frac{1}{m}(h_{w}(x^{i})-y^{i})*x_{j}^{i}+ \frac{\lambda}{m}w (w)(J(w))=m1(hw(xi)yi)xji+mλw

  • 第二步,梯度更新的过程:

w j : w j ( 1 − λ m ) − ∂ ( J ( w ) ) ∂ ( w ) w_{j}: w_{j}(1-\frac{\lambda}{m}) - \frac{\partial(J(w))}{\partial(w)} wj:wj(1mλ)(w)(J(w))

  • 从上式可以看到,与未添加L2正则化的迭代公式相比,每一次迭代 θ j \theta_j θj,都要先乘以一个小于1的因子,从而使得 θ j \theta_j θj的值不断减小,所以,从整体上来看相对于不加l2, θ j \theta_j θj减小的更大一些。

2.5 Lasso回归

  Lasso回归的loss如下所示:

J ( w ) = ∑ ( y − h θ ( x ) ) ) 2 + λ ∣ ∣ w ∣ ∣ 1 J(w) = \sum (y - h_{\theta }(x)))^2 + \lambda ||w||_{1} J(w)=(yhθ(x)))2+λ∣∣w1

  • J(w)中的第一项的导数结果如下:

2 ∗ X T X w − 2 ∗ X T Y 2*X^{T}Xw - 2*X^{T}Y 2XTXw2XTY

  • 对于第二项的导数来说,由于在0点函数不可导,故有2种比较好的方法进行求导:一种是次梯度下降法(收敛慢,不常用),还有一种是sklearn中使用的坐标下降法
  • 坐标下降法的步骤如下所示:

算法的核心思想就是选择一个维度,固定其它的维度,然后不断的遍历这个维度上的数值,最后直到选择出目标函数的值最小
1.首先给定一个初始点,如 X_0=(x1,x2,…,xn);
2.for x_i=1:n
固定除x_i以外的其他维度
以x_i为自变量,求取使得f取得最小值的x_i;
end

🔍 3. 代码实践

3.1 自己实现

  如果要从0到1开始实现线性回归算法,具体的代码如下所示:

def linear_regression(x: np.array(),
                      y: np.array()
                      ):
    '''
    其中@符号相当于两个数组点乘,也可以使用函数np.dot(a, b)来实现相同的功能
    求线性回归的参数w:其中x的shape为(n,m),y的shape为(n,1)
    w = (X^T X)^{-1} X^T y
    '''
    tmp = (x.T@x).I
    w = tmp@x.T@y
    return w

  • 岭回归代码
def ridge_regression(x: np.array(),
                     y: np.array(),
                     lambda_x):
    '''
    求岭回归的参数w:其中x的shape为(n,m),y的shape为(n,1), lambda为数值
    w = (X^T X + lambdaI)^{-1} X^T y
    '''
    xtx = x.T@x
    m,_ = xtx.shape
    I_x = np.eye(m)
    tmp = (xtx + lambda_x*I_x).I
    w = tmp@x.T@y
    return w

# 在求解w也可以使用梯度下降的方法来求解w
def gradientDescent(X, Y, alpha, epoch, c):
   W = np.random.normal(0,1,size=(X.shape[1],))
   for i in range(epoch):
       W -= alpha*(X.T).dot(X.dot(W)-Y)/X.shape[0] + c*W
   return W

3.2 sklearn线性回归使用

  我们构建数据来模型线性回归的整个过程,具体的代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# 创建一些示例数据
X = 2 * np.random.rand(100, 1)  # 自变量,100个样本
y = 4 + 3 * X + np.random.randn(100)  # 因变量,添加噪声

# 添加截距项
X_b = np.c_[np.ones((100, 1)), X]  # 添加一列1s作为截距项

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_b, y, test_size=0.2, random_state=42)

# 创建线性回归模型实例
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)

# 在训练集和测试集上进行预测
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

# 计算MSE和R²
train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test, y_test_pred)
train_r2 = r2_score(y_train, y_train_pred)
test_r2 = r2_score(y_test, y_test_pred)

print(f"训练集MSE: {train_mse:.2f}, R²: {train_r2:.2f}")
print(f"测试集MSE: {test_mse:.2f}, R²: {test_r2:.2f}")


训练集MSE: 0.00,: 1.00
测试集MSE: 0.00,: 1.00

🔍 4. 注意事项

  • 线性回归模型假设自变量和因变量之间存在线性关系,如果这种关系不成立,模型可能不适用。
  • 线性回归对异常值敏感,需要在建模前进行适当的数据清洗。
  • 考虑使用特征缩放,特别是当自变量的量纲不一致时。

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

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

相关文章

Java8新特性stream的原理和使用

这是一种流式惰性计算&#xff0c;整体过程是&#xff1a; stream的使用也异常方便&#xff0c;可以对比如List、Set之类的对象进行流式计算&#xff0c;挑出最终想要的结果&#xff1a; List<Timestamp> laterTimes allRecords.stream().map(Record::getTime).filter…

电脑音频剪辑怎么操作?分享六个简单的音频剪辑技巧【常用】

音频剪辑的需求越来越多&#xff0c;大多数短视频中的音乐都是大家后期制作的&#xff0c;主要目的就就是让视频观看起来更有趣。音频剪辑的方法有很多&#xff0c;比较好用的可以借助第三方音频剪辑软件。操作简单&#xff0c;对没有任何剪辑经验的小白用户来说十分友好。 本文…

java简易计算器(多种方法)

parseDouble() 方法属于 java.lang.Double 类。它接收一个字符串参数&#xff0c;其中包含要转换的数字表示。如果字符串表示一个有效的 double&#xff0c;它将返回一个 double 值。 应用场景 parseDouble() 方法在以下场景中非常有用&#xff1a; 从用户输入中获取数字&a…

VUE大屏的开发过程(纯前端)

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;工作多年做过各类项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论和学习的问题可联系我&#xff1a;1…

2.4G无线通信芯片数据手册解读:Ci24R1南京中科微

今天&#xff0c;我非常荣幸地向您介绍这款引领行业潮流的2.4G射频芯片&#xff1a;Ci24R1。这款芯片&#xff0c;不仅是我们技术的结晶&#xff0c;更是未来无线通信的璀璨明星。 首先&#xff0c;让我们来谈谈Ci24R1的“速度”。2.4G射频芯片&#xff0c;凭借其卓越的数据传输…

Python基于逻辑回归分类模型、决策树分类模型、随机森林分类模型和XGBoost分类模型实现乳腺癌分类预测项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在当今医疗健康领域&#xff0c;乳腺癌作为威胁女性健康的主要恶性肿瘤之一&#xff0c;其早期诊断与精…

OpenHarmony开发实战:HDF驱动开发流程

概述 HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;为驱动开发者提供驱动框架能力&#xff0c;包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路&#xff0c;让驱动开发和部署更加规范&#xff0c;旨在…

Redis-Bitmap位图及其常用命令详解

1.Redis概述 2.Bitmap Bitmap 是 Redis 中的一种数据结构&#xff0c;用于表示位图&#xff08;bit array&#xff09;。 它通常用于处理大规模数据集中每个元素的状态&#xff0c;比如用户的在线/离线状态&#xff08;每个用户对应一个位&#xff0c;表示在线&#xff08;1&a…

[数据结构】——七种常见排序

文章目录 前言 一.冒泡排序二.选择排序三.插入排序四.希尔排序五.堆排序六.快速排序hoare挖坑法前后指针快排递归实现&#xff1a;快排非递归实现&#xff1a; 七、归并排序归并递归实现&#xff1a;归并非递归实现&#xff1a; 八、各个排序的对比图 前言 排序&#xff1a;所谓…

Mac中的xshell、xftp

ROYAL TSX 插件式支持远程连接linux、支持命令行、支持ftp、支持远程windows桌面。 免费版就足够使用了。&#xff08;支持维护一个Connections文件夹&#xff09; 需要在本地创建一个文件夹&#xff0c;用以保存链接信息 使用方法

Bytebase 2.20.0 - 支持为工单事件配置飞书个人通知

&#x1f680; 新功能 支持 Databricks。支持 SQL Server 的 TLS/SSL 连接。支持为工单事件配置飞书个人通知。支持限制用户注册的邮箱域名。 &#x1f514; 重大变更 将分类分级同步设置从数据库配置移至工作空间的全局配置。 SQL 编辑器只读模式下只允许执行 Redis 的只读…

抖音外卖服务商申请全域外卖系统源码部署,如何保证竞争力?

随着本地生活市场规模的逐渐扩大&#xff0c;多家互联网公司在加大投入力度的同时&#xff0c;也在不断调整其市场竞争策略&#xff0c;作为国内头部社交平台的抖音也不例外。就在近日&#xff0c;抖音发布了关于新增《【到家外卖】内容服务商开放准入公告》的意见征集通知&…

OSI七层模型TCP/IP四层面试高频考点

OSI七层模型&TCP/IP四层&面试高频考点 1 OSI七层模型 1. 物理层&#xff1a;透明地传输比特流 在物理媒介上传输原始比特流&#xff0c;定义了连接主机的硬件设备和传输媒介的规范。它确保比特流能够在网络中准确地传输&#xff0c;例如通过以太网、光纤和无线电波等媒…

SCI二区复现|体育场观众优化算法(SSO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;M Nemati受到体育场观众的行为对比赛中球员行为的影响启发&#xff0c;提出了体育场观众优化算法&#xff08;Stadium Spectators Optimizer, SSO&#xff09;。 2.算法…

2023年第十四届蓝桥杯JavaB组省赛真题及全部解析(下)

承接上文&#xff1a;2023年第十四届蓝桥杯JavaB组省赛真题及全部解析&#xff08;下&#xff09;。 目录 七、试题 G&#xff1a;买二赠一 八、试题 H&#xff1a;合并石子 九、试题 I&#xff1a;最大开支 十、试题 J&#xff1a;魔法阵 题目来自&#xff1a;蓝桥杯官网…

Docker 安装最新版本 Jenkins

目录 1、下载、启动容器、更新到最新版本 2、查看初始密码两种方式&#xff1a; 3、默认安装的部分未汉化&#xff0c;删除默认的汉化插件。重启容器&#xff0c;重新安装汉化插件 4、安装 Publish over SSH、docker-build-step 、Docker Commons 插件 5、配置服务器连接信…

【LLM 论文】Self-Refine:使用 feedback 迭代修正 LLM 的 output

论文&#xff1a;Self-Refine: Iterative Refinement with Self-Feedback ⭐⭐⭐⭐ CMU, NeurIPS 2023, arXiv:2303.17651 Code: https://selfrefine.info/ 论文速读 本文提出了 Self-Refine 的 prompt 策略&#xff0c;可以在无需额外训练的情况下&#xff0c;在下游任务上产…

D13009-ASEMI电源开关三极管D13009

编辑&#xff1a;ll D13009-ASEMI电源开关三极管D13009 型号&#xff1a;D13009 品牌&#xff1a;ASEMI 批号&#xff1a;2024 沟道&#xff1a;NPN 电流&#xff1a;4A 电压&#xff1a;400V 安装方式&#xff1a;直插式封装 特性&#xff1a;NPN晶体管、三极管、12A…

分享10个AI搞钱副业,门槛低,普通人也能学的会!易上手!

前言 本期给大家分享的是利用AI 做副业的一些方法&#xff0c;大家可以挑选适合自己的赛道去搞钱 现在是人工智能时代&#xff0c;利用好AI 工具&#xff0c;可以降低普通人做副业的门槛&#xff0c;同时也能提高工作效率&#xff0c; 因此AI 赚钱的副业还是挺多的&#xff0…

【软考论文】项目背景及论文模版

目录 一、项目核心功能二、论文模板一、项目核心功能 二、论文模板 论文字数说明 总字数 2500 = 500 + 400 +400 * 3 + 300 背景:500 回答问题:400 三段论:1200 = 400 * 3 结论:300 ~ 400 摘要(<300字) 本人于2022年1月参与了某车厂的全渠道数字化精准营销平台项目,该…