线性回归 (Linear Regression)案例分析1
广告费用与产品销量
- 工欲善其事必先利其器
- 数据分析
- 1. 检查缺失值、异常值
- 3. 散点图查看特征、响应相关性
- 3. 热力图查看特征、响应相关性
- 特征工程
- 1、导入必要工具包
- 2、读取数据
- 3、数据标准化
- 4、保存特征工程的结果到文件,供机器学习模型使用
- 模型选择
- 读取数据
- 数据准备
- 1. 最小二乘线性回归(OLS)
- 查看残差分布
- 2. 岭回归:正则参数 λ \lambda λ
- 3. Lasso:正则参数 λ \lambda λ
- 4. 默认超参数的Huber损失回归
- 模型评价指标
- 模型测试结果
- 回归系数
- R 2 R^2 R2分数评价
工欲善其事必先利其器
预备知识: 数据分析入门操作
相关工具库的参考文档: 多维数组&矩阵处理-numpy 文件操作与处理-pandas
数据分析可视化工具1-matplotlib
数据分析可视化工具2-seaborn
机器学习算法库scikit-learn
*深度学习框架TensorFlow
*深度学习框架Pytorch
数据分析
1. 检查缺失值、异常值
导入相关库
#数据处理
import numpy as np
import pandas as pd #数据可视化
import matplotlib.pyplot as plt
import seaborn as sns%matplotlib inline#显示中文
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
读取数据并查看列属性
#读取数据
dpath = "./data/"
df = pd.read_csv(dpath + "Advertising.csv")#df.columns = ['记录号','电视广告费用', '广播广告费用', '报纸广告费用', '产品销量']
df.columns = ['ID','TV', 'radio', 'newspaper', 'sales']
#通过观察前5行,了解数据每列(特征)的概况
df.head()
# 数据总体信息
df.info()

# 对数值型特征,得到每个特征的描述统计量,查看特征的大致分布
df.describe()
- 200个样本,没有缺失值,看不出来有噪声数据
- 每个样本有3个数值型特征: TV, radio, newspaper
- 标签:产品销量
3. 散点图查看特征、响应相关性
#散点图查看单个特征与目标之间的关系
plt.scatter(df['TV'], df['sales'])
plt.xlabel(u'电视广告费用')
plt.ylabel(u'销量')

log_TV = np.log1p(df['TV'])
log_sales = np.log1p(df['sales'])plt.scatter(log_TV, log_sales)
plt.xlabel(u'log(电视广告费用)')
plt.ylabel(u'log(销量)')

plt.scatter(df['radio'], df['sales'])
plt.xlabel(u'广播广告费用')
plt.ylabel(u'销量')

plt.scatter(df['newspaper'], df['sales'])
plt.xlabel(u'报纸广告费用')
plt.ylabel(u'销量')


plt.xlim(0,300)
plt.ylim(0,300)plt.scatter(df['TV'], df['radio'])
plt.xlabel(u'电视广告费用')
plt.ylabel(u'广播广告费用')

- 特征与特征之间的相关性不太高
- 特征TV, radio与标签相关性较高,特征newspaper相关性不太高
3. 热力图查看特征、响应相关性
# 得到相关系数的绝对值,通常认为相关系数的绝对值大于0.6的特征为强相关
data_corr = df.corr()
data_corr = data_corr.abs()
sns.heatmap(data_corr,annot=True)
plt.show()

特征工程
特征均为数值型特征,暂时不做过多处理,只是对特征做标准化处理,使得各特征处理后均为0均值(数据围绕 0 中心化)、1标准差(数据的离散程度被统一为相同的尺度)(并不要求是正态分布:虽然标准正态分布的均值为 0,标准差为 1,但并不是说处理后的特征必须服从正态分布。标准化处理后,特征的分布形状可能仍与原始分布相似(只要经过均值和方差的调整即可))。
1、导入必要工具包
#数据处理
import numpy as np
import pandas as pd #数据可视化
import matplotlib.pyplot as plt
%matplotlib inline#显示中文
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
2、读取数据
#读取数据
dpath = "./data/"
df = pd.read_csv(dpath + "Advertising.csv")#通过观察前5行,了解数据每列(特征)的概况
df.head()
#去掉索引列
df.drop(['Unnamed: 0'], axis = 1, inplace = True)
# 数据总体信息
df.info()
3、数据标准化
# 从原始数据中分离输入特征x和输出y
y = df['sales']
X = df.drop('sales', axis = 1)#特征名称,用于后续显示权重系数对应的特征
feat_names = X.columns
# 数据标准化
# 本数据集中3个特征的单位相同,可以不做特征缩放,不影响正则
# 但3个特征的取值范围不同,如果采用梯度下降/随机梯度下降法求解,
# 还是将所有特征的取值范围缩放到相同区间
from sklearn.preprocessing import StandardScaler# 分别初始化对特征和目标值的标准化器
ss_X = StandardScaler()# 对训练数据,先调用fit方法训练模型,得到模型参数;然后对训练数据和测试数据进行transform
X = ss_X.fit_transform(X)
4、保存特征工程的结果到文件,供机器学习模型使用
fe_df = pd.DataFrame(data = X, columns = feat_names, index = df.index)#加上标签y
fe_df["sales"] = y#保存结果到文件
fe_df.to_csv(dpath + 'FE_Advertising.csv', index=False)
模型选择
读取数据
#数据处理
import numpy as np
import pandas as pd #数据可视化
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns# 使用r2_score作为回归模型性能的评价
from sklearn.metrics import r2_score #显示中文
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']#读取数据
dpath = "./data/"
df = pd.read_csv(dpath + "FE_Advertising.csv")#通过观察前5行,了解数据每列(特征)的概况
df.head()# 数据总体信息
df.info()
数据准备
# 从原始数据中分离输入特征x和输出y
y = df['sales']
X = df.drop('sales', axis = 1)#特征名称,用于后续显示权重系数对应的特征
feat_names = X.columns#将数据分割训练数据与测试数据
from sklearn.model_selection import train_test_split# 随机采样20%的数据构建测试样本,其余作为训练样本
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)
#X_train.shape
1. 最小二乘线性回归(OLS)
# 线性回归
from sklearn.linear_model import LinearRegression# 1.使用默认配置初始化学习器实例
lr = LinearRegression()# 2.用训练数据训练模型参数
lr.fit(X_train, y_train)# 3. 用训练好的模型对测试集进行预测
y_test_pred_lr = lr.predict(X_test)
y_train_pred_lr = lr.predict(X_train)#性能评估,R方分数
print("The r2 score of LinearRegression on test is %f" %(r2_score(y_test, y_test_pred_lr)))
print("The r2 score of LinearRegression on train is %f" %(r2_score(y_train, y_train_pred_lr)))# 看看各特征的权重系数,系数的绝对值大小可视为该特征的重要性
fs = pd.DataFrame({"columns":list(feat_names), "coef":list((lr.coef_.T))})
#fs.sort_values(by=['coef'],ascending=False)
fs = fs.append([{'columns':'intercept','coef':lr.intercept_}], ignore_index=True)
fs


查看残差分布
#在训练集上观察预测残差的分布,看是否符合模型假设:噪声为0均值的高斯噪声
figsize = 11,9
res = y_train_pred_lr - y_train
sns.distplot(res, bins=40, kde = False)
plt.xlabel(u'残差', fontsize = 16)


figsize = 11,9
plt.scatter(y_train, res)
plt.xlabel(u'真实值', fontsize = 16)
plt.ylabel(u'残差', fontsize = 16)

从真实值和残差的散点图来看,真实值和残差不是没有关系。看起来真实值较小和较大时,预测残差大多<0,其余情况残差大多>0。也就是说,模型还没有完全建模y与x之间的关系,还有一部分关系残留在残差中。
2. 岭回归:正则参数 λ \lambda λ
from sklearn.linear_model import RidgeCV#1. 设置超参数(正则参数)范围
alphas = [ 0.01, 0.1, 1, 10, 100]#2. 生成一个RidgeCV实例
ridge = RidgeCV(alphas=alphas, store_cv_values=True) #3. 模型训练
ridge.fit(X_train, y_train) #4. 预测
y_test_pred_ridge = ridge.predict(X_test)
y_train_pred_ridge = ridge.predict(X_train)#模型性能评估
print("The r2 score of Ridge on test is %f" %(r2_score(y_test, y_test_pred_ridge)))
print("The r2 score of Ridge on train is %f" %(r2_score(y_train, y_train_pred_ridge)))# 看看各特征的权重系数,系数的绝对值大小可视为该特征的重要性
fs = pd.DataFrame({"columns":list(feat_names), "coef":list((ridge.coef_.T))})
#fs.sort_values(by=['coef'],ascending=False)
fs = fs.append([{'columns':'intercept','coef':ridge.intercept_}], ignore_index=True)
fs

mse_mean = np.mean(ridge.cv_values_, axis = 0)
plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) #最佳超参数
plt.axvline(np.log10(ridge.alpha_), color='r', ls='--')plt.xlabel('log(alpha)', fontsize = 16)
plt.ylabel('MSE', fontsize = 16)
plt.show()print ('alpha is:', ridge.alpha_)

3. Lasso:正则参数 λ \lambda λ
from sklearn.linear_model import LassoCV#1. 设置超参数搜索范围
#Lasso可以自动确定最大的alpha,所以另一种设置alpha的方式是设置最小的alpha值(eps) 和 超参数的数目(n_alphas),
#然后LassoCV对最小值和最大值之间在log域上均匀取值n_alphas个
# np.logspace(np.log10(alpha_max * eps), np.log10(alpha_max),num=n_alphas)[::-1]#2 生成LassoCV实例(默认超参数搜索范围)
lasso = LassoCV() #3. 训练(内含CV)
lasso.fit(X_train, y_train) #4. 测试
y_test_pred_lasso = lasso.predict(X_test)
y_train_pred_lasso = lasso.predict(X_train)# 评估,使用r2_score评价模型在测试集和训练集上的性能
print("The r2 score of lasso on test is %f" %(r2_score(y_test, y_test_pred_lasso)))
print("The r2 score of lasso on train is %f" %(r2_score(y_train, y_train_pred_lasso)))# 看看各特征的权重系数,系数的绝对值大小可视为该特征的重要性
fs = pd.DataFrame({"columns":list(feat_names), "coef_lr":list((lr.coef_.T)), "coef_ridge":list((ridge.coef_.T)), "coef_lasso":list((lasso.coef_.T))})
#fs.sort_values(by=['coef_lr'],ascending=False)
fs = fs.append([{'columns':'intercept','coef_lr':lr.intercept_, 'coef_ridge':ridge.intercept_, 'coef_lasso':lasso.intercept_}], ignore_index=True)
fs

mses = np.mean(lasso.mse_path_, axis = 1)
plt.plot(np.log10(lasso.alphas_), mses) #最佳超参数
plt.axvline(np.log10(lasso.alpha_), color='r', ls='--')plt.xlabel('log(alpha)', fontsize = 16)
plt.ylabel('MSE', fontsize = 16)
plt.show() print ('alpha is:', lasso.alpha_)

from sklearn.linear_model import ElasticNetCV#1. 设置超参数搜索范围
#Lasso可以自动确定最大的alpha,所以另一种设置alpha的方式是设置最小的alpha值(eps) 和 超参数的数目(n_alphas),
#然后LassoCV对最小值和最大值之间在log域上均匀取值n_alphas个
# np.logspace(np.log10(alpha_max * eps), np.log10(alpha_max),num=n_alphas)[::-1]
l1_ratio = [0.01, 0.1, .5, .7, .9, .95, .99, 1]#2 ElasticNetCV(设置超参数搜索范围)
elastic_net = ElasticNetCV(l1_ratio = l1_ratio ) #3. 训练(内含CV)
elastic_net.fit(X_train, y_train) #4. 测试
y_test_pred_elastic_net = elastic_net.predict(X_test)
y_train_pred_elastic_net = elastic_net.predict(X_train)# 评估,使用r2_score评价模型在测试集和训练集上的性能
print("The r2 score of elastic_net on test is %f" %(r2_score(y_test, y_test_pred_elastic_net)))
print("The r2 score of elastic_net on train is %f" %(r2_score(y_train, y_train_pred_elastic_net)))# 看看各特征的权重系数,系数的绝对值大小可视为该特征的重要性
fs = pd.DataFrame({"columns":list(feat_names), "coef_lr":list((lr.coef_.T)), "coef_ridge":list((ridge.coef_.T)), "coef_lasso":list((lasso.coef_.T)), 'coef_elastic_net':list((elastic_net.coef_.T))})
#fs.sort_values(by=['coef_lr'],ascending=False)
fs = fs.append([{'columns':'intercept','coef_lr':lr.intercept_, 'coef_ridge':ridge.intercept_, 'coef_lasso':lasso.intercept_, 'coef_elastic_net':elastic_net.intercept_}], ignore_index=True)
fs

mses = np.mean(elastic_net.mse_path_, axis = 2)# plot results
n_l1_ratio = len(l1_ratio)
n_alpha = elastic_net.alphas_.shape[1]for i, l1 in enumerate(l1_ratio):plt.plot(np.log10(elastic_net.alphas_[i]), mses[i], label= u'l1正则比例:' + str(l1))#最佳超参数
plt.axvline(np.log10(elastic_net.alpha_), color='r', ls='--')plt.xlabel('log(alpha)', fontsize = 16)
plt.ylabel('MSE', fontsize = 16)
plt.legend(fontsize = 12)
plt.show() print ('alpha is:', elastic_net.alpha_)
print ('l1_ratio is:', elastic_net.l1_ratio_)

4. 默认超参数的Huber损失回归
# Huber回归
from sklearn.linear_model import HuberRegressor# 1.使用默认配置初始化学习器实例
hr = HuberRegressor()# 2.用训练数据训练模型参数
hr.fit(X_train, y_train)# 3. 用训练好的模型对测试集进行预测
y_test_pred_hr = hr.predict(X_test)
y_train_pred_hr = hr.predict(X_train)# 看看各特征的权重系数,系数的绝对值大小可视为该特征的重要性
fs = pd.DataFrame({"columns":list(feat_names), "coef":list((hr.coef_.T))})
#fs.sort_values(by=['coef'],ascending=False)
fs = fs.append([{'columns':'intercept','coef':hr.intercept_}], ignore_index=True)
fs

#在训练集上观察预测残差的分布,看是否符合模型假设:噪声为0均值的高斯噪声
figsize = 11,9
res = y_train_pred_hr - y_train
sns.distplot(res, bins=40, kde = False)
plt.xlabel(u'残差')
plt.title(u'残差直方图')

figsize = 11,9res = y_train - y_train_pred_hr
plt.scatter(y_train_pred_hr, res)
plt.xlabel(u'预测值')
plt.ylabel(u'残差')

模型评价指标
超参数调优评价指标:MSE(红色竖线为最佳超参数)

模型测试结果
回归系数
在数据分析中,我们经常需要从数据集中随机抽取一部分样本作为测试数据,而剩下的样本则用作训练数据。例如,在这个例子中,我们随机选择了20%的样本作为测试数据,而其余80%的样本则用作训练数据。
接下来,我们来看一下广告数据集上不同线性回归模型的系数。这些模型包括最小二乘线性回归、岭回归、Lasso回归以及弹性网络回归。每种模型都对不同的特征(如TV、radio和newspaper)赋予了不同的回归系数。此外,还有一个截距项用于调整模型的基线预测值。
以下是这些模型的回归系数:
| 特征 | 最小二乘线性回归系数 | 岭回归系数 | Lasso系数 | 弹性网络系数 |
|---|---|---|---|---|
| TV | 3.983944 3.983944 3.983944 | 3.981524 3.981524 3.981524 | 3.921642 3.921642 3.921642 | 3.921642 3.921642 3.921642 |
| radio | 2.860230 2.860230 2.860230 | 2.858304 2.858304 2.858304 | 2.806374 2.806374 2.806374 | 2.806374 2.806374 2.806374 |
| newspaper | 0.038194 0.038194 0.038194 | 0.038925 0.038925 0.038925 | 0.000000 0.000000 0.000000 | 0.000000 0.000000 0.000000 |
| 截距项 | 13.969091 13.969091 13.969091 | 13.969282 13.969282 13.969282 | 13.972528 13.972528 13.972528 | 13.972528 13.972528 13.972528 |
从这些系数中,我们可以看到岭回归、Lasso和弹性网络的回归系数的绝对值比最小二乘线性回归(OLS)的小。这表明这些模型在一定程度上进行了权值收缩,有助于防止模型过拟合。此外,Lasso回归还展示了其稀疏性特点,即它将特征newspaper的系数缩减为 0 0 0,这意味着在Lasso模型中,newspaper对预测结果的影响被完全忽略。
这种系数的缩减有助于提高模型的解释性和泛化能力,特别是在特征数量较多的情况下。通过这种方式,我们可以更清晰地理解哪些特征对预测结果有实质性的影响,同时也能够减少模型的复杂度。
R 2 R^2 R2分数评价
在评估不同线性回归模型的性能时,我们通常会使用R方分数( R 2 R^2 R2),这是一个衡量模型拟合优度的统计指标。R方分数的值越接近1,表示模型对数据的解释能力越强。以下是广告数据集上不同线性回归模型的性能比较:
| 数据集 | 最小二乘线性回归 | 岭回归 | Lasso | 弹性网络 |
|---|---|---|---|---|
| 训练集上性能 | 0.896285 0.896285 0.896285 | 0.896285 0.896285 0.896285 | 0.895925 0.895925 0.895925 | 0.895925 0.895925 0.895925 |
| 测试集上性能 | 0.893729 0.893729 0.893729 | 0.893865 0.893865 0.893865 | 0.899197 0.899197 0.899197 | 0.899197 0.899197 0.899197 |
从这些数据可以看出,最小二乘线性回归模型在训练集上的性能最好,其R方分数为 0.896285 0.896285 0.896285,但在测试集上的性能最差,其R方分数为 0.893729 0.893729 0.893729。这表明最小二乘线性回归模型可能存在过拟合的问题,即它在训练数据上表现得很好,但在未见过的数据上表现不佳。
相比之下,Lasso模型和弹性网络在测试集上的性能最好,它们的R方分数均为 0.899197 0.899197 0.899197。这表明这两种模型在处理广告数据集时,不仅在训练集上表现良好,而且在测试集上也能保持较好的性能,具有较好的泛化能力。
总的来说,选择合适的模型对于确保模型在新数据上的表现至关重要。Lasso模型和弹性网络由于其在测试集上的优异表现,可能是处理此类数据集的更好选择。
(注:代码和数据链接会在章节末给出)
相关文章:
线性回归 (Linear Regression)案例分析1
广告费用与产品销量 工欲善其事必先利其器数据分析1. 检查缺失值、异常值3. 散点图查看特征、响应相关性3. 热力图查看特征、响应相关性 特征工程1、导入必要工具包2、读取数据3、数据标准化4、保存特征工程的结果到文件,供机器学习模型使用 模型选择读取数据数据准…...
uni-app集成sqlite
Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…...
策略模式环境类的实现方式对比
文章目录 1、策略模式2、聚合策略类实现方式一3、聚合策略类实现方式二4、对比5、补充:ApplicationContextAware接口 1、策略模式 近期工作中,需要处理4.x和5.x两个版本的数据,所以自然想到的是策略模式,写一个抽象类,…...
Node.js 登录鉴权
目录 Session express-session 配置 express-session 函数 ts 要配置声明文件 express-session.d.ts express-session 使用 express-session 带角色 Token 什么是 JWT token jsonwebtoken 使用 jsonwebtoken 带角色 Session express 使用 express-session 管理会话&…...
【c++】【线程池】固定式线程池(FixedThreadPool)
【c】【线程池】固定式线程池(FixedThreadPool) 1属性 1.1 Task可调用对象 使用 function 包装器和using类型重命名 设置一个Task的可调用对象(可理解为函数指针) 这个Task也就是我们的任务 using Task std::function<void(void)>;定义了一个…...
高可用、高性能、负载均衡集群的区别
维度高可用集群高性能集群负载均衡集群核心目标服务持续可用,减少停机加速计算任务,提升处理能力请求分发算法、健康检查关键技术冗余、心跳检测、鼓掌转移并行计算、高速网络、分布式存储请求分发算法、健康检查典型应用数据库主从切换、关键业务系统科…...
Docker 与 Serverless(无服务器架构)
Serverless(无服务器架构) 是一种新的云计算架构,它通过让开发者专注于业务逻辑而无需管理服务器基础设施,来简化应用的开发和部署。Serverless 模型通常由云服务提供商管理基础设施的所有方面,而开发者只需提供代码和…...
mac 下 java 调用 gurobi 不能加载 jar
在 mac 电脑中的 java 始终不能加载 gurobi 的 jar 包,java 的开发软件 eclipse,idea 总是显示找不到 gurobi 的 jar 包,但是 jar 包明明就在那里。 摸索了三个小时,最后发现原因竟然是: jar 包太新,替换…...
halcon三维点云数据处理(二十七)remove_bin_for_3d_object_localization
目录 一、remove_bin_for_3d_object_localization代码第一部分二、remove_bin_for_3d_object_localization代码第二部分三、效果图一、remove_bin_for_3d_object_localization代码第一部分 1、读图构建3D模型。 2、一次二值化选取区域。 3、一次和背景差值选取区域。 4、在二维…...
Python 编程题 第二节:组合数字、乘法口诀表、水仙花数、反向输出四位数、判断三角形
组合数字 1-4不重复组成三位数,利用集合的去重 lst[] for i in range(1,5):for j in range(1,5):for m in range(1,5):s{i,j,m}if len(s)3:lst.append(i*100j*10m) print(lst) 乘法口诀表 修改换行符 for i in range(1,10):for j in range(1,i1):print(f"…...
【HTML— 快速入门】HTML 基础
准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器,我们在写前端代码时,使用 Sublime Text 打开比使用记事本打开,得到的代码体验更好,比 vscode…...
【MATLAB中的图像数据结构】
MATLAB中的图像数据结构 目录 MATLAB中的图像数据结构目标 :知识点 :1. 图像的存储方式 :2. 图像的颜色空间 :3. 图像的像素操作 : 示例代码 :1. 读取和显示图像 :2. 查看图像信息 :…...
在线抽奖系统——项目介绍
目录 项目介绍 页面预览 需求分析 管理员登录注册 人员模块 奖品模块 活动模块 抽奖模块 系统设计 系统架构 项目环境 数据库设计 安全设计 完整代码:项目完整代码/在线抽奖系统/lottery-system Echo/project - 码云 - 开源中国 项目介绍 利用 MySQ…...
day7作业
编写一个如下场景: 有一个英雄Hero类,私有成员,攻击(Atx),防御(Defense),速度(Speed),生命值(Blood),以及所有的set get 方…...
JavaScript 系列之:Ajax、Promise、Axios
前言 同步:会阻塞。同步代码按照编写的顺序逐行依次执行,只有当前的任务完成后,才会执行下一个任务。 异步:异步代码不会阻塞后续代码的执行。当遇到异步操作时,JavaScript 会将该操作放入任务队列中,继续…...
AI人工智能机器学习之神经网络
1、概要 本篇学习AI人工智能机器学习之神经网络,以MLPClassifier和MLPRegressor为例,从代码层面讲述最常用的神经网络模型MLP。 2、神经网络 - 简介 在 Scikit-learn 中,神经网络是通过 sklearn.neural_network 模块提供的。最常用的神经网…...
鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)
鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar) 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…...
FreeRTOS动态任务和静态任务创建
一.动态任务创建 1.搭建任务框架 去task.c中将任务参数复制到main中 然后将const去掉,它会限制参数类型,任务大小、任务优先级、任务句柄需要去宏定义,任务句柄是指针类型要取地址 vTaskStartScheduler(); //开启任务调度,.c…...
QT:Graphics View的坐标系介绍
在 Qt 的 Graphics View 框架中,存在三种不同的坐标系,分别是 物品坐标系(Item Coordinates)、场景坐标系(Scene Coordinates) 和 视图坐标系(View Coordinates)。这三种坐标系在图形…...
C# httpclient 和 Flurl.Http 的测试
关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站,可以测试Post调用,我写了2个函数,测试httpclient和Flurl使用Post: async 和 await 是成对使用的,为了接受web异步返回的数据,winfor…...
精选案例展 | 智己汽车—全栈可观测驱动智能化运营与成本优化
本案例为“观测先锋 2024 可观测平台创新应用案例大赛”精选案例,同时荣获IT168“2024技术卓越奖评选-年度创新解决方案”奖。 项目背景 近年来,中国汽车行业进入转型升级阶段,智能网联技术成为行业发展的核心。车联网、自动驾驶等技术的加速…...
阿里云可观测全面拥抱 OpenTelemetry 社区
作者:古琦 在云计算、微服务、容器化等技术重塑 IT 架构的今天,系统复杂度呈指数级增长。在此背景下,开源可观测性技术已从辅助工具演变为现代 IT 系统的"数字神经系统",为企业提供故障预警、性能优化和成本治理的全方…...
剑指 Offer II 032. 有效的变位词
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20032.%20%E6%9C%89%E6%95%88%E7%9A%84%E5%8F%98%E4%BD%8D%E8%AF%8D/README.md 剑指 Offer II 032. 有效的变位词 题目描述 给定两个字符串 s 和 t ,…...
AcWing 蓝桥杯集训·每日一题2025·密接牛追踪2
密接牛追踪2 农夫约翰有 N 头奶牛排成一排,从左到右依次编号为 1∼N。 不幸的是,有一种传染病正在蔓延。 最开始时,只有一部分奶牛受到感染。 每经过一个晚上,受感染的牛就会将病毒传染给它左右两侧的牛(如果有的话…...
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法 一 系统环境二 使用场景三 操作步骤 一 系统环境 [rootlocalhost ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server…...
山大软院ai导论实验之采用BP神经网络分类MNIST数据集
目录 实验代码 实验内容 实验代码 import matplotlib.pyplot as plt from matplotlib import font_manager import torch from torch.utils.data import DataLoader import torchvision from torchvision import transforms# 数据预处理 transform transforms.Compose([tra…...
threeJs+vue 轻松切换几何体贴图
嗨,我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下,手头上正好有个在线3D家具商店,用户不仅可以看到产品的静态图片,还能实时更换沙发的颜色或材质,获得真实的购物体验。…...
【python】01_写在前面的话
又是爆肝干文的日子,继上次说要出一期Python新手入门教程系列文章后,就在不停地整理和码字,终于是把【基础入门】这一块给写出来了。 不积跬步无以至千里,不积小流无以成江海,一个一个板块的知识积累,早晚你…...
跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)
飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案: 一、背景痛点与解决方案 在技术文档创作中,数学公式的跨平台渲染一直存在三大痛点: 飞书云文档:原生KaTeX渲染与导出功能存在语法限制微软Word:Math…...
【Python爬虫(85)】联邦学习:爬虫数据协作的隐私保护新范式
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
