- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 入门
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 必备技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 局限性
- ML - 真实案例
- ML - 数据结构
- ML - 数学基础
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习 vs. 无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- ML中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- ML中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- ML中的聚类算法
- ML - 聚类算法
- ML - 基于质心的聚类
- ML - K均值聚类
- ML - K中心点聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN 聚类
- ML - OPTICS 聚类
- ML - HDBSCAN 聚类
- ML - BIRCH 聚类
- ML - 亲和传播
- ML - 基于分布的聚类
- ML - 凝聚层次聚类
- ML中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 向后消除法
- ML - 前向特征构造
- ML - 高相关性过滤器
- ML - 低方差过滤器
- ML - 缺失值比例
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q学习
- ML - REINFORCE 算法
- ML - SARSA 强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 使用 Python 的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动化工作流程
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC 曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori 算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精度和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 轮次
- ML - 感知器
- ML - 正则化
- ML - 过拟合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的货币化
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试题
- ML - 有用资源
- ML - 讨论
机器学习 - 特征选择
特征选择是机器学习中一个重要的步骤,它涉及选择可用特征的一个子集来提高模型的性能。以下是常用的一些特征选择技术:
过滤方法
此方法通过计算统计量(例如,相关性、互信息、卡方检验等)来评估每个特征的相关性,并根据其分数对特征进行排序。然后,将得分低的特征从模型中移除。
要在 Python 中实现过滤方法,可以使用 `sklearn.feature_selection` 模块中的 `SelectKBest` 或 `SelectPercentile` 函数。下面是一个实现特征选择的简短代码片段。
from sklearn.feature_selection import SelectPercentile, chi2 selector = SelectPercentile(chi2, percentile=10) X_new = selector.fit_transform(X, y)
包装方法
此方法通过添加或删除特征来评估模型的性能,并选择产生最佳性能的特征子集。这种方法计算成本很高,但比过滤方法更准确。
要在 Python 中实现包装方法,可以使用 `sklearn.feature_selection` 模块中的 `RFE`(递归特征消除)函数。下面是一个实现包装方法的简短代码片段。
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression estimator = LogisticRegression() selector = RFE(estimator, n_features_to_select=5) selector = selector.fit(X, y) X_new = selector.transform(X)
嵌入方法
此方法涉及将特征选择融入模型构建过程中本身。这可以使用诸如 Lasso 回归、Ridge 回归或决策树之类的技术来完成。这些方法为每个特征分配权重,权重低的特征将从模型中移除。
要在 Python 中实现嵌入方法,可以使用 `sklearn.linear_model` 模块中的 Lasso 或 Ridge 回归函数。下面是一个实现嵌入方法的简短代码片段:
from sklearn.linear_model import Lasso lasso = Lasso(alpha=0.1) lasso.fit(X, y) coef = pd.Series(lasso.coef_, index = X.columns) important_features = coef[coef != 0]
主成分分析 (PCA)
这是一种无监督学习方法,它涉及将原始特征转换为一组不相关的解释数据中最大方差的主成分。可以根据阈值选择主成分的数量,从而降低数据集的维数。
要在 Python 中实现 PCA,可以使用 `sklearn.decomposition` 模块中的 PCA 函数。例如,要减少特征数量,可以使用以下代码所示的 PCA:
from sklearn.decomposition import PCA pca = PCA(n_components=3) X_new = pca.fit_transform(X)
递归特征消除 (RFE)
此方法涉及递归地消除最不重要的特征,直到识别出最重要的特征子集。它使用基于模型的方法,计算成本可能很高,但在高维数据集中可以产生良好的结果。
要在 Python 中实现 RFE,可以使用 `sklearn.feature_selection` 模块中的 `RFECV`(带交叉验证的递归特征消除)函数。例如,以下是一个可以使用递归特征消除的简短代码片段:
from sklearn.feature_selection import RFECV from sklearn.tree import DecisionTreeClassifier estimator = DecisionTreeClassifier() selector = RFECV(estimator, step=1, cv=5) selector = selector.fit(X, y) X_new = selector.transform(X)
这些特征选择技术可以单独使用或组合使用以提高机器学习模型的性能。根据数据集的大小、特征的性质和所使用的模型类型选择合适的技术非常重要。
示例
在下面的示例中,我们将实现三种特征选择方法:使用卡方检验的单变量特征选择、带交叉验证的递归特征消除 (RFECV) 和主成分分析 (PCA)。
我们将使用包含在 scikit-learn 中的乳腺癌威斯康星州(诊断)数据集。该数据集包含 569 个样本和 30 个特征,任务是根据这些特征对肿瘤是恶性还是良性进行分类。
以下是将这些特征选择方法应用于乳腺癌威斯康星州(诊断)数据集的 Python 代码:
# Import necessary libraries and dataset import pandas as pd from sklearn.datasets import load_diabetes from sklearn.feature_selection import SelectKBest, chi2 from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # Load the dataset diabetes = pd.read_csv(r'C:\Users\Leekha\Desktop\diabetes.csv') # Split the dataset into features and target variable X = diabetes.drop('Outcome', axis=1) y = diabetes['Outcome'] # Apply univariate feature selection using the chi-square test selector = SelectKBest(chi2, k=4) X_new = selector.fit_transform(X, y) # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.3, random_state=42) # Fit a logistic regression model on the selected features clf = LogisticRegression() clf.fit(X_train, y_train) # Evaluate the model on the test set accuracy = clf.score(X_test, y_test) print("Accuracy using univariate feature selection: {:.2f}".format(accuracy)) # Recursive feature elimination with cross-validation (RFECV) estimator = LogisticRegression() selector = RFECV(estimator, step=1, cv=5) selector.fit(X, y) X_new = selector.transform(X) scores = cross_val_score(LogisticRegression(), X_new, y, cv=5) print("Accuracy using RFECV feature selection: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) # PCA implementation pca = PCA(n_components=5) X_new = pca.fit_transform(X) scores = cross_val_score(LogisticRegression(), X_new, y, cv=5) print("Accuracy using PCA feature selection: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
输出
执行此代码时,它将在终端上产生以下输出:
Accuracy using univariate feature selection: 0.74 Accuracy using RFECV feature selection: 0.77 (+/- 0.03) Accuracy using PCA feature selection: 0.75 (+/- 0.07)