基于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(',')  # 使用逗号分割x
        n = len(x.split(','))  # 计算分割后的部分数量
        if 'Walk-in Closet' in temp:
            n -= 1  # 如果包含'Walk-in Closet',则减少计数
        return n
    else:
        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)  # 填充为0
    for 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 sns
    import matplotlib.pyplot as plt
    import matplotlib.gridspec as gridspec
    from scipy import stats
    import matplotlib.style as style
    style.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 boxcox1p
    from 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']  # 获取当前排名的模型ID
        pred=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等,以期获得更好的集成效果。

交叉验证与模型选择:

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

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

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

相关文章

LeetCode刷题记(二):31~60题

31. 下一个排列 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。…

如何确认RID池是否耗尽,以及手动增加RID池大小

确认RID池是否耗尽: 事件查看器: 在RID主控域控制器上打开事件查看器,导航至“Windows日志 > 应用程序和服务日志 > Microsoft > Windows > Directory Service > Operations”。搜索事件ID 16656和16657。事件ID 16656表明RID…

C++超高精度计时器

#include <chrono> #include <QDebug> #pragma execution_character_set("utf-8") /*1 秒&#xff08;s&#xff09; 1,000 毫秒&#xff08;ms&#xff09; 1,000,000 微秒&#xff08;μs&#xff09; 1,000,000,000 纳秒&#xff08;ns&#xff09…

Leetcode 第 389 场周赛题解

Leetcode 第 389 场周赛题解 Leetcode 第 389 场周赛题解题目1&#xff1a;3083. 字符串及其反转中是否存在同一子字符串思路代码复杂度分析 题目2&#xff1a;3084. 统计以给定字符开头和结尾的子字符串总数思路代码复杂度分析 题目3&#xff1a;3085. 成为 K 特殊字符串需要删…

Fire Smoke - Dynamic Nature

烟雾、火灾和爆炸预制件、着色器的集合。粒子支持HD、URP和标准渲染,自然制造风,因此它们对风速、方向和颤抖做出反应。 包装支持: Unity 2021.2及更高版本 Unity 2021.2 HD RP Unity 2021.2 URP Unity 2021.3及更高版本 Unity 2021.3 LTS HD RP Unity 2021.3 LTS URP Unity…

202112青少年软件编程(Scratch图形化)等级考试试卷(四级)

第1题&#xff1a;【 单选题】 小猫和小狗是非常好的朋友&#xff0c; 他们发明了一种加密方法&#xff1a; 用两位数字代表字母。比如 65 代表 A&#xff0c; 66 代表 B……&#xff0c; 75 代表 K&#xff0c; ……&#xff0c; 78 代表 N&#xff0c; 79 代表 O、 80 代表 …

zdpdjango_argonadmin使用Django开发一个美观的后台管理系统

初始代码 安装依赖 pip install -r requirements.txt生成管理员账户 迁移模型&#xff1a; python manage.py makemigrations python manage.py migrate创建超级用户&#xff1a; python manage.py createsuperuser启动服务 python manage.py runserver浏览器访问&#xf…

ChatGPT官宣新增Dynamic(动态)模式!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

Java中IO流详解

文章目录 字符流问题导入编码表**出现乱码的原因**ASCII表Unicode表汉字存储和展示过程解析问题导入解答 介绍分类字符输出流字符输入流字符缓冲流 特殊操作流转化流对象操作流打印流 工具包Commons-io介绍分类IOUtils类FileUtils类 字符流 问题导入 既然字节流能操作所有文件…

探索Linux的挂载操作

在Linux这个强大的操作系统中&#xff0c;挂载操作是一个基本而重要的概念。它涉及到文件系统、设备和数据访问&#xff0c;对于理解Linux的工作方式至关重要。那么&#xff0c;挂载操作究竟是什么&#xff0c;为什么我们需要它&#xff0c;如果没有它&#xff0c;我们将面临什…

递归学习第一个课

一、递归定义 基本定义 函数自己调用自己&#xff08;通俗第一印象&#xff09;大问题可以拆分小问题&#xff08;拆分&#xff0c;边界&#xff09;大问题与小问题的关系&#xff08;递归关系&#xff09; 为什么拆分小问题&#xff1f; 小问题更容易求解大问题与小问题内部…

基于Spark中随机森林模型的天气预测系统

基于Spark中随机森林模型的天气预测系统 在这篇文章中&#xff0c;我们将探讨如何使用Apache Spark和随机森林算法来构建一个天气预测系统。该系统将利用历史天气数据&#xff0c;通过机器学习模型预测未来的天气情况&#xff0c;特别是针对是否下雨的二元分类问题。 简介 Ap…

SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型

SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型 文章目录 SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型3. 发布/订阅模型之fanout模型1. 说明1. 消息发布者1. 创建工作队列的配置类2. 发布消费Controller 2. 消息消费者One3. 消息消费者Two4. 消息消费者…

实际项目中如何使用Git做分支管理

前言 Git是一种强大的分布式版本控制系统&#xff0c;在实际项目开发中使用Git进行分支管理是非常常见的做法&#xff0c;因为它可以帮助团队高效的协作和管理项目的不同版本&#xff0c;今天我们来讲讲在实际项目中最常用的Git分支管理策略Git Flow。 常见的Git分支管理策略…

IDEA2024.1版本震撼来袭,手把手教你激活!

前言 作为一个Java程序猿&#xff0c;必不可少的一款开发IDE神器&#xff1a;IntelliJ IDEA&#xff0c;简称“IDEA”。就在前天&#xff08;2024.4.4&#xff09;终于推出了心心念念的2024.1版本。 IntelliJ IDEA 2024.1 引入了一系列令人期待的升级&#xff0c;可以帮助您简…

Nuxt 3 项目中配置 Tailwind CSS

官方文档&#xff1a;https://www.tailwindcss.cn/docs/guides/nuxtjs#standard 安装 Tailwind CSS 及其相关依赖 执行如下命令&#xff0c;在 Nuxt 项目中安装 Tailwind CSS 及其相关依赖 npm install -D tailwindcss postcss autoprefixerpnpm install -D tailwindcss post…

深度剖析扫雷游戏的各个知识点(1)

哈喽&#xff0c;小伙伴&#xff0c;大家好&#xff0c;今天我来水一篇文章。害&#xff0c;也不算真的水吧&#xff0c;这次带大家深度剖析初次写扫雷游戏程序时还未接触到的知识点。废话不多说&#xff0c;直接进入正题 不知小伙伴们是否还记得当时我说过扫雷游戏我们是以多个…

AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)

AIGC实战——ProGAN 0. 前言1. ProGAN2. 渐进式训练3. 其他技术3.1 小批标准差3.2 均等学习率3.3 逐像素归一化 4. 图像生成小结系列链接 0. 前言 我们已经学习了使用生成对抗网络 (Generative Adversarial Network, GAN) 解决各种图像生成任务。GAN 的模型架构和训练过程具有…

2023 年网络安全热点技术发展态势

文章目录 前言一、人工智能信息技术迎来井喷式发展期二、零信任网络安全架构即将投入实际部署三、美国全面推动军政业务向云环境迁移四、专用太空软硬件与独立卫星网络并行发展五、量子信息技术与网络安全领域加速融合前言 在 2023 年取得进展的信息技术不在少数。从网络安全的…

从300亿分子中筛出6款,结构新且易合成,斯坦福抗生素设计AI模型登Nature子刊

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 全球每年有近 500 万人死于抗生素耐药性&#xff0c;因此迫切需要新的方法来对抗耐药菌株。 …