对于Kaggle上的"House Prices: Advanced Regression Techniques"集,本人想通过随机森林来实现特征重要性的分析(哪个特征对于房屋售价影响最大),但出来的是79个大特征类别下的小特征。我想要的是这79个大特征对于房屋售价的最大的影响前十名。
12条回答 默认 最新
关注
在Kaggle上的"House Prices: Advanced Regression Techniques"比赛中,要分析79个大特征类别对房屋售价的影响程度,你可以通过随机森林模型得到特征的重要性排名。假设你已经使用了Python的scikit-learn库训练了一个随机森林回归模型,你可以使用
feature_importances_
属性来获取特征重要性。下面是一个简化的示例:from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import load_boston # 这里以Boston房价数据集为例,你需要替换为自己的数据加载方式 from sklearn.preprocessing import OneHotEncoder # 处理分类特征 from sklearn.compose import ColumnTransformer import pandas as pd # 加载数据并预处理(这里仅作示例,实际应使用你的数据集) data = load_boston() # 替换为你的数据加载代码 df = pd.DataFrame(data.data, columns=data.feature_names) target = data.target # 假设 df 已经包含了经过适当预处理(包括独热编码)后的数值和分类特征 # 对于分类特征,你需要使用OneHotEncoder或其他方式将其转化为数值特征 # 创建随机森林回归模型并训练 rf = RandomForestRegressor(n_estimators=100, random_state=42) rf.fit(df, target) # 获取特征重要性 feature_importances = rf.feature_importances_ # 将特征重要性与特征名对应起来(假设df.columns包含了所有特征名) sorted_importances = sorted(zip(map(lambda x: round(x, 4), feature_importances), df.columns), reverse=True) # 输出最重要的前10个特征及其重要性 for importance, feature_name in sorted_importances[:10]: print(f"{feature_name}: {importance}") # 如果你的特征已经被编码成了很多的小特征(比如独热编码后的特征),你可能需要将这些小特征归并到所属的大特征类别下,统计该类别总的重要性 # 这一步骤取决于你的特征工程是如何组织的,可能需要手动处理或编写额外的逻辑
注意,当你提到的“79个大特征类别”,如果是经过独热编码后产生的,则需要对这些编码后的特征进行归并,计算类别级别的总重要性。例如,如果'Foundation'是一个大特征类别,而经过独热编码后产生了多个小特征(如'Foundation_Partial','Foundation_Slab'等),则需要将这些小特征的重要性相加,得到'Foundation'这个大特征类别的总体重要性。在实际操作中,这一步可能需要手动进行,或者在编码阶段就考虑到这一点,提前组织好特征结构以便后续分析。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报