网站首页 > 技术文章 正文
特征选择是机器学习建模过程中至关重要的步骤,直接决定了模型效果的上限。优秀的特征组合甚至比选择合适的算法更为重要。合理的特征选择不仅能够提升模型的性能,还具备以下优势:
- 提高模型性能并降低复杂性:有效减少维度,避免维数爆炸问题。
- 减少训练时间:减少不必要的特征会让模型训练速度更快。
- 降低过拟合风险:去除无信息或冗余特征有助于模型泛化能力的提升。
- 简化部署流程和实时数据处理:更精简的模型可让数据管道更加高效,这是一个常常被忽视的优势。
在实际工作中,特征选择通常是一个耗时且复杂的过程,需要结合多种技术手段进行筛选。而对于有经验的开发者来说,自动化特征选择工具能够大幅提升效率。
AutoFeatSelect 介绍
为了简化特征选择流程,本次介绍一款小众但实用的自动化特征选择工具——AutoFeatSelect。
它是一个 Python 库,专为自动化和加速特征选择过程而设计,尤其适合处理复杂的特征工程任务。
主要特点:
- 自动化特征选择:支持多种方法进行自动特征选择,包括 LightGBM 重要性、XGBoost 重要性、RFECV(递归特征消除)等。
- 特征重要性分析:能够分别计算并可视化不同模型算法下的特征重要性得分和排名。
- 相关性分析:执行特征间的相关性分析,自动识别并删除高度相关的特征,减少冗余。
主要功能和特性
AutoFeatSelect 提供了广泛的功能,旨在为特征选择过程提供全方位支持,包括:
- 数值型和分类型特征的相关性分析。
- 基于 LightGBM、XGBoost 和随机森林的特征重要性分析。
- LassoCV 系数分析。
- permutation(排列)重要性分析。
- 通过交叉验证进行递归特征消除(RFECV)。
- 使用 Boruta 算法进行特征筛选。
AutoFeatSelect 不仅集成了常见的特征选择方法,还能够自动执行繁琐的筛选步骤,如相关性计算、冗余特征删除等,极大简化了特征工程的流程。
安装方式
可以通过以下命令快速安装 AutoFeatSelect:
pip install autofeatselect
模拟案例:房价预测
在这个模拟案例中,我们将生成一个房价预测的数据集,并基于这些数据演示如何进行特征选择。我们将使用AutoFeatSelect库来简化特征选择过程,同时展示如何通过不同模型计算特征重要性。
步骤 1:生成模拟数据
首先,使用numpy和pandas生成与房价预测相关的模拟数据。假设数据集包含一些与房价相关的特征,例如房屋面积、卧室数量、地段评分等。
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
# 设置随机种子以保证结果可重复
np.random.seed(42)
# 模拟数据集大小
n_samples = 1000
# 创建特征
data = {
'house_id': np.arange(n_samples),
'square_footage': np.random.normal(250, 50, n_samples), # 房屋面积(平方米)
'num_bedrooms': np.random.randint(1, 6, n_samples), # 卧室数量
'num_bathrooms': np.random.randint(1, 4, n_samples), # 卫生间数量
'location_quality': np.random.choice(['low', 'medium', 'high'], n_samples), # 地段评分
'year_built': np.random.randint(2000, 2024, n_samples), # 建造年份
'monthly_income': np.random.normal(50000, 3000, n_samples), # 家庭月收入
'house_price': np.random.normal(300, 100, n_samples) # 房价(万元)
}
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 检查数据
print(df.head())
# 将特征划分为数值型和分类型特征
response = 'house_price' # 目标变量,房价
cat_feats = ['location_quality']
num_feats = [c for c in df.columns if c not in cat_feats + ['house_id', response]]
# 切分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[num_feats + cat_feats],
df[response],
test_size=0.2,
random_state=42)
print(f"训练集大小: {X_train.shape}")
print(f"测试集大小: {X_test.shape}")
在这里,我们创建了一个模拟房价预测的数据集,其中包含以下特征:
- square_footage:房屋面积
- num_bedrooms:卧室数量
- num_bathrooms:卫生间数量
- location_quality:地段评分
- year_built:建造年份
- monthly_income:家庭月收入
- house_price:目标变量,房价
输出:
步骤 2:相关性分析
接下来,我们可以使用AutoFeatSelect中的CorrelationCalculator来分析数值特征之间的相关性,删除相关性过高的特征。
from autofeatselect import CorrelationCalculator
# 计算数值型特征的相关性
corr_df_num, num_remove_list = CorrelationCalculator.numeric_correlations(X_train,
features=num_feats,
static_features=None,
threshold=0.9)
# 输出相关性较高的特征
print(f"需删除的数值特征: {num_remove_list}")
此步骤会根据设置的阈值(0.9)计算特征间的相关性,并删除那些高度相关的特征,以避免冗余信息影响模型表现。
步骤 3:特征重要性评估
我们接下来使用LightGBM模型来评估每个特征的重要性,并输出排名。AutoFeatSelect库可以简化这一过程。
from autofeatselect import FeatureSelector
# 创建特征选择器
feat_selector = FeatureSelector(modeling_type='regression',
X_train=X_train,
y_train=y_train,
X_test=X_test,
y_test=y_test,
numeric_columns=num_feats,
categorical_columns=cat_feats,
seed=24)
# 计算LightGBM的特征重要性
lgbm_importance_df = feat_selector.lgbm_importance(hyperparam_dict=None,
objective='regression',
return_plot=True)
# 输出重要性排名
print(lgbm_importance_df.head())
输出结果将显示房价预测中最重要的特征,例如:
feature importance
0 square_footage 9.368573e+06
1 monthly_income 6.884146e+06
2 year_built 3.036107e+06
3 num_bedrooms 1.506692e+06
4 location_quality 1.448739e+06
在这个结果中,square_footage(房屋面积)是最重要的特征,monthly_income(地段评分)紧随其后,year_built(卧室数量)也具有较高的重要性。
步骤 4:递归特征消除(RFE)
为了进一步优化特征集,我们可以使用递归特征消除(RFE),通过每次移除最不重要的特征,找到最佳的特征组合。
# 使用递归特征消除进行特征选择
rfecv_importance_df = feat_selector.rfecv_importance(lgbm_hyperparams=None,
rfecv_hyperparams=None,
return_plot=True)
# 输出RFE选择的重要性排名
print(rfecv_importance_df.head())
通过RFE,模型将自动确定最优特征集,帮助我们进一步减少无用特征。
feature importance
0 square_footage 1
1 monthly_income 2
2 year_built 3
3 num_bedrooms 4
4 location_quality 5
步骤 5:全自动特征选择
如果希望整个特征选择过程全自动化,可以使用AutoFeatSelect库中的全自动特征选择方法。
from autofeatselect import AutoFeatureSelect
# 创建AutoFeatureSelect对象
feat_selector = AutoFeatureSelect(modeling_type='regression',
X_train=X_train,
y_train=y_train,
X_test=X_test,
y_test=y_test,
numeric_columns=num_feats,
categorical_columns=cat_feats,
seed=24)
# 执行全自动特征选择
final_importance_df = feat_selector.apply_feature_selection(selection_methods=['lgbm', 'xgb', 'rf', 'rfecv'],
lgbm_hyperparams=None,
xgb_hyperparams=None,
rf_hyperparams=None,
rfecv_hyperparams=None)
# 输出最终的重要性排名
print(final_importance_df.head())
输出:
简要说明:
- square_footage(建筑面积)在所有算法中都被认为是最重要的特征,在所有模型中得分最高。
- monthly_income(月收入)也是所有模型中排名靠前的特征,具有很强的预测力。
- year_built(建造年份)和num_bedrooms(卧室数量)重要性相对较低,但仍然对预测有影响。
- location_quality(位置质量)在XGBoost模型中的得分较低,但在随机森林模型中的得分较高,说明不同模型对该特征的评价不同。
总体来说,这些特征在不同模型中的表现稍有不同,但建筑面积和月收入始终是关键的预测特征。
总结
通过这个模拟的房价预测案例,我们使用了AutoFeatSelect库对特征进行了分析和筛选。
最终的结果会帮助我们确定哪些特征对房价预测最为重要,例如房屋面积、地段评分、卧室数量等。
这个过程展示了如何简化特征选择,确保模型的预测准确性并减少不必要的特征。
猜你喜欢
- 2024-10-11 sklearn分类模型汇总 sklearn svm分类
- 2024-10-11 基于决策树算法完成鸢尾花的分类并使用scikit-learn进行交叉验证
- 2024-10-11 「程序员」如何5分钟掌握,pandas数据累计与分组?
- 2024-10-11 Python 机器学习 特征降维 python tsne降维
- 2024-10-11 mooc机器学习第七天-分类支持向量机svm.svc
- 2024-10-11 模型选择之交叉验证(简单交叉验证、S折交叉验证和留一交叉验证)
- 2024-10-11 I2C七宗罪之第二罪 七宗罪二哥
- 2024-10-11 PCA 主成分分析 PCA主成分分析实现鸢尾花数据集分类-MATLAB代码
- 2024-10-11 Python实现机器学习算法——随机森林
- 2024-10-11 使用Python理解基本的机器学习-感知器和人工神经元
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)