夏令营第三期-机器学习笔记
概要
用户新增预测挑战赛
为了能够提升自己的分数,我选择更改模型和更改参数,但是最终的分数都不如一开始跑的分数高,接下来我就认真分析一下两次的技术分析。
技术细节
第一次测试:
函数提取: 将特定的功能块封装成函数,以提高代码的可读性和复用性。比如,可以将特征工程的部分封装成函数。
def preprocess_data(data):
# 特征工程的代码块
return processed_data
train_data = preprocess_data(train_data)
test_data = preprocess_data(test_data)
特征处理优化: 在进行 One-Hot 编码时,可以使用 pandas 的 get_dummies 函数来进行编码,这可以减少一些循环操作。
train_udmap_df = pd.get_dummies(train_data['udmap'].apply(eval).apply(pd.Series), prefix='key')
test_udmap_df = pd.get_dummies(test_data['udmap'].apply(eval).apply(pd.Series), prefix='key')
重复代码消除: 在处理测试集中的 ‘eid_freq’ 和 ‘eid_mean’ 特征时,应该使用测试集的信息,而不是将训练集的信息再次映射到测试集。
test_data['eid_freq'] = test_data['eid'].map(test_data['eid'].value_counts())
test_data['eid_mean'] = test_data['eid'].map(train_data.groupby('eid')['target'].mean())
代码注释: 为代码添加详细的注释,解释每个步骤的目的和作用,以提高代码的可读性和维护性。
模型评估: 在训练模型之前,最好将数据集分成训练集和验证集,以便在训练过程中进行模型评估和调参,避免过拟合。
模型调参: 对于决策树模型,可以考虑调整一些超参数,如树的最大深度、最小样本分割数等,以获取更好的模型性能。
异常处理: 当使用 eval 函数解析字符串为字典时,可能会遇到一些异常情况。可以考虑添加适当的异常处理机制,以确保代码的健壮性。
文件路径处理: 在读取和保存文件时,最好使用绝对路径或者相对路径,以避免不同环境下的路径问题。
可选的预处理步骤: 根据具体问题,可能还需要其他的特征工程和预处理步骤,比如缺失值处理、特征缩放等。根据数据的特点进行相应的处理。
根据以上代码,更改后,改出来后的代码获得的分数是
第二次测试:
模型复杂度提升: 决策树模型的复杂度与其深度相关。可以尝试增加决策树的深度,以便模型可以更好地拟合数据。不过,需要注意过拟合的问题,因此可能需要进行交叉验证来选择合适的深度。
clf = DecisionTreeClassifier(max_depth=10) # 通过增加 max_depth 参数来增加决策树深度
集成算法: 考虑使用集成算法,如随机森林(Random Forest)或梯度提升(Gradient Boosting)。这些算法可以结合多个弱学习器来构建更强大的模型,通常能够提升模型性能。
特征工程: 尝试更多的特征工程,可能会带来更好的模型性能。探索不同的特征提取、变换和选择方法,以及更深入的数据分析,可能会发现一些对于模型预测更有意义的特征。
超参数调优: 对于决策树模型,有一些超参数可以调整,例如节点分割的最小样本数(min_samples_split)、叶节点的最小样本数(min_samples_leaf)等。使用交叉验证来选择合适的超参数,以达到更好的性能。
使用更大的数据集: 如果有更多的数据可用,可以考虑使用更大的训练数据集,这通常可以提高模型的泛化能力。
模型集成: 可以考虑使用多个不同类型的模型进行集成,例如随机森林、支持向量机、神经网络等。将不同模型的预测结果进行组合,通常可以提高预测性能。
根据上面信息的更改,获得的分数是:
小结
后续会继续优化这段代码,从而获得更高的成绩