数据挖掘入门-二手车交易价格预测
一、二手车交易价格预测
1-1 项目背景
随着二手车市场的快速发展,二手车交易价格的预测成为了一个热门研究领域。精准的价格预测不仅能帮助买卖双方做出更明智的决策,还能促进市场的透明度和公平性。对于买家来说,了解合理的市场价格可以避免因信息不对称而支付过高的费用;对于卖家来说,合理的定价可以提高车辆的成交率和收益。
1-2 功能需求
1.数据处理与特征工程
- 数据读取与清洗:从CSV文件读取数据,处理缺失值、异常值。
- 特征选择与提取:选择数值和类别特征列,构造训练和测试样本。
- 特征降维:使用PCA、FastICA、FactorAnalysis等方法进行特征降维。
2.模型训练与预测
- 模型选择:使用多种模型进行训练,包括线性回归(sklearn.linear_model)、支持向量机回归(sklearn.svm.SVR)、随机森林回归(sklearn.ensemble.RandomForestRegressor)、梯度提升回归(sklearn.ensemble.GradientBoostingRegressor)以及XGBoost和LightGBM等。
- 模型训练:利用K折交叉验证(StratifiedKFold)训练模型,并评估模型性能(mean_absolute_error)。
- 模型优化:使用网格搜索(GridSearchCV)进行超参数调优。
3.模型评估
- 性能评估:使用平均绝对误差(mean_absolute_error)指标评估模型性能。
- 结果输出:输出并保存预测结果,查看预测值的统计信息。
4.结果融合
- 加权融合:通过加权平均方法融合多个模型的预测结果,提高预测准确性。
- 结果修正:对融合后的预测结果进行后处理,确保合理性。
5.可视化
- 数据可视化:使用Matplotlib和Seaborn进行数据可视化,展示数据分布及模型预测结果。
1-3 输入数据分析
1. 训练数据集(used_car_train_20200313.csv)
(1)数据规模:150,000条记录,31个特征。
(2)特征信息:
数值型特征:
-
-
- SaleID: 销售ID
- name: 车辆名称
- regDate: 注册日期
- model: 车型编号
- brand: 品牌编号
- bodyType: 车身类型
- fuelType: 燃料类型
- gearbox: 变速箱类型
- power: 功率
- kilometer: 行驶里程
- regionCode: 区域代码
- seller: 卖家类型
- offerType: 报价类型
- creatDate: 创建日期
- price: 价格(目标变量)
- v_0到v_14: 特征变量
-
类别型特征:
-
-
- notRepairedDamage: 是否有未修复的损坏
-
(3)缺失值信息:
-
-
- model: 缺失1条
- bodyType: 缺失4506条
- fuelType: 缺失8680条
- gearbox: 缺失5981条
- notRepairedDamage: 缺失值处理(需进一步处理)
-
2. 测试数据集(used_car_testB_20200421.csv)
(1)数据规模:50,000条记录,30个特征。
(2)特征信息:与训练数据集相同,但没有价格(目标变量)列。
(3)缺失值信息:
-
-
- model: 无缺失值
- bodyType: 缺失1585条
- fuelType: 缺失3011条
- gearbox: 缺失1743条
-
1-4 输出数据分析
1.输出与保存
- 加权平均预测结果。
- 查看预测值的统计信息。
- 保存最终预测结果。
2.模型评估
- 使用平均绝对误差(MAE)指标评估模型性能。
二、设计过程
2-1 数据准备
1.数据获取
提供的训练数据集(used_car_train_20200313.csv)和测试数据集(used_car_testB_20200421.csv)。
2.数据读取
使用Pandas读取CSV文件。
3.数据查看与分析
查看数据的基本信息、头部数据和缺失值情况。
简要可以看到对应一些数据列名,以及NAN缺失信息。
查看列名。
2-2 数据清洗与预处理
1.处理缺失值
- 对于数值型特征,使用均值、中位数或其他统计量填补缺失值。
- 对于类别型特征,使用众数或添加一个新类别表示缺失值。
2.特征选择
选择与价格预测相关的特征,去除无关或重复的特征。
3.特征处理
对特征进行编码、标准化和归一化等处理。
2-3 特征工程
1.特征提取
从现有特征中提取新的特征,如日期特征、交互特征等。
2.特征降维
使用PCA、FastICA、FactorAnalysis等方法进行特征降维,减少特征维度,提升模型训练速度和性能。
2-4 模型选择与训练
1.模型选择
选择多种机器学习模型进行训练,这里用XGBoost、LightGBM。
LightGBM训练
XGboost训练
2.模型训练
使用K折交叉验证(StratifiedKFold)进行模型训练,并评估模型性能。
3.模型调优
使用网格搜索(GridSearchCV)进行超参数调优,选择最佳参数组合。
2-5 模型评估与优化
1.模型评估
使用平均绝对误差(MAE)指标评估模型性能。
2.模型融合
通过加权平均、堆叠等方法融合多个模型的预测结果,提高预测准确性。
3.结果修正
对模型预测结果进行后处理,确保合理性。
2-6 模型预测与结果保存
1.预测测试数据
使用训练好的模型对测试数据进行预测。
2.保存预测结果
将预测结果保存为CSV文件,并查看预测值的统计信息。
三、结果及分析
3-1 训练和评估 一个基于XGBoost回归的模型
训练和评估一个基于XGBoost回归(XGBRegressor)的模型,通过5折交叉验证方式来评估模型在训练集和验证集上的表现
结果:
计算训练集上的平均MAE为613.1617850640108
计算验证集上的平均MAE为708.5301055502574
分析:
该数据用于评估XGBoost模型在数据集上的表现,确保模型具有较好的泛化能力,并选择最佳的模型超参数。数据来看模型基本符合要求。
3-2 训练LightGBM模型
训练 LightGBM模型,并在验证集上评估模型性能,随后使用训练好的模型对测试数据进行预测。
LightGBM模型验证集上的平均MAE:
预测结果的统计信息:
分析:
训练 LightGBM 模型,评估其性能,并对测试数据进行预测和统计分析。从结果来看模型基本符合要求。
3-3训练XGBoost模型
训练XGBoost模型、评估其在验证集上的性能,以及使用该模型对测试集进行预测并进行统计分析。
XGBoost模型验证集上的平均MAE和预测结果的统计信息:
分析:
使用XGBoost模型进行训练和预测,并对预测结果进行评估和统计分析。从结果来看模型基本符合要求。
3-4加权融合
进行模型预测结果的加权融合,并计算加权融合后的预测结果的MAE。
结果:
分析:
通过简单的加权融合策略,结合两个不同的模型(LightGBM和XGBoost)的预测结果,来提升预测的准确性和稳定性。从结果来看加权融合使得平均绝对误差(MAE)减少。
3-5查看预测值的统计结果
针对测试集进行加权融合预测,并且展示预测结果的统计信息
分析:
大部分二手车价格再0-20000之间
四、代码解析
4-1.导入要使用的包和库
1.一些基础工具
import numpy as np
import pandas as pd
import warnings
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.special import jn
from IPython.display import display, clear_output
import timewarnings.filterwarnings('ignore')
%matplotlib inline
- numpy (np):用于数值计算和数组操作。
- pandas (pd):用于数据操作和分析,特别是DataFrame数据结构。
- warnings:用于控制警告信息的显示。
- matplotlib 和 matplotlib.pyplot (plt):用于数据可视化,绘制图表。
- seaborn (sns):基于matplotlib的高级数据可视化库。
- scipy.special.jn:用于计算n阶贝塞尔函数。
- IPython.display:用于在Jupyter Notebook中显示内容。
- time:用于时间相关的功能,比如暂停执行。
2.模型预测工具
from sklearn import linear_model
from sklearn import preprocessing
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor,GradientBoostingRegressor
- sklearn.linear_model:线性模型,如线性回归。
- sklearn.preprocessing:数据预处理工具,如标准化、归一化。
- sklearn.svm.SVR:支持向量机回归模型。
- sklearn.ensemble.RandomForestRegressor:随机森林回归模型。
- sklearn.ensemble.GradientBoostingRegressor:梯度提升回归模型。
3.数据降维处理工具
from sklearn.decomposition import PCA, FastICA, FactorAnalysis, SparsePCA
- PCA:主成分分析,用于降维。
- FastICA:快速独立成分分析,用于分离信号。
- FactorAnalysis:因子分析,用于降维。
- SparsePCA:稀疏主成分分析,用于降维。
4.LightGBM和XGBoost
import lightgbm as lgb
import xgboost as xgb
- LightGBM: LightGBM是一个高效的梯度提升框架,专门用于快速处理大规模数据。它由Microsoft开源,支持分类、回归、排序等任务。LightGBM的主要特点包括高效的并行训练、低内存消耗和处理大规模数据的能力。
- XGBoost: XGBoost(eXtreme Gradient Boosting)是一个优化的梯度提升库,具有高效、灵活和可移植的特点,广泛应用于机器学习竞赛和工业实践中。它能够处理缺失值,支持并行处理和分布式计算,具有强大的性能和高效的内存使用。
5.参数搜索和评价工具
from sklearn.model_selection import GridSearchCV,cross_val_score,StratifiedKFold,train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error
- GridSearchCV:网格搜索,用于超参数调优。
- cross_val_score:交叉验证评分。
- StratifiedKFold:分层K折交叉验证。
- train_test_split:将数据集划分为训练集和测试集。
- mean_squared_error:均方误差,用于评价模型。
- mean_absolute_error:平均绝对误差,用于评价模型。
4-2.选择特征列,构造训练和测试样本以及填补缺失值
进行了数据读取、查看、处理和基本统计分析的过程,为后续的机器学习模型训练和预测打下了基础。
1.读取数据
Train_data = pd.read_csv('./数据集/used_car_train_20200313.csv', sep=' ')
TestA_data = pd.read_csv('./数据集/used_car_testB_20200421.csv', sep=' ')
读取训练数据和测试数据,并指定分隔符为空格
2.输出数据的大小信息
print('Train data shape:', Train_data.shape)
print('TestA data shape:', TestA_data.shape)
输出训练数据和测试数据的行数和列数
3.查看数据
Train_data.head #简要浏览数据 Train_data.info() #查看数据列名及缺失信息
TestA_data.info()Train_data.columns #查看数值特征列的统计信息
查看训练数据的前五行,了解数据的大致结构,查看训练数据的所有列名,查看训练数据和测试数据中数值型特征列的统计信息,如均值、标准差、最小值、最大值等。
4.选择数值和类别特征列
numerical_cols = Train_data.select_dtypes(exclude='object').columns
print(numerical_cols)categorical_cols = Train_data.select_dtypes(include='object').columns
print(categorical_cols)
选择训练数据中的数值型列和类别型列。
5.选择特征列
feature_cols = [col for col in numerical_cols if col not in ['SaleID', 'name', 'regDate', 'creatDate', 'price', 'model', 'brand', 'regionCode', 'seller']]
print(feature_cols)
feature_cols = [col for col in feature_cols if 'Type' not in col]
print(feature_cols)
从数值型列中去除不需要的列,并选择最终的特征列。
6.构造训练样本和测试样本
X_data = Train_data[feature_cols]
Y_data = Train_data['price']
print(Y_data)X_test = TestA_data[feature_cols]
print('X train shape:', X_data.shape)
print('X test shape:', X_test.shape)
- 从训练数据中提取特征列和目标列(价格price)。
- 从测试数据中提取特征列。
- 输出训练特征数据和测试特征数据的形状
7.填补缺失值
def Sta_inf(data): # 定义统计函数print('_min', np.min(data))print('_max:', np.max(data))print('_mean', np.mean(data))print('_ptp', np.ptp(data))print('_std', np.std(data))print('_var', np.var(data))print('Sta of label:') # 查看标签统计信息
Sta_inf(Y_data)plt.hist(Y_data)# 绘制标签分布图
plt.show()
plt.close()print(X_data.info()) #填补缺失值
X_data = X_data.fillna(-1)
X_test = X_test.fillna(-1)
print(X_data.info())
1.定义统计函数:定义一个函数,用于统计数据的基本信息,包括最小值、最大值、均值、极差、标准差和方差。
2.查看标签统计信息 : 使用定义的统计函数查看目标列price的统计信息。
3.绘制标签分布图 :绘制目标列price的直方图,查看其分布情况。
4.填补缺失值 :
- 查看特征数据的信息,包括缺失值情况。
- 将训练特征数据和测试特征数据中的缺失值填补为-1。
- 再次查看特征数据的信息,确认缺失值已填补。
4-3.XGboost
## xgb-Modelxgr = xgb.XGBRegressor(n_estimators=120, learning_rate=0.1, gamma=0, subsample=0.8,\colsample_bytree=0.9, max_depth=7) #,objective ='reg:squarederror'scores_train = []
scores = []## 5折交叉验证方式
sk=StratifiedKFold(n_splits=5,shuffle=True,random_state=0)for train_ind,val_ind in sk.split(X_data,Y_data):train_x=X_data.iloc[train_ind].valuestrain_y=Y_data.iloc[train_ind]val_x=X_data.iloc[val_ind].valuesval_y=Y_data.iloc[val_ind]xgr.fit(train_x,train_y)pred_train_xgb=xgr.predict(train_x)pred_xgb=xgr.predict(val_x)score_train = mean_absolute_error(train_y,pred_train_xgb)scores_train.append(score_train)score = mean_absolute_error(val_y,pred_xgb)scores.append(score)print('Train mae:',np.mean(score_train))
print('Val mae',np.mean(scores))
这段代码实现了一个XGBoost回归模型(xgb.XGBRegressor)的交叉验证训练过程,使用了5折Stratified K-Fold交叉验证。
逐步解释:
1.导入必要的库
import xgboost as xgb
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import mean_absolute_error
代码开始时导入了必要的库,包括XGBoost用于梯度提升、StratifiedKFold用于交叉验证,以及mean_absolute_error用于评估模型性能。
2.定义XGBoost模型
xgr = xgb.XGBRegressor(n_estimators=120, learning_rate=0.1, gamma=0,
subsample=0.8, colsample_bytree=0.9, max_depth=7)
在这里,定义了一个XGBoost回归模型,使用了特定的超参数:
1.n_estimators:集成中的提升轮数或决策树数量(本例中有120棵树)。
2.learning_rate:防止过拟合的步长缩减。
3.gamma:需要进一步划分叶子节点的最小损失减小量。
4.subsample:用于拟合决策树的样本比例。
5.colsample_bytree:用于拟合决策树的特征比例。
6.max_depth:每棵树的最大深度。
3.初始化用于存储训练和验证得分的列表:
scores_train = [] # 存储训练集的平均绝对误差
scores = [] # 存储验证集的平均绝对误差
创建空列表用于存储训练和验证的平均绝对值误差(MAE)
4. 5折交叉验证
sk=StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
使用StratifiedKFold进行5折交叉验证,确保每一折中目标变量的分布与整个数据集一致。
5.交叉验证过程
for train_ind, val_ind in sk.split(X_data, Y_data):train_x = X_data.iloc[train_ind].valuestrain_y = Y_data.iloc[train_ind]val_x = X_data.iloc[val_ind].valuesval_y = Y_data.iloc[val_ind]xgr.fit(train_x, train_y)pred_train_xgb = xgr.predict(train_x)pred_xgb = xgr.predict(val_x)score_train = mean_absolute_error(train_y, pred_train_xgb)scores_train.append(score_train)score = mean_absolute_error(val_y, pred_xgb)scores.append(score)
- 对于每一折,将数据分为训练集和验证集。
- 使用训练集训练XGBoost模型。
- 在训练集和验证集上进行预测。
- 计算并存储训练集和验证集的平均绝对误差(MAE)。
6.输出结果
print('Train mae:', np.mean(score_train))
print('Val mae', np.mean(scores))
输出训练集和验证集的平均MAE。
7.训练
def build_model_xgb(x_train,y_train):model = xgb.XGBRegressor(n_estimators=150, learning_rate=0.1, gamma=0, subsample=0.8,\colsample_bytree=0.9, max_depth=7) #, objective ='reg:squarederror'model.fit(x_train, y_train)return modeldef build_model_lgb(x_train,y_train):estimator = lgb.LGBMRegressor(num_leaves=127,n_estimators = 150)param_grid = {'learning_rate': [0.01, 0.05, 0.1, 0.2],}gbm = GridSearchCV(estimator, param_grid)gbm.fit(x_train, y_train)return gbm
这段代码定义了两函数 build_model_xgb 和 build_model_lgb,这些函数用于构建和训练基于XGBoost(xgb.XGBRegressor)和LightGBM(lgb.LGBMRegressor)的回归模型,分别返回已训练的模型对象。
一、build_model_xgb(x_train, y_train) 函数:
1.这个函数用于构建和训练基于XGBoost的回归模型。
2.在函数内部,首先创建了一个XGBoost回归模型对象 model,并指定了一些超参数,如树的数量(n_estimators)、学习率(learning_rate)、最大深度(max_depth)等。
3.然后,使用 x_train(特征数据)和 y_train(标签数据)对模型进行训练,通过model.fit(x_train,y_train) 完成。
4.最后,已训练的模型对象 model 被返回。
二、build_model_lgb(x_train, y_train) 函数:
1.这个函数用于构建和训练基于LightGBM的回归模型。
2.在函数内部,首先创建了一个LightGBM回归模型对象 estimator,并指定了一些超参数,如叶子节点数(num_leaves)和树的数量(n_estimators)等。
3.接着,定义了一个参数网格 param_grid,包括学习率(learning_rate)的不同取值,以便进行超参数调优。
4.使用 GridSearchCV 对象 gbm,通过交叉验证来寻找最佳超参数组合。
5.最后,使用 x_train(特征数据)和 y_train(标签数据)对模型进行训练,通过 gbm.fit(x_train, y_train) 完成。
6.已训练的模型对象 gbm 被返回。
这两个函数允许你分别构建和训练XGBoost和LightGBM回归模型,并返回这些模型对象,以便进一步用于预测或评估。这对于比较不同的回归算法或进行超参数调优非常有用。
## Split data with val
x_train,x_val,y_train,y_val = train_test_split(X_data,Y_data,test_size=0.3)print('Train lgb...')
model_lgb = build_model_lgb(x_train,y_train)
val_lgb = model_lgb.predict(x_val)
MAE_lgb = mean_absolute_error(y_val,val_lgb)
print('MAE of val with lgb:',MAE_lgb)print('Predict lgb...')
model_lgb_pre = build_model_lgb(X_data,Y_data)
subA_lgb = model_lgb_pre.predict(X_test)
print('Sta of Predict lgb:')
Sta_inf(subA_lgb)
这部分代码用于训练、预测和评估LightGBM回归模型,并输出相关的结果
一、训练LightGBM模型和验证集上的MAE
print('Train lgb...')
model_lgb = build_model_lgb(x_train, y_train)
val_lgb = model_lgb.predict(x_val)
MAE_lgb = mean_absolute_error(y_val, val_lgb)
print('MAE of val with lgb:', MAE_lgb)
1.通过 build_model_lgb 函数构建LightGBM模型,使用 x_train 和 y_train 进行训练。
2.使用已训练的模型 model_lgb 对验证集 x_val 进行预测,得到预测结果 val_lgb。
3.计算验证集上的平均绝对误差(MAE),并将其存储在 MAE_lgb 变量中。
4.打印出验证集上使用LightGBM模型的MAE。
二、预测测试数据集:
print('Predict lgb...')
model_lgb_pre = build_model_lgb(X_data, Y_data)
subA_lgb = model_lgb_pre.predict(X_test)
1.再次使用 build_model_lgb 函数构建LightGBM模型,这次使用完整的训练数据集 X_data 和 Y_data 进行训练。
2.使用已训练的模型 model_lgb_pre 对测试数据集 X_test 进行预测,得到预测结果 subA_lgb。
三、输出预测结果的统计信息:
print('Sta of Predict lgb:')
Sta_inf(subA_lgb)
打印出 “Sta of Predict lgb:”,然后调用 Sta_inf 函数来展示预测结果 subA_lgb 的统计信息。这部分代码可能是一个自定义的函数,用于显示预测结果的一些统计摘要,例如均值、标准差等。
这段代码主要用于训练和评估LightGBM回归模型,然后使用该模型对测试数据集进行预测,并输出预测结果的统计信息。这可以帮助你了解模型在验证集上的性能以及对测试集的预测结果。
4-4.加权融合(Weighted Ensemble)方法
print('Train xgb...')
model_xgb = build_model_xgb(x_train,y_train)
val_xgb = model_xgb.predict(x_val)
MAE_xgb = mean_absolute_error(y_val,val_xgb)
print('MAE of val with xgb:',MAE_xgb)print('Predict xgb...')
model_xgb_pre = build_model_xgb(X_data,Y_data)
subA_xgb = model_xgb_pre.predict(X_test)
print('Sta of Predict xgb:')
Sta_inf(subA_xgb)## 这里我们采取了简单的加权融合的方式
val_Weighted = (1-MAE_lgb/(MAE_xgb+MAE_lgb))*val_lgb+(1-MAE_xgb/(MAE_xgb+MAE_lgb))*val_xgb
val_Weighted[val_Weighted<0]=10 # 由于我们发现预测的最小值有负数,而真实情况下,price为负是不存在的,由此我们进行对应的后修正
print('MAE of val with Weighted ensemble:',mean_absolute_error(y_val,val_Weighted))
这段代码实现了一个简单的加权融合(Weighted Ensemble)方法,将两个模型的预测结果进行加权组合,并计算最终的验证集平均绝对误差(MAE)。
1.计算加权融合后的验证集预测结果:
val_Weighted = (1 - MAE_lgb / (MAE_xgb + MAE_lgb)) * val_lgb + (1 - MAE_xgb / (MAE_xgb + MAE_lgb)) * val_xgb
1.MAE_lgb 是使用LightGBM模型在验证集上计算得到的平均绝对误差。
2.MAE_xgb 是使用XGBoost模型在验证集上计算得到的平均绝对误差。
3.val_lgb 是LightGBM模型在验证集上的预测结果。
4.val_xgb 是XGBoost模型在验证集上的预测结果。
这段代码首先计算了两个模型的MAE之比,然后使用该比例将两个模型的预测结果进行加权平均。具体来说,LightGBM的预测结果被乘以 1 - MAE_lgb / (MAE_xgb + MAE_lgb),而XGBoost的预测结果被乘以 1 - MAE_xgb / (MAE_xgb + MAE_lgb)。这种加权方法将更高性能(MAE更低)的模型分配更高的权重。
2.进行后修正:
val_Weighted[val_Weighted < 0] = 10
这部分代码用于进行后修正,将预测结果中小于0的值(负数)设置为10。这是因为在真实情况下,价格(预测值)不应该为负数,所以将小于0的预测值调整为10。
3.计算加权融合后的验证集平均绝对误差:
print('MAE of val with Weighted ensemble:', mean_absolute_error(y_val, val_Weighted))
这段代码计算了使用加权融合后的模型 val_Weighted 对验证集的平均绝对误差(MAE)。它衡量了加权融合模型在验证集上的性能。
这个加权融合方法的目的是结合两个模型的优势,根据它们在验证集上的表现,为每个模型分配权重,从而获得更好的综合性能。最后,通过计算融合后模型的MAE来评估性能。
4-5.输出与保存
sub_Weighted = (1-MAE_lgb/(MAE_xgb+MAE_lgb))*subA_lgb+(1-MAE_xgb/(MAE_xgb+MAE_lgb))*subA_xgb## 查看预测值的统计进行
plt.hist(sub_Weighted)
plt.show()
plt.close()sub = pd.DataFrame()
sub['SaleID'] = TestA_data.SaleID
sub['price'] = sub_Weighted
sub.to_csv('./sub_Weighted.csv',index=False)
sub.head()
使用加权平均方法来结合两个模型(LightGBM和XGBoost)的预测结果,并保存最终的预测结果到CSV文件。
1.加权平均预测结果
使用LightGBM和XGBoost的预测结果进行加权平均,其中权重由各自模型的MAE(平均绝对误差)决定:
- MAE_lgb 是LightGBM模型的MAE。
- MAE_xgb 是XGBoost模型的MAE。
- 权重的计算方式确保误差较小的模型权重更大。
2.查看预测值的统计信息
plt.hist(sub_Weighted)
plt.show()
plt.close()
使用直方图查看加权平均后的预测值分布情况。
3.保存最终预测结果
sub = pd.DataFrame()
sub['SaleID'] = TestA_data.SaleID
sub['price'] = sub_Weighted
sub.to_csv('./sub_Weighted.csv', index=False)
sub.head()
- 创建一个新的DataFrame sub。
- 将测试数据集中的SaleID列赋值给sub的SaleID列。
- 将加权平均后的预测值赋值给sub的price列。
- 将sub DataFrame保存为CSV文件sub_Weighted.csv,不包含索引。
- 使用head()方法查看sub DataFrame的前五行,确保数据保存正确。
五、总结
5-1项目背景与目的
本次设计旨在通过实践,探索二手车交易价格预测的相关技术和方法。随着二手车市场的迅速扩展,准确预测二手车的交易价格对买卖双方至关重要,能够提高市场的透明度和效率。通过本项目,我们希望学习并实践数据处理、特征工程、机器学习模型的应用与评估等技能,为未来类似问题的解决提供基础与经验。
5-2项目内容与实施过程
1.数据收集与处理:
我们从开放数据源中获取了二手车交易记录的数据集,进行了数据清洗与预处理,包括处理缺失值、异常值等。
2.特征工程:
在数据准备阶段,我们进行了特征选择和提取,选取了对二手车价格预测有影响的数值特征和类别特征,并利用主成分分析(PCA)等方法进行了特征降维处理。
3.模型选择与训练:
我们选择了XGBoost和LightGBM模型。通过K折交叉验证,优化了各模型的性能。
4.模型评估与优化:
我们使用了平均绝对误差(MAE)指标对模型进行了评估,通过调整超参数和模型结构,进一步优化了模型的预测能力。
5.结果融合与输出:
为提高预测准确性,我们采用了模型结果的加权平均方法进行融合,并对融合后的结果进行了修正和调整,确保预测结果的合理性和可靠性。
6.可视化:
最后,我们利用Matplotlib工具对数据分析结果进行可视化展示。
5-3成果与总结
掌握了二手车交易价格预测的基本流程和关键技术,还提升了数据处理、特征工程、机器学习模型选择与优化的实践能力。在项目实施过程中,我们遇到了数据质量问题、模型调优困难等挑战,通过探索与研究,最终取得了令人满意的预测结果。未来,我们将进一步深化对更复杂数据集和模型的应用,不断完善和扩展模型。
相关文章:
数据挖掘入门-二手车交易价格预测
一、二手车交易价格预测 1-1 项目背景 随着二手车市场的快速发展,二手车交易价格的预测成为了一个热门研究领域。精准的价格预测不仅能帮助买卖双方做出更明智的决策,还能促进市场的透明度和公平性。对于买家来说,了解合理的市场价格可以避免…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.4 模型部署与定期评估
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 10.4 模型部署与定期评估10.4.1 模型部署架构设计1.1 模型存储方案1.2 实时预测接口 10.4.2 定期评估体系构建2.1 评估指标体系2.2 自动化评估流程2.3 模型衰退预警 10.4.3 …...
构建可信数据空间需要突破技术、规则和生态三大关键
构建可信数据空间需要突破技术、规则和生态三大关键:技术上要解决"可用不可见"的隐私计算难题,规则上要建立动态确权和跨境流动的治理框架,生态上要形成多方协同的标准体系。他强调,只有实现技术可控、规则可信、生态协…...
阳光学院【2020下】计算机网络原理-A卷-试卷-期末考试试卷
一、单选题(共25分,每空1分) 1.ICMP协议工作在TCP/IP参考模型的 ( ) A.主机-网络 B.网络互联层 C.传输层 D.应用层 2.下列关于交换技术的说法中,错误的是 ( ) A.电路交换适用于突发式通信 B.报文交换不能满足实时通信 C.报文…...
python: union()函数用法
在 Python 中,union() 是集合(set)类型的内置方法,用于返回两个或多个集合的并集(即所有元素的合集,自动去重)。以下是它的用法详解: 1. 基本语法 python 复制 下载 set.union(*…...
docker部署WeDataSphere开源大数据平台
GitHub:https://github.com/WeBankFinTech/WeDataSphere **WDS容器化版本是由Docker构建的一个能够让用户在半小时内完成所有组件安装部署并使用的镜像包。**无需再去部署Hadoop等基础组件,也不需要部署WDS的各功能组件,即可让您快速体验 WD…...
【计算机视觉】OpenCV项目实战:基于face_recognition库的实时人脸识别系统深度解析
基于face_recognition库的实时人脸识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 人脸检测模块2.2 特征编码2.3 相似度计算 3. 实战部署指南3.1 环境配置3.2 数据准备3.3 实时识别流程 4. 常见问题与解决方案4.1 dlib安装失败4.2 人脸检测性能差4.3 误识别率高 5. 关键…...
uni-app学习笔记五-vue3响应式基础
一.使用ref定义响应式变量 在组合式 API 中,推荐使用 ref() 函数来声明响应式状态,ref() 接收参数,并将其包裹在一个带有 .value 属性的 ref 对象中返回 示例代码: <template> <view>{{ num1 }}</view><vi…...
阿克曼-幻宇机器人系列教程2- 机器人交互实践(Topic)
在上一篇文章中,我们介绍了两种登录机器人的方式,接下来我们介绍登录机器人之后,我们如何通过topic操作命令实现与机器人的交互。 1. 启动 & 获取topic 在一个终端登录树莓派后,执行下列命令运行机器人 roslaunch huanyu_r…...
Windows系统事件查看器管理单元不可用
报错:Windows系统事件查看器管理单元不可用 现象原因:为误触关闭管理单元或者该模块卡死 解决办法:重启Windows server服务,若不行,则重启服务器即可...
milvus+flask山寨《从零构建向量数据库》第7章case2
继续流水账完这本书,这个案例是打造文字形式的个人知识库雏形。 create_context_db: # Milvus Setup Arguments COLLECTION_NAME text_content_search DIMENSION 2048 MILVUS_HOST "localhost" MILVUS_PORT "19530"# Inference Arguments…...
前端如何应对精确数字运算?用BigNumber.js解决JavaScript原生Number类型在处理大数或高精度计算时的局限性
目录 前端如何应对精确数字运算?用BigNumber.js解决JavaScript原生Number类型在处理大数或高精度计算时的局限性 一、BigNumber.js介绍 1、什么是 BigNumber.js? 2、作用领域 3、核心特性 二、安装配置与基础用法 1、引入 BigNumber.js 2、配置 …...
多目应用:三目相机在汽车智能驾驶领域的应用与技术创新
随着汽车智能驾驶技术不断完善,智能汽车也不断加速向全民普惠迈进,其中智驾“眼睛”三目视觉方案凭借低成本、高精度、强适配性成为众多汽车品牌关注的焦点。三目相机在汽车智能驾驶领域的创新应用,主要依托其多视角覆盖、高动态范围…...
webpack重构优化
好的,以下是一个关于如何通过重构 Webpack 构建策略来优化性能的示例。这个过程包括分析现有构建策略的问题、优化策略的制定以及具体的代码实现。 --- ### 项目背景 在参与公司的性能专项优化过程中,我发现现有的 Webpack 构建策略存在一些问题&#…...
MySQL 8.0 OCP(1Z0-908)英文题库(31-40)
目录 第31题题目分析正确答案 第32题题目分析正确答案 第33题题目分析正确答案: 第34题题目解析正确答案 第35题题目分析正确答案 第36题题目分析正确答案 第37题题目分析正确答案 第38题题目分析正确答案 第39题题目分析正确答案 第40题题目分析正确答案 第31题 Y…...
aardio - 虚表 —— vlistEx.listbar2 多层菜单演示
在 近我者赤 修改版的基础上,做了些许优化。 请升级到最新版本。 import win.ui; import godking.vlistEx.listbar2; import fonts.fontAwesome; /*DSG{{*/ mainForm win.form(text"多层折叠菜单";right1233;bottom713) mainForm.add({ custom{cls"…...
22.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--增加公共代码
在拆分服务之前,我们需要先提取一些公共代码。本篇将重点新增日志记录、异常处理以及Redis的通用代码。这些组件将被整合到一个共享类库中,便于在微服务架构中高效复用。 Tip:在后续的教程中我们会穿插多篇提取公共代码的文章,帮助…...
EasyOps®5月热力焕新:三大核心模块重构效能边界
在应用系统管理中,我们将管理对象从「服务实例」优化为「部署实例」,这一改变旨在提升管理效率与数据展示清晰度。 此前,系统以 “IP Port” 组合定义服务实例。当同一 IP 下启用多个进程或端口时,会产生多个服务实例。比如一台…...
基于深度学习的工业OCR数字识别系统架构解析
一、项目场景 春晖数字识别视觉检测系统专注于工业自动化生产监控、设备运行数据记录等关键领域。系统通过高精度OCR算法,能够实时识别设备上显示的关键数据(如温度、压力、计数等),并定时存储至Excel文件中。这些数据对于生产过…...
R语言绘图 | 渐变火山图
客户要求绘制类似文章中的这种颜色渐变火山图,感觉挺好看的。网上找了一圈,发现有别人已经实现的类似代码,拿来修改后即可使用,这里做下记录,以便后期查找。 简单实现 library(tidyverse)library(ggrepel)library(ggf…...
Go语言——docker-compose部署etcd以及go使用其服务注册
一、docker-compsoe.yml文件如下 version: "3.5"services:etcd:hostname: etcdimage: bitnami/etcd:latestdeploy:replicas: 1restart_policy:condition: on-failureprivileged: truevolumes:# 持久化 etcd 数据到宿主机- "/app/apisix/etcd/data:/bitnami/etc…...
Tomcat的调优
目录 一. JVM 1.1 JVM的组成 1.2 运行时数据区域的组成 二. 垃圾回收 2.1 如何确认垃圾 1. 引用计数法 2. 根搜索算法 2.2 垃圾回收基本算法 1. 标记-清除算法(Mark-Sweep) 2. 标记-压缩算法(Mark-Compact) 3. 复制算法…...
Tomcat和Nginx的主要区别
1、功能定位 Nginx:核心是高并发HTTP服务器和反向代理服务器,擅长处理静态资源(如HTML、图片)和负载均衡。Tomcat:是Java应用服务器,主要用于运行动态内容(如JSP、Servlet)…...
Python训练营打卡——DAY24(2025.5.13)
目录 一、元组 1. 通俗解释 2. 元组的特点 3. 元组的创建 4. 元组的常见用法 二、可迭代对象 1. 定义 2. 示例 3. 通俗解释 三、OS 模块 1. 通俗解释 2. 目录树 四、作业 1. 准备工作 2. 实战代码示例 3. 重要概念解析 一、元组 是什么:一种…...
【TDengine源码阅读】DLL_EXPORT
2025年5月13日,周二清晨 #ifdef WINDOWS #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT #endif为啥Linux和MacOS平台时宏为空,难道Linux和mac不用定义导出函数吗? 这段代码是一个跨平台的宏定义,用于处理不…...
电子科技浪潮下的华秋电子:慕尼黑上海电子展精彩回顾
为期3天的2025慕尼黑上海电子展(electronica China 2025)于17日在上海新国际博览中心落下帷幕。 展会那规模,真不是吹的!本届展会汇聚了1,794家国内外行业知名品牌企业的展商来 “摆摊”,展览面积大得像个超级大迷宫&…...
TDengine编译成功后的bin目录下的文件的作用
2025年5月13日,周二清晨 以下是TDengine工具集中各工具的功能说明: 核心工具 taosd • TDengine的核心服务进程,负责数据存储、查询和集群管理。 taos • 命令行客户端工具,用于连接TDengine服务器并执行SQL操作。 taosBenchma…...
spark sql基本操作
Spark SQL 是 Apache Spark 的一个模块,用于处理结构化数据。它允许用户使用标准的 SQL 语法来查询数据,并且可以无缝地与 Spark 的其他功能(如 DataFrame、Dataset 和 RDD)结合使用。以下是 Spark SQL 的基本使用方法和一些常见操…...
采购流程规范化如何实现?日事清流程自动化助力需求、采购、财务高效协作
采购审批流程全靠人推进,内耗严重,效率低下? 花重金上了OA,结果功能有局限、不灵活? 问题出在哪里?是我们的要求太多、太苛刻吗?NO! 流程名称: 采购审批管理 流程功能…...
影刀RPA开发-CSS选择器介绍
影刀RPA网页自动化开发,很多时候需要我们查看页面源码,查找相关的元素属性,这就需要我们有必要了解CSS选择器。本文做了些简单的介绍。希望对大家有帮助! 1. CSS选择器概述 1.1 定义与作用 CSS选择器是CSS(层叠样式…...
DeepSeek、B(不是百度)AT、科大讯飞靠什么坐上中国Ai牌桌?
在国产AI舞台上,DeepSeek、阿里、字节、腾讯、讯飞群雄逐鹿,好不热闹。 这场堪称“军备竞赛”的激烈角逐,绝非简单的市场竞争,而是一场关乎技术、创新与未来布局的深度博弈。在竞赛中,五大模型各显神通,以…...
MySQL全局优化
目录 1 硬件层面优化 1.1 CPU优化 1.2 内存优化 1.3 存储优化 1.4 网络优化 2 系统配置优化 2.1 操作系统配置 2.2 MySQL服务配置 3 库表结构优化 4 SQL及索引优化 mysql可以从四个层面考虑优化,分别是 硬件系统配置库表结构SQL及索引 从成本和优化效果来看…...
【github】主页显示star和fork
数据收集:定期(例如每天)获取你所有仓库的 Star 和 Fork 总数。数据存储:将收集到的数据(时间戳、总 Star 数、总 Fork 数)存储起来。图表生成:根据存储的数据生成变化曲线图(通常是…...
网站遭受扫描攻击,大量爬虫应对策略
网站的日志里突然有很多访问路径不存在的,有些ip地址也是国外的,而且访问是在深夜且次数非常频繁紧密。判定就是不怀好意的扫描网站寻找漏洞。也有些是爬虫,且是国外的爬虫,有的也是不知道的爬虫爬取网站。网站的真实流量不多&…...
【 Redis | 实战篇 秒杀实现 】
目录 前言: 1.全局ID生成器 2.秒杀优惠券 2.1.秒杀优惠券的基本实现 2.2.超卖问题 2.3.解决超卖问题的方案 2.4.基于乐观锁来解决超卖问题 3.秒杀一人一单 3.1.秒杀一人一单的基本实现 3.2.单机模式下的线程安全问题 3.3.集群模式下的线程安全问题 前言&…...
手搓传染病模型(SEIARW)
在传染病传播的研究中,水传播途径是一个重要的考量因素。SEAIRW 模型(易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W)综合考虑了人与人接触传播以及水传播的双重机制,为分析此类传染病提供了全面的…...
【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希
【C】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希 在日常开发中,无论是数据结构优化、缓存设计,还是分布式架构搭建,unordered_map、布隆过滤器和一致性哈希都是绕不开的关键工具。它们高效、轻量,在性能与扩展性方面…...
第五天——贪心算法——射气球
1.题目 有一些球形气球贴在一个表示 XY 平面的平坦墙壁上。气球用一个二维整数数组 points 表示,其中 points[i] [xstart, xend] 表示第 i 个气球的水平直径范围从 xstart 到 xend。你并不知道这些气球的具体 y 坐标。 可以从 x 轴上的不同位置垂直向上࿰…...
麦肯锡110页PPT企业组织效能提升调研与诊断分析指南
“战略清晰、团队拼命、资源充足,但业绩就是卡在瓶颈期上不去……”这是许多中国企业面临的真实困境。表面看似健康的企业,往往隐藏着“组织亚健康”问题——跨部门扯皮、人才流失、决策迟缓、市场反应滞后……麦肯锡最新研究揭示:组织健康度…...
BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)
文章目录 引言一、多源BFS的概述二、应用场景三、算法步骤四、代码实现五、代码解释六、总结 引言 在浩渺的图论宇宙中,图的每一条边、每一个节点都是故事的组成部分。每当我们站在一个复杂的迷宫前,开始感受它的深邃时,我们往往不再局限于从…...
理解 C# 中的各类指针
前言 变量可以理解成是一块内存位置的别名,访问变量也就是访问对应内存中的数据。 指针是一种特殊的变量,它存储了一个内存地址,这个内存地址代表了另一块内存的位置。 指针指向的可以是一个变量、一个数组元素、一个对象实例、一块非托管内存…...
MySQL 事务(二)
文章目录 事务隔离性理论理解隔离性隔离级别 事务隔离级别的设置和查看事务隔离级别读未提交读提交(不可重复读) 事务隔离性理论 理解隔离性 MySQL服务可能会同时被多个客户端进程(线程)访问,访问的方式以事务方式进行一个事务可能由多条SQL…...
【HarmonyOS】ArkTS开发应用的横竖屏切换
文章目录 1、简介2、静态 — 横竖屏切换2.1、效果2.2、实现原理2.3、module.json5 源码 3、动态 — 横竖屏切换3.1、应用随系统旋转切换横竖屏3.2、setPreferredOrientation 原理配置3.3、锁定旋转的情况下,手动设置横屏状态 1、简介 在完成全屏网页嵌套应用开发后…...
Linux中find命令用法核心要点提炼
大家好,欢迎来到程序视点!我是你们的老朋友.小二! 以下是针对Linux中find命令用法的核心要点提炼: 基础语法结构 find [路径] [选项] [操作]路径:查找目录(.表当前目录,/表根目录)…...
专栏项目框架介绍
项目整体实现框图 如下图所示,是该项目的整体框图,项目的功能概括为:PC端下发数据文件,FPGA板卡接收数据文件,缓存至DDR中,待数据文件发送完毕,循环读取DDR有效写区域数据,将DDR数据…...
WSL 安装 Debian 12 后,Linux 如何安装 vim ?
在 WSL 的 Debian 12 中安装 Vim 非常简单,只需使用 apt 包管理器即可。以下是详细步骤: 1. 更新软件包列表 首先打开终端,确保系统包列表是最新的: sudo apt update2. 安装 Vim 直接通过 apt 安装 Vim: sudo apt …...
【SpringBoot】从零开始全面解析Spring MVC (一)
本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍Spring MVC相关知识. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子…...
C++—特殊类设计设计模式
目录 C—特殊类设计&设计模式1.设计模式2.特殊类设计2.1设计一个无法被拷贝的类2.2设计一个只能在堆上创建对象的类2.3设计一个只能在栈上创建对象的类2.4设计一个类,无法被继承2.5设计一个类。这个类只能创建一个对象【单例模式】2.5.1懒汉模式实现2.5.2饿汉模…...
初入OpenCV
OpenCV简介 OpenCV是一个开源的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法。 应用场景: 目标识别:人脸、车辆、车牌、动物; 自动驾驶;医学影像分析; 视频内容理解分析ÿ…...
霍夫圆变换全面解析(OpenCV)
文章目录 一、霍夫圆变换基础1.1 霍夫圆变换概述1.2 圆的数学表达与参数化 二、霍夫圆变换算法实现2.1 标准霍夫圆变换算法流程2.2 参数空间的表示与优化 三、关键参数解析3.1 OpenCV中的HoughCircles参数3.2 参数调优策略 四、Python与OpenCV实现参考4.1 基本实现代码4.2 改进…...