机器学习 特征选择

本文介绍了单变量特征选择的重要性和方法,包括考虑的因素如模型简单性、计算效率、适用性和特征评估指标。列举了线性回归、决策树、SVM、Lasso回归和随机森林等常用模型,并通过实例演示了如何使用这些模型进行特征选择以及在回归问题中使用MSE进行评估。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过滤

单变量特征选择的目的是评估每个特征对模型预测能力的贡献。在选择用于单变量特征选择的模型时,应考虑以下因素:

  1. 模型的简单性:单变量特征选择通常用于初步筛选特征,因此选择的模型应该简单易懂,便于解释。线性回归模型是最常见的选择,因为它的参数可以直接解释为特征对目标变量的影响。

  2. 计算效率:由于需要对每个特征单独训练模型,因此选择的模型应该具有较高的计算效率,以便在有限的时间和资源内处理大量特征。

  3. 模型的适用性:选择的模型应该适用于数据的分布和问题类型。例如,如果数据是非线性的,可以考虑使用决策树或支持向量机等模型。

  4. 特征的评估指标:选择的模型应该能够提供明确的评估指标,如均方误差(MSE)或R-squared,以便比较不同特征的性能。

  5. 特征间的独立性:如果特征之间存在多重共线性,可能需要使用一些能够处理特征间关系的模型,如带有正则化的线性回归模型(Lasso或Ridge回归)。

基于上述考虑,以下是几种常用的模型,适用于单变量特征选择:

  • 线性回归:适用于线性关系明显的数据,简单且易于解释。可以通过计算每个特征的系数来评估其重要性。

  • 决策树:可以处理非线性关系,通过观察特征在树中的位置和重要性分数来评估特征的重要性。

  • 支持向量机(SVM):适用于高维空间的数据,通过评估特征在支持向量中的权重来确定特征的重要性。

  • Lasso回归:通过L1正则化,可以将不重要的特征的系数压缩至零,从而实现特征选择。

  • 随机森林:通过构建多个决策树并评估特征在所有树中的平均重要性,可以确定特征的重要性。

在选择模型时,还应考虑数据的特点和问题的具体需求。例如,如果数据集非常大,可能需要选择能够高效处理大数据集的模型。如果目标是解释模型的预测,可能更倾向于选择线性模型。最终,单变量特征选择的目的是为了找到最有影响力的特征,提高模型的预测性能和解释性。

特征选择ROC AUC分类(单变量特征选择)

导入需要的包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score,roc_auc_score
from sklearn.feature_selection import VarianceThreshold

加载数据

data = pd.read_csv('',nrows=2000)
data.head()
X = data.drop(['TARGEY'],axis=1)
y = data['TARGEY']
X.shape,y.shape
x_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0,stratify=y)

删除常量,准常量,重复的特征

#删除常量,准常量,重复的特征
constant_filter = VarianceThreshold(threshold=0.01)
constant_filter.fit(x_train)
x_train_filter = constant_filter.transform(x_train)
x_test_filter = constant_filter.transform(x_test)
print(x_train_filter.shape,x_test_filter.shape)

#删除重复的特征
x_train_T = x_train_filter.T
x_test_T = x_test_filter.T
x_train_T = pd.DataFrame(x_train_T)
x_test_T = pd.DataFrame(x_test_T)
print(x_train_T.duplicated().sum())
duplicated_features = x_train_T.duplicated()
print(duplicated_features)
features_to_keep = [not index for index in duplicated_features]
x_train_unique = x_train_T[features_to_keep].T
x_test_unique = x_test_T[features_to_keep].T
print(x_train_unique.shape,x_train.shape)

计算ROC_AUC分数

#计算ROC_AUC分数
roc_auc = []
for feature in x_train_unique.columns:
    clf = RandomForestClassifier(n_estimators=100,random_state=0)
    clf.fit(x_train_unique[feature].to_frame,y_train)
    y_pred = clf.predict(x_test_unique[feature].to_frame)
    roc_auc.append(roc_auc_score(y_test,y_pred))

print(roc_auc)
roc_value = pd.Series(roc_auc)
roc_value.index = x_train_unique.columns
roc_value.sort_values(ascending= False,inplace=True)
print(roc_value)
#二份类问题中,如果roc_value小于0.5,则不能提供信息预测输出
roc_value.plot.bar()
sel = roc_value[roc_value>0.5]
print(sel)
x_train_roc = x_train_unique[sel.index]
x_test_roc = x_test_unique[sel.index]

建立模型和对比

#建立模型和对比
def run_randomForest(x_train,x_test,y_train,y_test):
    clf = RandomForestClassifier(n_estimators=100, random_state=0)
    clf.fit(x_train
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值