当前位置: 首页 > news >正文

【数据挖掘实战】 房价预测

本次对kaggle中的入门级数据集,房价回归数据集进行数据挖掘,预测房屋价格。

本人主页:机器学习司猫白

机器学习专栏:机器学习实战

PyTorch入门专栏:PyTorch入门

深度学习实战:深度学习

ok,话不多说,我们进入正题吧

概述

本次竞赛有 79 个解释变量(几乎)描述了爱荷华州艾姆斯住宅的各个方面,需要预测每套住宅的最终价格。

数据集描述

本次数据集已经上传,大家可以自行下载尝试

文件说明

  • train.csv - 训练集

  • test.csv - 测试集

  • data_description.txt - 每列的完整描述,最初由 Dean De Cock 准备,但经过轻微编辑以匹配此处使用的列名称

  • Sample_submission.csv - 根据销售年份和月份、地块面积和卧室数量的线性回归提交的基准

建模思路

本次预测是预测房屋价格,很明显是一个回归预测。这里考虑使用线性回归和树模型的回归进行尝试并优化其中参数,选择最佳的一个模型进行预测,输出每个房屋的预测价格。

Python源码

一,打开数据文件,查看数据的基本情况。
import numpy as np 
import pandas as pd train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
train_data.info()

输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1460 entries, 0 to 1459
Data columns (total 81 columns):#   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  0   Id             1460 non-null   int64  1   MSSubClass     1460 non-null   int64  2   MSZoning       1460 non-null   object 3   LotFrontage    1201 non-null   float644   LotArea        1460 non-null   int64  5   Street         1460 non-null   object 6   Alley          91 non-null     object 7   LotShape       1460 non-null   object 8   LandContour    1460 non-null   object 9   Utilities      1460 non-null   object 10  LotConfig      1460 non-null   object 11  LandSlope      1460 non-null   object 12  Neighborhood   1460 non-null   object 13  Condition1     1460 non-null   object 14  Condition2     1460 non-null   object 15  BldgType       1460 non-null   object 16  HouseStyle     1460 non-null   object 17  OverallQual    1460 non-null   int64  18  OverallCond    1460 non-null   int64  19  YearBuilt      1460 non-null   int64  20  YearRemodAdd   1460 non-null   int64  21  RoofStyle      1460 non-null   object 22  RoofMatl       1460 non-null   object 23  Exterior1st    1460 non-null   object 24  Exterior2nd    1460 non-null   object 25  MasVnrType     588 non-null    object 26  MasVnrArea     1452 non-null   float6427  ExterQual      1460 non-null   object 28  ExterCond      1460 non-null   object 29  Foundation     1460 non-null   object 30  BsmtQual       1423 non-null   object 31  BsmtCond       1423 non-null   object 32  BsmtExposure   1422 non-null   object 33  BsmtFinType1   1423 non-null   object 34  BsmtFinSF1     1460 non-null   int64  35  BsmtFinType2   1422 non-null   object 36  BsmtFinSF2     1460 non-null   int64  37  BsmtUnfSF      1460 non-null   int64  38  TotalBsmtSF    1460 non-null   int64  39  Heating        1460 non-null   object 40  HeatingQC      1460 non-null   object 41  CentralAir     1460 non-null   object 42  Electrical     1459 non-null   object 43  1stFlrSF       1460 non-null   int64  44  2ndFlrSF       1460 non-null   int64  45  LowQualFinSF   1460 non-null   int64  46  GrLivArea      1460 non-null   int64  47  BsmtFullBath   1460 non-null   int64  48  BsmtHalfBath   1460 non-null   int64  49  FullBath       1460 non-null   int64  50  HalfBath       1460 non-null   int64  51  BedroomAbvGr   1460 non-null   int64  52  KitchenAbvGr   1460 non-null   int64  53  KitchenQual    1460 non-null   object 54  TotRmsAbvGrd   1460 non-null   int64  55  Functional     1460 non-null   object 56  Fireplaces     1460 non-null   int64  57  FireplaceQu    770 non-null    object 58  GarageType     1379 non-null   object 59  GarageYrBlt    1379 non-null   float6460  GarageFinish   1379 non-null   object 61  GarageCars     1460 non-null   int64  62  GarageArea     1460 non-null   int64  63  GarageQual     1379 non-null   object 64  GarageCond     1379 non-null   object 65  PavedDrive     1460 non-null   object 66  WoodDeckSF     1460 non-null   int64  67  OpenPorchSF    1460 non-null   int64  68  EnclosedPorch  1460 non-null   int64  69  3SsnPorch      1460 non-null   int64  70  ScreenPorch    1460 non-null   int64  71  PoolArea       1460 non-null   int64  72  PoolQC         7 non-null      object 73  Fence          281 non-null    object 74  MiscFeature    54 non-null     object 75  MiscVal        1460 non-null   int64  76  MoSold         1460 non-null   int64  77  YrSold         1460 non-null   int64  78  SaleType       1460 non-null   object 79  SaleCondition  1460 non-null   object 80  SalePrice      1460 non-null   int64  
dtypes: float64(3), int64(35), object(43)
memory usage: 924.0+ KB

根据输出结果,我们可以看到数据集中存在缺失值。缺失值如果不处理,会影响后续建模过程,甚至可能导致模型报错。这里有一个具体的情况需要说明:假设缺失值出现在object类型的特征中,通常情况下,我们会使用独热编码(One-Hot Encoding)将分类数据转化为数值。如果我们直接对包含缺失值的列进行独热编码,可能会生成一列专门表示缺失值(通常是NaN的列)。这样会导致训练数据和后续用于预测的实际数据维度不一致,进而无法使用模型进行预测。

此外,一些模型对NaN值非常敏感,因为NaN表示缺失数据,而不是数值类型。如果模型在训练时遇到NaN值,很多模型会因此报错,因为它们无法处理非数值的输入数据。因此,在建模前,我们需要先处理缺失值,确保数据的一致性和模型能够正确训练。常见的处理方法包括填充缺失值(如使用均值、中位数或众数填充)或者删除包含缺失值的行或列。

数据维度一致性:训练数据和预测数据的特征维度必须完全一致,否则模型无法正确应用于新数据。

二,数据处理和特征工程

# 计算每个特征的缺失值比例
missing_values = train_data.isnull().sum()  # 计算每一列的缺失值数量
total_values = train_data.shape[0]  # 获取总行数# 计算每一列缺失值的比例
missing_percentage = (missing_values / total_values) * 100# 显示缺失值比例超过50%的特征
high_missing_features = missing_percentage[missing_percentage > 50]# 输出缺失值比例超过50%的特征
high_missing_features

输出:

Alley          93.767123
MasVnrType     59.726027
PoolQC         99.520548
Fence          80.753425
MiscFeature    96.301370
dtype: float64

这里计算了缺失值的比例。

train_data2 = train_data.drop(['MiscFeature', 'Fence', 'PoolQC',  'MasVnrType', 'Alley','Id'], axis=1)
test_data2 = test_data.drop(['MiscFeature', 'Fence', 'PoolQC', 'MasVnrType', 'Alley','Id'], axis=1)
id = test_data['Id']
train_data2.shape, test_data2.shape

删除缺失值过多的列,剩下的列采用填充的方法进行处理。

# 处理测试集中的缺失值
for column in test_data2.columns:if test_data2[column].dtype == 'object':# 对象类型,使用训练集的众数填充test_data2[column].fillna(train_data2[column].mode()[0], inplace=True)else:# 数值类型,使用训练集的中位数填充test_data2[column].fillna(train_data2[column].median(), inplace=True)# 处理训练集中的缺失值
for column in train_data2.columns:if train_data2[column].dtype == 'object':# 对象类型,使用训练集的众数填充train_data2[column].fillna(train_data2[column].mode()[0], inplace=True)else:# 数值类型,使用训练集的中位数填充train_data2[column].fillna(train_data2[column].median(), inplace=True)# 查看处理后的训练集和测试集
print(train_data2.shape)
print(test_data2.shape)

输出:

(1460, 75)
(1459, 74)

缺失值处理完毕,接下来就可以划分目标变量和特征。

train_data3=train_data2.drop(['SalePrice'], axis=1)label=train_data2['SalePrice']
train_data3.shape

输出:

(1460, 74)

这里可以看到,特征较多,考虑尝试使用相关性去除一部分。

import seaborn as sns
import matplotlib.pyplot as plt# 选择所有数值类型的列
numerical_data = train_data3.select_dtypes(include=['number'])# 计算相关性矩阵
correlation_matrix = numerical_data.corr()# 设置绘图的尺寸
plt.figure(figsize=(15, 8))# 使用seaborn绘制热图
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='.1f', linewidths=0.5)# 设置标题
plt.title('Correlation Heatmap of Numerical Features')# 显示热图
plt.show()

有点看不太清,那就直接使用阈值,去除相关性大于0.8的列。

# 设置相关性阈值
threshold = 0.8# 找到相关性大于阈值的列对
to_drop = set()  # 用于存储要删除的列
for i in range(len(correlation_matrix.columns)):for j in range(i):if abs(correlation_matrix.iloc[i, j]) > threshold:colname = correlation_matrix.columns[i]# 仅当当前列未被标记删除时才进行删除操作if colname not in to_drop:to_drop.add(correlation_matrix.columns[j])list(to_drop)

输出:

['GarageCars', 'GrLivArea', 'TotalBsmtSF']
# 删除相关性较强的列
train_data4 = train_data3.drop(columns=to_drop)
test_data4 = test_data2.drop(columns=to_drop)print(train_data4.shape)
print(test_data4.shape)
from sklearn.preprocessing import LabelEncoder# 创建每个类别特征进行编码
for column in train_data4.select_dtypes(include=['object']).columns:# 合并训练集和测试集的类别,以创建一个包含所有可能类别的编码器all_categories = pd.concat([train_data4[column], test_data4[column]]).unique()encoder = LabelEncoder()encoder.fit(all_categories)# 使用编码器对训练集和测试集进行编码train_data4[column] = encoder.transform(train_data4[column])test_data4[column] = encoder.transform(test_data4[column])# 查看处理后的训练集和测试集
print(train_data4.shape)
print(test_data4.shape)

这里对object类型的列进行编码,使其变为数值,至于为什么使用标签编码,后续我会出一个有关特征编码的文章,这里不多进行赘述。

三,模型训练与评估

先考虑使用线性回归中的岭回归,来看看效果。

import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_splitX = train_data4  # 特征数据
y = label  # 目标变量# 划分数据集为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)# 定义岭回归模型
ridge_model = Ridge()# 设置待调优的超参数范围,这里我们主要调节 alpha(正则化参数)
param_grid = {'alpha': np.logspace(-6, 6, 13)}  # alpha 的范围通常是从 1e-6 到 1e6# 使用交叉验证来选择最佳的 alpha 参数
grid_search = GridSearchCV(ridge_model, param_grid, cv=5, scoring='neg_mean_squared_error')  # 5折交叉验证,使用负均方误差作为评分标准# 拟合模型
grid_search.fit(X_train, y_train)# 输出最佳参数
print("Best alpha parameter:", grid_search.best_params_)# 获取最佳模型
best_ridge_model = grid_search.best_estimator_# 使用最佳模型在验证集上评估
score = best_ridge_model.score(X_val, y_val)
print("Model R^2 score on validation set:", score)# 输出交叉验证的结果
print("Best cross-validation score:", grid_search.best_score_)
Best alpha parameter: {'alpha': 100.0}
Model R^2 score on validation set: 0.8496053872702527
Best cross-validation score: -1348455440.2012005

再使用lightgbm,树模型来看看效果。

import optuna
import lightgbm as lgb
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_scoreX = train_data4  # 特征数据
y = label  # 目标变量# 划分训练集和验证集
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)def objective(trial):# 使用Optuna选择超参数params = {'objective': 'regression',  # 回归任务'boosting_type': 'gbdt',  # 梯度提升决策树'num_leaves': trial.suggest_int('num_leaves', 20, 100),  # 树的最大叶子数'learning_rate': trial.suggest_float('learning_rate', 1e-5, 1e-1, log=True),  # 学习率,使用对数均匀分布'n_estimators': trial.suggest_int('n_estimators', 50, 500),  # 树的数量'max_depth': trial.suggest_int('max_depth', 3, 15),  # 树的最大深度'subsample': trial.suggest_float('subsample', 0.5, 1.0),  # 数据采样率'colsample_bytree': trial.suggest_float('colsample_bytree', 0.5, 1.0),  # 特征采样率'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),  # 每个叶子的最小样本数'reg_alpha': trial.suggest_float('reg_alpha', 1e-5, 1.0, log=True),  # L1 正则化'reg_lambda': trial.suggest_float('reg_lambda', 1e-5, 1.0, log=True)  # L2 正则化}# 创建LightGBM模型model = lgb.LGBMRegressor(**params, verbose=-1)# 训练模型model.fit(X_train, y_train)# 进行预测y_pred = model.predict(X_valid)# 计算RMSE(均方根误差)rmse = np.sqrt(mean_squared_error(y_valid, y_pred))return rmse  # Optuna将根据最小化RMSE来寻找最佳超参数# 创建Optuna的Study对象
study = optuna.create_study(direction='minimize')  # 最小化RMSE# 开始超参数优化
study.optimize(objective, n_trials=50)  # 尝试100次# 输出最佳超参数和对应的RMSE值
print(f"Best trial: {study.best_trial.params}")
print(f"Best RMSE: {study.best_value}")# 使用最佳超参数训练最终模型
best_params = study.best_trial.params
final_model = lgb.LGBMRegressor(**best_params, verbose=-1)# 训练最终模型时
final_model.fit(X_train, y_train)# 在验证集上进行预测并计算RMSE和R2
y_pred_final = final_model.predict(X_valid)
final_rmse = np.sqrt(mean_squared_error(y_valid, y_pred_final))
final_r2 = r2_score(y_valid, y_pred_final)print(f"Final RMSE on validation set: {final_rmse}")
print(f"Final R2 on validation set: {final_r2}")
Best trial: {'num_leaves': 97, 'learning_rate': 0.013163137448188754, 'n_estimators': 372, 'max_depth': 11, 'subsample': 0.8474988867349187, 'colsample_bytree': 0.7064845955811748, 'min_child_samples': 5, 'reg_alpha': 0.0011685340064003379, 'reg_lambda': 0.041584313394230084}
Best RMSE: 26248.97344413891
Final RMSE on validation set: 26248.97344413891
Final R2 on validation set: 0.910172189779164

根据输出结果,初步发现lightgbm模型效果会更好。这里解释以下回归模型的评估,比如这里的RMSE,虽然说这个指标是越小越好,小到多少是好,大到多少是不好,这里要讲的是RMSE更像是一个相对指标,比如第一次运行RMSE为1000,第二次运行RMSE是998,那么第二次运行的就是更优的,并没有一个绝对的数值来评判,而是相对的比较。

1. 这里使用 Optuna 对 LightGBM 回归模型的超参数进行优化,目的是找到能够最小化 RMSE 的最佳参数组合。

2. 优化的超参数包括树的深度、叶子数、学习率等。

3. 最终训练并评估了一个基于最佳超参数的回归模型,并计算了其在验证集上的 RMSE 和 

由于数据量较小,很容易过拟合,因此加入了l1和l2正则化,并进行超参数优化,可以看到训练集RMSE和测试集RMSE非常接近,说明并没有过度拟合。

四,使用真实的数据运行模型,预测房屋的价格
y_pred_test = final_model.predict(test_data4)
# 将预测结果转换为 DataFrame
y_pred_df = pd.DataFrame({'Id': test_data['Id'],'SalePrice': y_pred_test
})# 保存预测结果到 CSV 文件
y_pred_df.to_csv('predictions.csv', index=False)
y_pred_df
IdSalePrice
01461128989.106316
11462155402.491796
21463173423.163568
31464184025.799434
41465200870.139148
.........
1454291584714.331635
1455291689781.868635
14562917171236.073006
14572918121141.145259
14582919220957.998442

1459 rows × 2 columns

这样模型的预测结果就保存为了csv文件。

五,展示特征重要性

import matplotlib.pyplot as plt
# 绘制特征重要性图
lgb.plot_importance(final_model, importance_type='split', max_num_features=10, figsize=(10, 6))
plt.title('Feature Importance (Split)')
plt.show()

根据特征重要性图可以发现,影响房屋价格的最大因素是1stFlrSF,也就是房租第一层的面积。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=5mtxxtr44v7

相关文章:

【数据挖掘实战】 房价预测

本次对kaggle中的入门级数据集&#xff0c;房价回归数据集进行数据挖掘&#xff0c;预测房屋价格。 本人主页&#xff1a;机器学习司猫白 机器学习专栏&#xff1a;机器学习实战 PyTorch入门专栏&#xff1a;PyTorch入门 深度学习实战&#xff1a;深度学习 ok&#xff0c;话不多…...

我的创作纪念日,纪念我的第512天

目录 年末 年初 入围 博客 变动 生活 期待 年末 很快&#xff0c;2024年已经过去了&#xff0c;本想在跨年夜的时候营造一点小小的仪式感&#xff0c;结果也因为身体的原因放弃了&#xff0c;浑身感觉疼痛&#xff0c;躺在床上&#xff0c;闭上眼睛&#xff0c;什么也不…...

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

Pycaret自动机器学习框架使用流程及项目实战案例详解 1 Pycaret介绍2 安装及版本需求3 Pycaret自动机器学习框架使用流程3.1 Setup3.2 Compare Models3.3 Analyze Model3.4 Prediction3.5 Save Model4 多分类项目实战案例详解4.1 ✅ Setup4.2 ✅ Compare Models4.3 ✅ Experime…...

PHP语言的网络编程

PHP语言的网络编程 网络编程是现代软件开发中不可或缺的一部分&#xff0c;尤其是在日益发展的互联网时代。PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;专门用于Web开发。它的灵活性、易用性以及强大的社区支持使得PHP在网络…...

计算机的错误计算(二百一十八)

摘要 大模型能确定 sin(2.6^100) 的符号吗&#xff1f;实验表明&#xff0c;大模型给的结论是正确的&#xff0c;但其证明过程是错误百出。大模型的推理实在是不敢恭维。 就同样题目&#xff0c;测试一下另外一个大模型。 例1. 能确定 sin(2.6^100) 的符号吗&#xff1f; 下…...

《鸿蒙Next原生应用的独特用户体验之旅》

界面设计与交互方面 简洁性与一致性&#xff1a;iOS界面以简洁统一著称&#xff0c;而鸿蒙Next的界面设计同样主打简洁&#xff0c;各部件采用悬浮效果&#xff0c;营造出空间感&#xff0c;如天气App的展示更加逼真。安卓系统由于不同厂商的定制化程度较高&#xff0c;导致用户…...

MDX语言的字符串处理

MDX语言的字符串处理 引言 MDX&#xff08;Multidimensional Expressions&#xff09;是一种专门用于多维数据库查询和分析的语言&#xff0c;特别是在Microsoft SQL Server Analysis Services&#xff08;SSAS&#xff09;中使用广泛。MDX不仅用于查询多维数据&#xff0c;还…...

游戏AI,让AI 玩游戏有什么作用?

让 AI 玩游戏这件事远比我们想象的要早得多。追溯到 1948 年&#xff0c;图灵和同事钱伯恩共同设计了国际象棋程序 Turochamp。之所以设计这么个程序&#xff0c;图灵是想说明&#xff0c;机器理论上能模拟人脑能做的任何事情&#xff0c;包括下棋这样复杂的智力活动。 可惜的是…...

Java 设计模式 二 单例模式 (Singleton Pattern)

单例模式 (Singleton Pattern) 是一种常见的设计模式&#xff0c;属于创建型模式。它的核心思想是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。通常用于那些需要全局控制的场景&#xff0c;比如配置管理、日志系统、数据库连接池等。 1. 单例模式的…...

Java 中 final 关键字的奥秘

目录 一、final 修饰类&#xff1a;封印的 “永恒之石” 二、final 修饰变量&#xff1a;锁定的 “不变之值” 三、final 修饰方法&#xff1a;不可撼动的 “坚固堡垒” 四、总结 在 Java 编程的世界里&#xff0c;final 关键字就像一把神奇的 “锁”&#xff0c;一旦使用&…...

C# 通用缓存类开发:开启高效编程之门

引言 嘿&#xff0c;各位 C# 开发者们&#xff01;在当今快节奏的软件开发领域&#xff0c;提升应用程序的性能就如同给跑车装上涡轮增压&#xff0c;能让你的项目在激烈的竞争中脱颖而出。而构建一个高效的 C# 通用缓存类&#xff0c;无疑是实现这一目标的强大武器。 想象一…...

电脑办公技巧之如何在 Word 文档中添加文字或图片水印

Microsoft Word是全球最广泛使用的文字处理软件之一&#xff0c;它为用户提供了丰富的编辑功能来美化和保护文档。其中&#xff0c;“水印”是一种特别有用的功能&#xff0c;它可以用于标识文档状态&#xff08;如“草稿”或“机密”&#xff09;、公司标志或是版权信息等。本…...

记录一下OpenCV Contrib 编译踩的坑

最近有需要采用OpenCV Contrib 里面的函数做一下处理&#xff0c;要重新编译&#xff0c;一路编译两三个小时了&#xff0c;记录一下备忘吧。 1、编译前先准备好如下环境 ①visual studio已安装&#xff0c;具体版本和型号根据需求经验来&#xff0c;我看常用的是VS2015、VS201…...

01.04、回文排序

01.04、[简单] 回文排序 1、题目描述 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。 2、解题思路 回文串的特点&#xff1a; 一个回文串在…...

[创业之路-259]:《向流程设计要效率》-1-让成功成熟业务交给流程进行复制, 把创新产品新业务新客户交给精英和牛人进行探索与创造

标题&#xff1a;成功与创新的双轨并行&#xff1a;以流程复制成熟&#xff0c;以精英驱动新知 在当今这个日新月异的商业环境中&#xff0c;企业要想持续繁荣发展&#xff0c;就必须在稳定与创新之间找到完美的平衡点。一方面&#xff0c;成熟业务的稳定运营是企业生存和发展的…...

如何使用usememo和usecallback进行性能优化,什么时候使用usecallback,什么时候使用usememo

React useMemo 和 useCallback 性能优化总结以及使用场景 基本概念 useMemo 用于缓存计算结果&#xff0c;避免在每次渲染时重复进行昂贵的计算。 useCallback 用于缓存函数引用&#xff0c;避免在每次渲染时创建新的函数引用。 使用时机对比 useMemo 适用场景 复杂计算…...

22. C语言 输入与输出详解

本章目录: 前言1. 输入输出的基础概念1.1 标准输入输出流1.2 输入输出函数 2. 格式化输出与输入2.1 使用 printf() 进行输出示例 1: 输出字符串示例 2: 输出整数示例 3: 输出浮点数 2.2 使用 scanf() 进行输入示例 4: 读取整数和字符改进方案&#xff1a;使用getchar()清理缓冲…...

WPF实战案例 | C# WPF实现计算器源码

WPF实战案例 | C# WPF实现计算器源码 一、设计来源计算器应用程序讲解1.1 主界面1.2 计算界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09;2.3 实现步骤总结 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…...

AutoGen入门——快速实现多角色、多用户、多智能体对话系统

1.前言 如https://github.com/microsoft/autogen所述&#xff0c;autogen是一多智能体的框架&#xff0c;属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用&#xff0c;以满足我们各种业务场景。 本文将以几个示例场景&#xff0c;使用AutoGen快速构建出…...

LeetCode 热题 100_全排列(55_46_中等_C++)(递归(回溯))

LeetCode 热题 100_两数之和&#xff08;55_46&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff08;回溯&#xff09;&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08…...

湖北理元理律师事务所:债务优化中的“生活锚点”设计

在债务重组领域&#xff0c;一个常被忽视的核心矛盾是&#xff1a;还款能力与生存需求的冲突。过度压缩生活支出还债&#xff0c;可能导致收入中断&#xff1b;放任债务膨胀&#xff0c;又加剧精神压力。湖北理元理律师事务所通过“三步平衡法”&#xff0c;尝试在法理框架内破…...

c/c++的opencv椒盐噪声

在 C/C 中实现椒盐噪声 椒盐噪声&#xff08;Salt-and-Pepper Noise&#xff09;&#xff0c;也称为脉冲噪声&#xff08;Impulse Noise&#xff09;&#xff0c;是数字图像中常见的一种噪声类型。它的特点是在图像中随机出现纯白色&#xff08;盐&#xff09;或纯黑色&#x…...

计算机视觉入门:OpenCV与YOLO目标检测

计算机视觉入门&#xff1a;OpenCV与YOLO目标检测 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 计算机视觉入门&#xff1a;OpenCV与YOLO目标检测摘要引言技术原理对比1. OpenCV&#xff1a;传统图像处理与机器学…...

计算机网络-MPLS VPN应用场景与组网

上一篇文章我们通过一个基础实验实现了企业分支间的MPLS VPN互联&#xff0c;如果还不理解的可以多看几遍前面的文章或者多敲下实验。今天来学习几种常见的MPLS VPN应用场景与这些场景下MPLS VPN的部署方法。 一、MPLS VPN典型应用 目前&#xff0c;MPLS VPN的主要应用包括企…...

JavaScript性能优化实战的技术文-——仙盟创梦IDE

JavaScript性能优化实战技术文章大纲 性能优化的核心原则 减少代码执行时间降低内存消耗优化网络请求提升用户体验 代码层面的优化 减少全局变量使用&#xff0c;避免命名冲突和内存泄漏使用节流&#xff08;throttle&#xff09;和防抖&#xff08;debounce&#xff09;优…...

组合型回溯+剪枝

本篇基于b站灵茶山艾府。 77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]示例 2&#…...

【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” ✍️绪论​&#xff1a; 本章主要介绍了 Qt 中 QGroupBox 与 QTabWidget 控件。QGroupBox 是带标题的分组框&#xff0c;能容纳其他控件&#xff0c;有标题、对齐方式、是否…...

Axios 如何通过配置实现通过接口请求下载文件

前言 今天&#xff0c;我写了 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 和 《NodeJS 基于 Koa, 开发一个读取文件&#xff0c;并返回给客户端文件下载》 两篇文章。在这两篇文章中&#xff0c;我实现了数据库的备份&#xff0c;和提供数据库下载等接口。 但是&…...

使用java实现word转pdf,html以及rtf转word,pdf,html

word,rtf的转换有以下方案&#xff0c;想要免费最靠谱的是LibreOffice方案, LibreOffice 是一款 免费、开源、跨平台 的办公软件套件&#xff0c;旨在为用户提供高效、全面的办公工具&#xff0c;适用于个人、企业和教育机构。它支持多种操作系统&#xff08;Windows、macOS、…...

01 NLP的发展历程和挑战

1.人工智能行业介绍 ANI、AGI、ASI 以下是弱人工智能&#xff08;ANI&#xff09;、强人工智能&#xff08;AGI&#xff09;和超强人工智能&#xff08;ASI&#xff09;的对比表格&#xff1a; 类型定义当前状态弱人工智能&#xff08;ANI&#xff09;专注于特定任务&#x…...