html
掌握回归分析:汽车价格预测的全面模板
利用我们专家精心设计的汽车价格预测模板,充分发挥回归分析的潜力。无论您是在尝试不同的模型还是解决各种回归问题,本指南都提供了逐步的方法,以简化您的机器学习工作流程。
目录
- 机器学习中回归简介
- 了解CarPrice数据集
- 设置您的环境
-
数据预处理
- 处理缺失数据
- 特征选择
- 对分类变量进行编码
- 特征缩放
- 拆分数据集
-
构建和评估模型
- 线性回归
- 多项式回归
- 决策树回归器
- 随机森林回归器
- AdaBoost回归器
- XGBoost回归器
- 支持向量回归(SVR)
- 结论
- 访问回归模板
机器学习中回归简介
回归分析是机器学习的基本组成部分,使我们能够基于输入特征预测连续的结果。从房地产定价到股市预测,回归模型在各个行业的决策过程中扮演着关键角色。在本文中,我们将深入探讨如何使用Python创建一个强大的回归模板,特别是针对汽车价格预测的应用。
了解CarPrice数据集
我们的旅程始于CarPrice数据集,该数据集来源于Kaggle。该数据集包含25个字段和大约206条记录,使其在易于管理的同时,又足够复杂以展示回归技术。
数据集结构
以下是数据集的快照:
car_ID
symboling
CarName
fueltype
aspiration
doornumber
carbody
drivewheel
enginelocation
wheelbase
...
price
1
3
alfa-romero giulia
gas
std
two
convertible
rwd
front
88.6
...
13495.0
2
3
alfa-romero stelvio
gas
std
two
convertible
rwd
front
88.6
...
16500.0
...
...
...
...
...
...
...
...
...
...
...
...
目标变量是price
,代表汽车的价格(单位:美元)。
设置您的环境
在深入数据之前,请确保已安装必要的Python库。我们将使用pandas进行数据操作,numpy进行数值计算,以及scikit-learn和XGBoost来构建和评估模型。
12345678910111213
import pandas as pdimport numpy as npfrom sklearn.impute import SimpleImputerfrom sklearn.preprocessing import OneHotEncoder, StandardScalerfrom sklearn.compose import ColumnTransformerfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_scorefrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.ensemble import RandomForestRegressor, AdaBoostRegressorfrom sklearn.svm import SVRimport xgboost as xgb
数据预处理
处理缺失数据
数据的清洁度至关重要。我们将分别处理数值和分类数据中的缺失值。
数值数据
对于数值列,我们将使用SimpleImputer将缺失值填充为每列的均值。
123456789
# Identify numerical columnsnumerical_cols = list(np.where((X.dtypes == np.int64) | (X.dtypes == np.float64))[0]) # Initialize imputer for numerical dataimp_mean = SimpleImputer(missing_values=np.nan, strategy='mean') # Fit and transform the dataimp_mean.fit(X.iloc[:, numerical_cols])X.iloc[:, numerical_cols] = imp_mean.transform(X.iloc[:, numerical_cols])
分类数据
对于分类列,我们将使用SimpleImputer将缺失值填充为最频繁的类别。
123456789
# Identify categorical columnsstring_cols = list(np.where((X.dtypes == object))[0]) # Initialize imputer for categorical dataimp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent') # Fit and transform the dataimp_freq.fit(X.iloc[:, string_cols])X.iloc[:, string_cols] = imp_freq.transform(X.iloc[:, string_cols])
特征选择
并非所有特征都能对模型产生有意义的贡献。例如,car_ID
列仅是一个标识符,并不提供预测价值。我们将删除这些不相关的列。
12
# Drop the car_ID columnX.drop('car_ID', axis=1, inplace=True)
对分类变量进行编码
机器学习模型需要数值输入。我们将使用独热编码将分类变量转换为数值格式。
12345678
# Initialize OneHotEncoder within ColumnTransformercolumnTransformer = ColumnTransformer( [('encoder', OneHotEncoder(), string_cols)], remainder='passthrough') # Transform the dataX = columnTransformer.fit_transform(X)
编码后,数据集的形状从(205, 24)变为(205, 199),这表明分类变量已成功转换。
特征缩放
缩放确保所有特征对结果的贡献均等,尤其是对于基于距离的算法。
1234567
# Initialize StandardScalersc = StandardScaler(with_mean=False) # Fit and transform the training datasc.fit(X_train)X_train = sc.transform(X_train)X_test = sc.transform(X_test)
拆分数据集
我们将数据集划分为训练集和测试集,以评估模型的性能。
1234
# Split the dataX_train, X_test, y_train, y_test = train_test_split( X, Y, test_size=0.20, random_state=1)
- 训练集:164个样本
- 测试集:41个样本
构建和评估模型
我们将探索各种回归模型,并使用R²分数对每个模型进行评估。
1. 线性回归
一种直接的方法来预测连续值。
1234
model = LinearRegression()model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.0974
R²分数表明线性模型解释了大约9.74%的方差。
2. 多项式回归
通过引入多项式特征来捕捉非线性关系。
12345678
poly = PolynomialFeatures(degree=2)X_train_poly = poly.fit_transform(X_train)X_test_poly = poly.transform(X_test) model = LinearRegression()model.fit(X_train_poly, y_train)y_pred = model.predict(X_test_poly)print(r2_score(y_test, y_pred)) # Output: -0.4531
负的R²分数表明过拟合或选择了不合适的次数。
3. 决策树回归器
一种非线性模型,将数据拆分为子集。
1234
model = DecisionTreeRegressor(max_depth=4)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.8840
显著更高的R²分数,表明性能更佳。
4. 随机森林回归器
一种集成方法,构建多个决策树。
1234
model = RandomForestRegressor(n_estimators=25, random_state=10)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.9108
令人印象深刻的91.08% R²分数,展示了强大的性能。
5. AdaBoost回归器
提升技术,将弱学习器组合成强预测器。
1234
model = AdaBoostRegressor(random_state=0, n_estimators=100)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.8807
达到了88.07%的R²分数。
6. XGBoost回归器
梯度提升的可扩展和高效实现。
12345678910
model = xgb.XGBRegressor( n_estimators=100, reg_lambda=1, gamma=0, max_depth=3, learning_rate=0.05)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: 0.8947
提供了89.47%的R²分数。
7. 支持向量回归(SVR)
在高维空间中有效,SVR使用核技巧处理非线性数据。
1234
model = SVR()model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred)) # Output: -0.0271
负的R²分数表明性能不佳,可能需要参数调优。
结论
这个全面的回归模板提供了一个系统的方法来处理回归问题,从数据预处理到模型评估。虽然像线性回归这样简单的模型可能表现欠佳,但像随机森林和XGBoost这样的集成方法在预测汽车价格方面表现出色。根据您具体的数据集调整此模板,可以提高预测精度并简化您的机器学习项目。
访问回归模板
准备好实施这个回归工作流程了吗?在这里访问完整的Jupyter Notebook和CarPrice.csv数据集here。利用这些资源,轻松启动您的机器学习项目并实现准确的预测模型。
今天就提升您的回归分析技能,开启数据驱动决策的新机会!