工业蒸汽预测-06特征优化
赛题特征优化
1 导入数据
1 |
|
2 定义特征构造方法
定义特征构造方法
1 |
|
代码解释
epsilon
经常用作一个非常小的正数,用于避免在计算中出现除以零的情况。
该代码中的 epsilon
被用作分母在除法运算中的修正因子。当分母接近零时,加上一个非常小的正数 epsilon
可以确保避免出现除以零的错误,同时保持数值计算的准确性。
epsilon
被定义为 1e-5
,即 0.00001。在执行诸如 div
函数的除法运算时,分母会加上 epsilon
,从而避免除以零的情况。这样可以确保在进行组交叉特征计算时,不会出现除以零的错误,并保持计算的稳定性和准确性。
3 定义特征构造函数
1 |
|
代码解释
函数的作用是在给定的数据集 train_data
和 test_data
上生成自动特征。
拷贝
train_data
和test_data
数据集。使用嵌套的循环
for col_i in col_list:
和for col_j in col_list:
遍历col_list
中的每一对列名col_i
和col_j
,例如[V1 V0 ]
,[V1 V1]
。在内部的循环中,遍历
func_dict
中的每个函数,这些函数以函数名func_name
和对应的函数对象func
表示。对于每个数据集(
train_data
和test_data
),将col_i
和col_j
列的值作为参数传递给当前迭代的函数func
,并计算得到新的特征值func_features
。创建一个新的特征列名
col_func_features
,使用-
连接col_i
、func_name
和col_j
。将计算得到的新特征值
func_features
存储在对应的特征列col_func_features
中。重复步骤 4-6,直到遍历完所有的列和函数组合。
最后,返回生成新特征后的
train_data
和test_data
。
对训练集和测试集数据进行特征构造
1 |
|
D:\Development\anaconda3\envs\ml\lib\site-packages\ipykernel_launcher.py:10: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
# Remove the CWD from sys.path while we load stuff.
代码解释
警告提示数据集可能存在严重的碎片化问题,即内存中的 DataFrame 对象非常分散。这通常是由于多次调用 DataFrame.insert 方法导致的,而 insert 方法的性能较差。
4 特征降维处理
1 |
|
1 |
|
5 模型训练和评估
使用lightgbm模型对新构造的特征进行模型训练和评估。注意运行时间长 二十多分钟。
1 |
|
将代码运行得到的5折交叉验证的各折叠训练MSE、预测MSE及平均MSE,与上一节中未做特征优化的结果对比,可以发现MSE得到进一步降低。