基于H2O AutoML与集成学习策略的房屋售价预测模型研究与实现

项目简述:

本项目采用H2O AutoML工具,针对加州房屋销售价格预测问题进行了深入研究与建模。项目以Kaggle提供的加州房屋
交易数据集为基础,通过数据清洗、特征工程、模型训练与评估等步骤,构建了一种基于集成学习策略的房价预测模型。该模型特别关注了异常值检测与处理、缺失值填充、数据类型转换、变量重要性筛选以及特征选择等多个关键环节,并运用统计学方法对数值型特征进行归一化处理,旨在提高模型泛化能力和预测精度。

步骤概述:

数据导入与初步探索:

首先导入所需库文件(如numpy、pandas等),加载训练集与测试集数据,并对原始数据的基本结构与大小进行检查。

数据清理:

离群点识别与剔除:

通过绘制“出售价格”与各相关特征(如“挂牌价”、“税估价值”、“年税收额”、“上次出售价格”)之间的散点图,发现并移除明显偏离正常分布的离群点。

特征处理:

对“卧室数”列进行特殊处理,将包含特定描述的条目转化为纯数字形式;同时将“邮编”列转换为字符串类型,以便后续分析。

缺失值处理:

统计并展示数据集中各列缺失值情况,依据缺失值数量与性质,分别采用零值填充、最大值填充、‘None’填充及众数填充等方法对缺失值进行有效填补。

数据转换与预处理:

目标变量调整:

对目标变量“出售价格”进行对数变换,以减小其偏斜程度,便于模型训练。

特征分布校正:

计算数值型特征的偏度,识别并记录高偏度特征。随后,对这些特征应用Box-Cox变换进行校正,降低其偏斜程度,提升模型性能。

异常值修正:

对于某些特征(如“车库车位数”、“总车位数”),设定阈值,确保其值大于零,避免引入不合理信息。

特征选择与模型训练:

特征筛选:

根据变量重要性指标,从所有特征中选取部分具有较高预测价值的特征用于模型构建。

模型搭建与训练:

利用H2O框架初始化并配置AutoML任务,指定最大模型数量、算法类型(仅限XGBoost)、最大运行时间、停止准则(RMSLE)及排序标准(RMSLE)。然后在预处理后的训练集上训练AutoML模型。

模型融合与预测:

集成预测:

鉴于单个模型可能存在过拟合现象,本项目采取前k个最优模型输出平均值的方式进行集成预测,以期降低方差、提高整体预测性能。

结果提交:

将集成预测结果保存至符合竞赛要求的CSV文件格式,准备提交至Kaggle平台进行评分。

实现代码

导入必要类库

import numpy as np # 用于线性代数的numpy库
import pandas as pd # 用于数据处理和CSV文件读写的pandas库# 输入数据文件可用在只读的“../input/”目录中
# 例如,运行这行代码(通过点击运行或按Shift+Enter)将列出“input”目录下的所有文件import os
for dirname, _, filenames in os.walk('/kaggle/input'):for filename in filenames:print(os.path.join(dirname, filename)) # 打印输入目录下所有文件的路径# 您可以在当前目录(/kaggle/working/)中写入最多20GB的数据,这些数据在使用“Save & Run All”创建版本时将作为输出保留
# 您还可以将临时文件写入/kaggle/temp/,但它们不会在当前会话之外被保存
# 导入plotly的几个模块用于数据可视化
import plotly.express as px  # plotly.express简化了创建交互式图表的过程
import plotly.graph_objects as go  # plotly.graph_objects允许创建并自定义各种交互式图表
import plotly.figure_factory as ff  # plotly.figure_factory提供了一些工具来创建自定义的图表
from plotly.subplots import make_subplots  # plotly.subplots用于创建包含多个子图的图# 导入matplotlib.pyplot用于对比或者结合matplotlib的特性进行可视化
import matplotlib.pyplot as plt# 导入pandas_profiling用于数据探查和生成报告
from pandas_profiling import ProfileReport# 导入seaborn用于美化matplotlib的图表以及更高级的统计可视化
import seaborn as sns# 导入scikit-learn的metrics模块用于评估模型性能
from sklearn import metrics# 导入scipy的stats模块用于统计分析
from scipy import stats# 导入copy的deepcopy用于创建对象的深拷贝
from copy import deepcopy# 导入h2o框架用于处理大规模数据以及建模
import h2o

这段代码主要目的是导入数据处理、可视化和建模所需的Python库。这些库包括Plotly用于交互式图表制作,PandasProfiling用于数据概况生成,Seaborn用于美观的统计图表,Scikit-Learn用于模型评估,Scipy用于统计分析,以及H2O用于大规模数据处理和建模。

1. 数据清洗

导入并观察数据

从指定路径读取加利福尼亚州房屋价格的训练集和测试集CSV文件。

train_df = pd.read_csv('/kaggle/input/california-house-prices/train.csv')
test_df = pd.read_csv('/kaggle/input/california-house-prices/test.csv')# 输出训练集和测试集的数据形状
train_df.shape, test_df.shape

((47439, 41), (31626, 40))

根据以下散点图,删除离群点

从train_df数据框中删除指定的行索引

train_df=train_df.drop([3674,6055,32867,34876,43398,44091,44633])

将训练集中的‘Sold Price’(成交价格)和‘Listed Price’(挂牌价格)列合并,
并使用Plotly Express库绘制散点图。

data = pd.concat([train_df['Sold Price'], train_df['Listed Price']], axis=1)  # 合并成交价格和挂牌价格列# 使用Plotly Express绘制散点图,比较挂牌价格与成交价格
fig = px.scatter(data, x='Listed Price', y='Sold Price')
fig.show()  # 展示散点图

将训练集中的“Sold Price”(成交价格)和“Tax assessed value”(税收评估值)两列合并,
并创建一个散点图来展示这两个变量之间的关系。

import pandas as pd
import plotly.express as px# 合并两列数据
data = pd.concat([train_df['Sold Price'], train_df['Tax assessed value']], axis=1)# 创建并显示散点图
fig = px.scatter(data, x='Tax assessed value', y='Sold Price')
fig.show()

将训练集中的“成交价格”和“年税金额”两列合并,并绘制散点图。

import pandas as pd
import plotly.express as px# 合并数据列
data = pd.concat([train_df['Sold Price'], train_df['Annual tax amount']], axis=1)# 绘制散点图
fig = px.scatter(data, x='Annual tax amount', y='Sold Price')
fig.show()

将训练集中的“成交价格”和“最近成交价格”列合并,并以散点图的形式展示这两个价格之间的关系。

import pandas as pd
import plotly.express as px# 将“成交价格”和“最近成交价格”列合并为一个新的数据帧
data = pd.concat([train_df['Sold Price'], train_df['Last Sold Price']], axis=1)# 创建并展示散点图
fig = px.scatter(data, x='Last Sold Price', y='Sold Price')
fig.show()
# 分割特征和标签
y = train_df['Sold Price'].reset_index(drop=True)  # 提取标签(售出价格)并重置索引
train_features = train_df.drop('Sold Price', axis=1)  # 从训练数据中删除标签列,获取训练特征
test_features = test_df.copy()  # 复制测试数据的特征,不做任何修改# 合并训练和测试特征,重置索引
features = pd.concat([train_features, test_features]).reset_index(drop=True)
features.shape  # 输出特征的形状(维度)

初步处理数据

zip列应作为字符串 并对bedroom列作简单处理

处理卧室数量字段,将含有逗号分隔的多个值减少为一个整数表示卧室数量。
如果字段是NaN或只包含数字,则原样返回。
特别地,如果列表中包含’Walk-in Closet’,则在计算卧室数量时将其排除。

def proc_bedroom(x):# 检查x是否不是NaN且不全为数字if not pd.isna(x) and not x.isdigit():temp = x.split(',')  # 使用逗号分割xn = len(x.split(','))  # 计算分割后的部分数量if 'Walk-in Closet' in temp:n -= 1  # 如果包含'Walk-in Closet',则减少计数return nelse:return x  # 如果x是NaN或全为数字,则原样返回# 应用proc_bedroom函数到features数据框的'Bedrooms'列
features['Bedrooms']=features['Bedrooms'].apply(lambda x: proc_bedroom(x))
# 将'Bedrooms'列转换为数值类型
features['Bedrooms'] = pd.to_numeric(features['Bedrooms'])
# 将'Zip'列转换为字符串类型
features['Zip'] = features['Zip'].astype('str')

缺省值填充

处理缺失数据

# 计算每个特征的缺失值数量并按降序排列
total = features.isnull().sum().sort_values(ascending=False)# 计算每个特征的缺失值比例并按降序排列
percent = ((features.isnull().sum() / features.isnull().count()) * 100).sort_values(ascending=False)# 将缺失值数量和比例合并到一个DataFrame中
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])# 重置索引,以便将特征名称作为行标签
missing_data = missing_data.reset_index()# 重命名列,以便更直观地理解每个列的含义
missing_data.columns = ['Name', 'Total', 'Percent']# 显示前10行数据
missing_data[:10]

处理缺失值:对不同的特征采用不同的填充策略

def handle_missing(features):# 定义需要填充为0的特征列表zero_fill=['Last Sold Price','Lot','Full bathrooms','Annual tax amount','Tax assessed value','Bathrooms','Bedrooms','Total interior livable area','Total spaces','Garage spaces']# 定义需要填充为'None'的特征列表none_fill=['Last Sold On','Middle School','Appliances included','Flooring','Laundry features','Cooling features','Cooling','Heating features','Heating','Elementary School','High School','Parking features','Parking','Summary']# 定义需要填充为最大值的特征列表max_fill=['Middle School Score','Middle School Distance','Elementary School Score','Elementary School Distance','High School Score','High School Distance']# 定义需要填充为众数的特征列表mode_fill=['Year built','Region']# 分别对各列表中的特征进行缺失值填充for c in zero_fill:features[c]=features[c].fillna(0)  # 填充为0for c in max_fill:features[c]=features[c].fillna(features[c].max())  # 填充为最大值for c in none_fill:features[c]=features[c].fillna('None')  # 填充为'None'for c in mode_fill:features[c]=features[c].fillna(features[c].mode()[0])  # 填充为众数return features

处理缺失值的函数。

def handle_missing(features):# 根据具体实现,这里对features进行缺失值处理return features# 对处理后的特征数据进行形状检查,以确保处理过程符合预期
features = handle_missing(features)
features.shape

数据转换

绘制包含直方图、QQ图和箱线图的三维图表,用于数据的可视化分析。

def plotting_3_chart(df, feature):## 导入必要的库import seaborn as snsimport matplotlib.pyplot as pltimport matplotlib.gridspec as gridspecfrom scipy import statsimport matplotlib.style as stylestyle.use('fivethirtyeight')## 创建自定义图表,并设置尺寸fig = plt.figure(constrained_layout=True, figsize=(12,8))## 创建一个33列的网格grid = gridspec.GridSpec(ncols=3, nrows=3, figure=fig)## 绘制直方图ax1 = fig.add_subplot(grid[0, :2])ax1.set_title('Histogram')  # 设置标题sns.distplot(df.loc[:,feature], norm_hist=True, ax = ax1)  # 绘制直方图## 绘制QQ图ax2 = fig.add_subplot(grid[1, :2])ax2.set_title('QQ_plot')  # 设置标题stats.probplot(df.loc[:,feature], plot = ax2)  # 绘制QQ图## 绘制箱线图ax3 = fig.add_subplot(grid[:, 2])ax3.set_title('Box Plot')  # 设置标题sns.boxplot(df.loc[:,feature], orient='v', ax = ax3);  # 绘制箱线图
# 对目标变量进行对数变换
y = np.log1p(y)# 绘制销售价格的图表
plotting_3_chart(pd.DataFrame(y), 'Sold Price')

这段代码中包含的两个主要操作是对目标变量y进行对数变换,然后使用plotting_3_chart函数绘制变量的图表。对数变换通常用于处理偏态分布的数据,以使得数据更加适合进行建模和可视化。plotting_3_chart函数的具体细节没有给出,但从调用方式来看,它应该是用于绘制某种基于数据集的图表,此处用于展示销售价格的数据分布。

寻找数值型列并计算偏度

numerical_columns = features.select_dtypes(include=['int64','float64']).columns  # 选择DataFrame中的数值型列# 计算各数值列的偏度,并按偏度降序排序
skewed_features = features[numerical_columns].apply(lambda x: stats.skew(x)).sort_values(ascending=False)
skewness = pd.DataFrame({'Skew value' :skewed_features})  # 将偏度值存储到DataFrame中
skewness.head(20)  # 打印偏度值前20的特征

此函数接受一个数据框,并返回修正偏度的数据框。

def fix_skew(features):## 导入必要的模块 from scipy.special import boxcox1pfrom scipy.stats import boxcox_normmax## 获取所有非"object"类型的数据numerical_columns = features.select_dtypes(include=['int64','float64']).columns# 检查所有数值特征的偏度skewed_features = features[numerical_columns].apply(lambda x: stats.skew(x)).sort_values(ascending=False)high_skew = skewed_features[abs(skewed_features) > 0.5]skewed_features = high_skew.index# 执行Box-Cox转换for column in skewed_features:features[column] = boxcox1p(features[column], boxcox_normmax(features[column] + 1))return features

将输入的数值x与0比较,如果小于0则返回0,否则返回x本身。

def reset_zero(x):return max(x,0)# 对'Garage spaces''Total spaces'两列特征应用reset_zero函数,确保这些特征值非负
features['Garage spaces']=features['Garage spaces'].apply(lambda x: reset_zero(x))
features['Total spaces']=features['Total spaces'].apply(lambda x: reset_zero(x))# 对数据集中的偏斜特征进行修正,以提高数据分析的准确性
features = fix_skew(features)# 查看修正后的数据集的前5行
features.head()

将features分离 根据Variable Importances进行挑选

根据给定的特征和目标数据,将特征数据集划分为训练集和测试集。

# 划分数据集为训练集和测试集
x = features.iloc[:len(y), :]
x_test = features.iloc[len(y):, :]# 打印各数据集的形状
x.shape, y.shape, x_test.shape
# 选择数据集中的特定列
selected=['Listed Price','Tax assessed value','Annual tax amount','Listed On','Elementary School Distance','Last Sold On',
'Zip','Total interior livable area','Last Sold Price','Lot','Year built','Bathrooms','High School Distance',
'Elementary School Score','Full bathrooms','Middle School Distance','Heating features','Bedrooms',
'Elementary School','Laundry features','Region','Middle School Score','Type',
'Total spaces','High School Score','Parking']# 根据selected列表中的列名,重新选取x和x_test的数据
x=x[selected]
x_test=x_test[selected+['Id']]# 显示x数据集的前5行
x.head()

这段代码首先定义了一个列表selected,包含了需要在数据集中选取的列名。接下来,通过这个列表来重新定义x和x_test的数据范围,确保它们只包含所需列。最后,使用x.head()来查看x数据集的前5行,以便确认数据选取是否正确。

2.训练

import h2o# 初始化H2O框架
h2o.init()# 将数据x和y合并为一个H2OFrame对象
hf = h2o.H2OFrame(pd.concat([x, y], axis=1))# 将测试数据x_test转换为H2OFrame对象
x_test_hf = h2o.H2OFrame(x_test)

定义预测变量和响应变量

# predictors: 所有可能的预测变量,不包括'Sold Price'
# response: 响应变量,即最终需要预测的目标变量
predictors = hf.drop('Sold Price').columns
response = 'Sold Price'
from h2o.automl import H2OAutoML# 初始化H2OAutoML对象
# stopping_metric: 指定用于提前停止训练的指标。
aml = H2OAutoML(max_models=50,      # 最多训练的模型数量include_algos=["XGBoost"],  # 包含的算法列表max_runtime_secs=7200,  # 最大运行时间(秒)stopping_metric='RMSLE',  # 早停所使用的指标sort_metric='RMSLE'   # 用来排序模型的指标
)
aml.train(x=predictors,y=response,training_frame=hf)
# 获取排行榜
lb = aml.leaderboard; lb
model_id rmsle mean_residual_deviance rmse mse mae
XGBoost_grid__1_AutoML_20240403_065546_model_110.0131312 0.03600570.1897520.03600570.0910524
XGBoost_grid__1_AutoML_20240403_065546_model_370.0131671 0.03611080.1900280.03611080.0925486
XGBoost_grid__1_AutoML_20240403_065546_model_6 0.0131991 0.03641610.19083 0.03641610.0909256
XGBoost_grid__1_AutoML_20240403_065546_model_270.0132673 0.03677880.1917780.03677880.0922308
XGBoost_grid__1_AutoML_20240403_065546_model_120.0132762 0.036862 0.1919950.036862 0.0960698
XGBoost_grid__1_AutoML_20240403_065546_model_1 0.013322 0.03690630.19211 0.03690630.0902104
XGBoost_grid__1_AutoML_20240403_065546_model_5 0.0133373 0.03715850.1927650.03715850.0938252
XGBoost_grid__1_AutoML_20240403_065546_model_3 0.0133624 0.03734030.1932360.03734030.0933323
XGBoost_grid__1_AutoML_20240403_065546_model_340.0133976 0.03757660.1938470.03757660.0946864
XGBoost_grid__1_AutoML_20240403_065546_model_430.0134077 0.03746760.1935660.03746760.0939568

3.预测

aml.leader

aml对象中的leader属性,此属性用于访问或设置aml对象的领导者信息。
在这里插入图片描述

meansdcv_1_validcv_2_validcv_3_validcv_4_validcv_5_valid
0mae0.091052410.00184640240.091514410.0892317740.089875240.090660850.0939798
1mean_residual_deviance0.036005740.00230902480.037142050.0339637770.03388290.0356797170.039360262
2mse0.036005740.00230902480.037142050.0339637770.03388290.0356797170.039360262
3r20.943146050.00332824230.943099560.94717080.944158850.943354960.9379462
4residual_deviance0.036005740.00230902480.037142050.0339637770.03388290.0356797170.039360262
5rmse0.189674680.0060473060.192722720.184292630.184073090.188890760.19839421
6rmsle0.0131249754.5185105E-40.0133946940.0126867950.0127565880.01302454250.013762259

Scoring History:

timestampdurationnumber_of_treestraining_rmsetraining_maetraining_deviance
02024-04-03 07:13:0214 min 52.336 sec0.013.26258113.238679175.896051
12024-04-03 07:13:0214 min 52.788 sec5.02.2795322.2487605.196266
22024-04-03 07:13:0214 min 53.141 sec10.00.4607070.4077280.212251
32024-04-03 07:13:0414 min 54.709 sec15.00.2208070.1258730.048756
42024-04-03 07:13:0714 min 57.227 sec20.00.1860110.0902610.034600
52024-04-03 07:13:0914 min 59.816 sec25.00.1702620.0809790.028989
62024-04-03 07:13:1215 min 2.250 sec30.00.1595240.0765300.025448
72024-04-03 07:13:1415 min 4.617 sec35.00.1511180.0736070.022837
82024-04-03 07:13:1715 min 7.209 sec40.00.1433520.0706790.020550
92024-04-03 07:13:1915 min 9.548 sec45.00.1372370.0685770.018834
102024-04-03 07:13:2115 min 11.999 sec50.00.1321350.0668950.017460
112024-04-03 07:13:2415 min 14.550 sec55.00.1267460.0648570.016064
122024-04-03 07:13:2715 min 17.267 sec60.00.1219760.0631220.014878
132024-04-03 07:13:2915 min 20.004 sec65.00.1181790.0616100.013966
142024-04-03 07:13:3215 min 22.702 sec70.00.1140200.0598850.013001
152024-04-03 07:13:3415 min 24.543 sec73.00.1118890.0591140.012519

Variable Importances:

variablerelative_importancescaled_importancepercentage
0Listed Price15757.2910161.0000000.868374
1Listed On426.4607240.0270640.023502
2Annual tax amount231.9940640.0147230.012785
3Zip210.9137570.0133850.011623
4Tax assessed value187.1534880.0118770.010314
5Last Sold On168.8670040.0107170.009306
6Lot160.0650330.0101580.008821
7Last Sold Price145.9303440.0092610.008042
8Total interior livable area130.4094540.0082760.007187
9Year built103.8334660.0065900.005722
10Elementary School Distance66.3114470.0042080.003654
11High School Distance66.1528930.0041980.003646
12Elementary School Score49.9865990.0031720.002755
13Middle School Distance47.6625400.0030250.002627
14Full bathrooms38.8185770.0024640.002139
15Heating features.Other36.0179750.0022860.001985
16High School Score32.6511080.0020720.001799
17Bedrooms29.3886390.0018650.001620
18Total spaces26.3858070.0016750.001454
19Bathrooms22.3935490.0014210.001234

See the whole table with table.as_data_frame()

发现过拟合现象比较严重,这里考虑使用前k个模型的输出取均值进行整合

Reported on train data.

RMSLE: 0.00745891154333034

Reported on cross-validation data.

RMSLE: 0.013097170958722777

根据 leaderboard 中的前k个模型的预测结果,计算它们的平均预测值作为最终预测结果。

# 从指定路径读取提交结果的CSV文件
submission_results = pd.read_csv("/kaggle/input/california-house-prices/sample_submission.csv")def top_k_avg_predict(k,leaderboard):lb=leaderboard.as_data_frame()  # 将 leaderboard 转换为 Pandas 数据帧ans=submission_results.iloc[:, 1]  # 初始化答案为提交结果数据帧中的第2for i in range(k):model=lb.loc[i]['model_id']  # 获取当前排名的模型IDpred=h2o.get_model(model).predict(x_test_hf)  # 使用该模型对测试集进行预测pred=pred.as_data_frame()  # 将预测结果转换为 Pandas 数据帧ans+=np.expm1(pred['predict'])/k  # 将当前模型的预测结果加权平均到答案中return ans# 使用前8个模型的平均预测值更新提交结果数据帧的第2列
submission_results.iloc[:, 1]=top_k_avg_predict(8,aml.leaderboard)
# 显示更新后的前5行数据
submission_results.head()
# 将更新后的提交结果数据帧保存为CSV文件
submission_results.to_csv('submission.csv', index=False)
submission_results.head()
IdSold Price
0474398.252913e+05
1474406.162160e+05
2474418.452799e+05
3474428.266464e+05
4474431.130490e+06

优化建议:

更精细的离群点检测:

可尝试采用更为复杂或自适应的离群点检测算法(如Isolation Forest、Local Outlier Factor等),替代当前基于可视化判断的离群点剔除方式,提高离群点识别的准确性和鲁棒性。

深度特征工程:

进一步探索高级特征工程技术,如交互项构造、特征分桶、地理编码等,以挖掘潜在的非线性关系和地域效应,增强模型捕捉复杂模式的能力。

超参数调优:

虽然已限制AutoML只使用XGBoost算法,但对其内部超参数未做细致调整。可通过网格搜索、随机搜索或贝叶斯优化等方法,对选定算法的超参数进行精细化调优,有望进一步提升单个模型性能。

集成方法改进:

目前采用的是简单平均法进行模型集成,未来可尝试其他更先进的集成策略,如加权平均、Stacking、Bagging、Boosting等,以期获得更好的集成效果。

交叉验证与模型选择:

在模型训练阶段,可以结合交叉验证策略,评估不同模型在多个折叠上的平均性能,从而更加稳健地选择集成模型中的个体模型,避免单一验证集可能导致的过拟合风险。

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

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

相关文章

Flink运行机制相关概念介绍

Flink运行机制相关概念介绍 1. 流式计算和批处理2. 流式计算的状态与容错3. Flink简介及其在业务系统中的位置4. Flink模型5. Flink的架构6. Flink的重要概念7. Flink的状态、状态分区、状态缩放(rescale)和Key Group8. Flink数据交换9. 时间语义10. 水位…

GrayLog日志平台的基本使用-接入jumpserver

1、jumpserver3.8.0部署 Docker 环境准备 # 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 替换Docker 安装源为清华大学镜像站 sed -i sh…

Spring Web MVC的入门学习(一)

目录 一、什么是 Spring Web MVC 1、MVC 定义 二、学习Spring MVC 1、项目准备 2、建立连接 2.1 RequestMapping 注解的学习 2.2 RequestMapping 使用 3、请求 3.1 传递单个参数 3.2 传递多个参数 3.3 传递对象 3.4 后端参数重命名(后端参数映射&#xf…

1111111

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

配置code-server和texlive实现网页写tex

使用overleaf太卡了,有云服务器或者nas小主机,配置自己的code-servertexlive,来写论文。 之前用服务器配置过自己的overleaf,感觉不是很好用,缺少东西。 一、思路 使用docker先安装一个ubuntu,用dockerfil…

day63 单调栈part02

503. 下一个更大元素 II 中等 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更…

【generate】如何维护一套icon组件库,直接输出svg为react component

https://github.com/ant-design/ant-design-web3/pull/761/files 实现了icon-preview(通过jsdoc, 鼠标放在组件上可以看到icon的样式),因为打包方式、产物以及命名上有一些不同,可能需要稍加改造。 这个同步脚本应该后续也用得上,略加改造同步…

Macbook文件清理软件 Mac电脑清理垃圾文件怎么清理

为了维护Macbook电脑的系统健康,我们需要定期给电脑进行全面清理,清除系统垃圾文件、软件缓存和系统内存。那么好用的Macbook文件清理软件有哪些呢?今天就给大家介绍几款好用的电脑清理软件并介绍Mac电脑清理垃圾文件怎么清理。 一、Macbook…

29-控制流(下):iam-apiserver服务核心功能实现讲解

我们再来看下 iam-apiserver 中的核心功能实现。 这些关键代码设计分为 3 类,分别是应用框架相关的特性、编程规范相关的特性和其他特性。 应用框架相关的特性 应用框架相关的特性包括三个,分别是优雅关停、健康检查和插件化加载中间件。 优雅关停 …

基于SpringBoot和Vue的教务网络管理系统的设计与实现【附源码】

1、系统演示视频(演示视频) 2、需要交流和学习请联系

00-JAVA基础-注解及反射解析注解

注解 什么是注解 Java 注解(Annotation)是 JDK 5.0 引入的一种元素,用于为 Java 代码提供元数据。元数据是关于数据的数据,它为代码提供附加信息,而这些信息并不直接参与到程序的逻辑中,但可以被编译器或…

Spring Boot | Spring Boot的“数据访问“、Spring Boot“整合MyBatis“

目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目,引入相应的启动器,编写数据库对应的“实体类”③额外添加pom.xml文…

联想 Y9000P 连接网线速度慢 的 问题解决

参考帖子:求助,拯救者Y9000P 2022 i73060版本 有线网非常慢 无线网正常【笔记本吧】_百度贴吧 问题原因: 网卡驱动版本不对。不能用Win11版,要用Win10版。 问题解决: 1、卸载原驱动 2、下载Win10 驱动 并安装 下载…

MFC通用静态库制作与使用

开发环境VS2013 1、新建工程,选择Win32 Project,命名,选择路径等 2、选择Static library ,勾选MFC 3、点击完成。在工程中添加相应的头文件、源文件等通用功能函数或者类。 4、在其他工程引入使用。在使用的工程项目设置中Linker…

tsv、csv、xls等文件类型区别及处理(python版)

目录 前言 介绍 tsv、csv、txt的区别 读取/生成 不同格式数据文件(python) 一、读取/生成csv数据文件 二、读取/生成txt数据文件 三、读取/生成tsv数据文件 四、读取/生成xls数据文件 不同文件格式转化 总结 前言 考虑到进行机器学习、深度学习…

vue快速入门(五)v-show与v-if

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-if与v-show底层的区别v-if与v-show的效果 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

删除中间节点(狸猫换太子法)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一个裂缝都是为透出光而努力&#…

C++模板基础1——定义函数模板

函数模板定义格式 模板函数定义格式如下&#xff1a; template <typename T> 返回类型 函数名(参数列表) {// 函数体 }其中&#xff0c;template<typename T>是模板声明&#xff0c;用于定义模板参数 T。可以使用不同的关键字代替 typename&#xff0c;例如 clas…

腾讯云4核8G服务器最多能承载多少用户在线?谁知道?

腾讯云4核8G服务器价格&#xff1a;轻量4核8G12M优惠价格646元15个月、CVM S5服务器4核8G配置1437元买1年送3个月。腾讯云4核8G服务器支持多少人同时在线&#xff1f;支持30个并发数&#xff0c;可容纳日均1万IP人数访问。腾讯云百科txybk.com整理4核8G服务器支持多少人同时在线…

RabbitMQ Tutorial

参考API : Overview (RabbitMQ Java Client 5.20.0 API) 参考文档: RabbitMQ: One broker to queue them all | RabbitMQ 目录 结构 Hello World consumer producer 创建连接API解析 创建连接工厂 生产者生产消息 消费者消费消息 队列声明 工作队列Work Queues 公平…