如何优化汽车价格预测模型的RMSE指标?
如何优化汽车价格预测模型的RMSE指标?
- 基于行驶里程估算补全缺失的condition字段值
new_condition_df = df[df['condition'].map(condition_mapping) == 2] top_1000_highest_mileage = new_condition_df.nlargest(1000, 'mileage')['mileage'] average_top_1000_highest_mileage = top_1000_highest_mileage.mean() # 筛选condition字段为空或未指定的行 null_condition_df = df[df['condition'].isnull() | (df['condition'] == '')] # 根据行驶里程更新condition字段 null_condition_df.loc[null_condition_df['mileage'] >= average_top_1000_highest_mileage, 'condition'] = 'CONDITION_USED' null_condition_df.loc[null_condition_df['mileage'] < average_top_1000_highest_mileage, 'condition'] = 'CONDITION_NEW' # 将修改后的行更新回原DataFrame df.update(null_condition_df)
- 处理缺失值:删除部分含空值的行,填充特定字段
columns_with_null = ['color', 'vat_reclaimable', 'cubic_capacity', 'seller_country', 'feature'] df.dropna(subset=columns_with_null, inplace=True) df['air_conditioning'].fillna('AIRCONDITIONING_NONE', inplace=True) df['parking_camera'].fillna('PARKINGCAMERA_NONE', inplace=True) df['parking_sensors'].fillna('PARKINGSENZOR_NONE', inplace=True)
- 针对缺失值较多的drive字段(记录车辆四驱/两驱信息),通过建模估算补全
features = ['mileage', 'cubic_capacity', 'power', 'year'] + list(df.columns[df.columns.str.startswith('car_style_')]) + list(df.columns[df.columns.str.startswith('transmission_')]) + list(df.columns[df.columns.str.startswith('fuel_type_')]) train_data = df.dropna(subset=['drive']) # 删除drive字段含缺失值的行 X_train, X_test, y_train, y_test = train_test_split(train_data[features], pd.get_dummies(train_data['drive']), test_size=0.2, random_state=42) model = LinearRegression() model.fit(X_train, y_train) missing_data = df[df['drive'].isnull()] X_missing = missing_data[features] predicted_values = model.predict(X_missing) df_imputed = df.copy() predicted_df = pd.DataFrame(predicted_values, columns=y_train.columns, index=missing_data.index) df_imputed.loc[df_imputed['drive'].isnull(), y_train.columns] = predicted_df.values predicted_df_encoded = pd.DataFrame(predicted_values, columns=y_train.columns, index=missing_data.index) predicted_df_encoded = (predicted_df_encoded > 0.5).astype(int) for column in predicted_df_encoded.columns: df_imputed[column] = 0 # 添加全为0的字段 df_imputed.loc[predicted_df_encoded.index, column] = predicted_df_encoded[column].values unique_values_imputed_encoded = df_imputed['drive'].unique() df = df_imputed df.drop(columns=['drive'], inplace=True)
- 对feature字段进行多标签编码处理
from sklearn.preprocessing import MultiLabelBinarizer mlb = MultiLabelBinarizer() df = df.join(pd.DataFrame(mlb.fit_transform(df['feature']),columns=mlb.classes_)) df.fillna(0, inplace=True) df = df.drop(columns=['feature'])
- 模型训练过程
df_encoded = pd.get_dummies(df) X_train, X_test, y_train, y_test = train_test_split(df_encoded.drop(columns=['price_with_vat_czk']), df_encoded['price_with_vat_czk'], test_size=0.25, random_state=42) model = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)
完整代码及数据集可参考对应实现,当前模型的RMSE约为64000。
内容的提问来源于stack exchange,提问作者Aaron7
相关产品推荐
相关产品推荐

