特征提取(Feature Extraction)特征评估(五)

下面我们将通过一个具体的代码实例来演示特征评估的过程。我们使用经典的"泰坦尼克号生存预测"数据集作为示例,通过特征重要性分析、递归特征消除(RFE)、基于模型的方法(例如:随机森林的重要性评分和SHAP值)来评估特征。

1. 导入必要的库

首先,我们需要导入必要的Python库:

复制代码
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

import shap

2. 加载和预处理数据

我们将使用Pandas来加载数据,并进行必要的预处理,包括处理缺失值和编码类别型变量。

复制代码
# 加载数据集
url = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'
data = pd.read_csv(url)

# 简单的数据预处理
# 填补年龄中的缺失值
data['Age'].fillna(data['Age'].median(), inplace=True)

# 填补登船港口中的缺失值
data['Embarked'].fillna(data['Embarked'].mode()[0], inplace=True)

# 删除不必要的列
data.drop(['Cabin', 'Ticket', 'Name'], axis=1, inplace=True)

# 显示数据集的前几行
print(data.head())

3. 特征和目标变量

我们将"Survived"列作为目标变量,其他列作为特征。

复制代码
# 定义特征和目标变量
X = data.drop('Survived', axis=1)
y = data['Survived']

4. 特征编码和标准化

我们使用ColumnTransformerPipeline来处理数值型和类别型特征。

复制代码
# 数值型和类别型特征
numeric_features = ['Age', 'Fare', 'SibSp', 'Parch']
categorical_features = ['Pclass', 'Sex', 'Embarked']

# 创建预处理器:数值特征标准化,类别特征One-Hot编码
preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), numeric_features),
        ('cat', OneHotEncoder(), categorical_features)])

# 构建预处理和模型的Pipeline
model = Pipeline(steps=[('preprocessor', preprocessor),
                        ('classifier', RandomForestClassifier(random_state=42))])

5. 特征重要性分析

首先,我们使用随机森林来评估特征的重要性。

复制代码
# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
model.fit(X_train, y_train)

# 提取特征名(包括One-Hot编码后的)
feature_names = numeric_features + list(model.named_steps['preprocessor'].transformers_[1][1].get_feature_names_out(categorical_features))

# 获取特征重要性
importances = model.named_steps['classifier'].feature_importances_

# 创建特征重要性DataFrame
feature_importances = pd.DataFrame({'Feature': feature_names, 'Importance': importances})
feature_importances = feature_importances.sort_values(by='Importance', ascending=False)

# 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=feature_importances)
plt.title('Feature Importance')
plt.show()

6. 递归特征消除(RFE)

我们将使用RFE来评估和选择最重要的特征。

复制代码
# 使用逻辑回归作为基模型进行RFE
rfe_model = RFE(estimator=LogisticRegression(), n_features_to_select=5, step=1)
rfe_model = Pipeline(steps=[('preprocessor', preprocessor),
                            ('selector', rfe_model)])

# 训练RFE模型
rfe_model.fit(X_train, y_train)

# 获取选择的特征
selected_features = np.array(feature_names)[rfe_model.named_steps['selector'].support_]

# 打印选择的特征
print("Selected Features by RFE:")
print(selected_features)

7. 使用SHAP值评估特征

SHAP值可以帮助我们理解每个特征如何影响模型的预测。

复制代码
# 创建SHAP解释器
explainer = shap.TreeExplainer(model.named_steps['classifier'])

# 对测试集进行预测
X_test_preprocessed = model.named_steps['preprocessor'].transform(X_test)

# 计算SHAP值
shap_values = explainer.shap_values(X_test_preprocessed)

# 可视化SHAP值
shap.summary_plot(shap_values[1], X_test_preprocessed, feature_names=feature_names)

8. 模型评估

最后,我们评估模型在测试集上的表现。

复制代码
# 在测试集上进行预测
y_pred = model.predict(X_test)

# 打印分类报告
print("Classification Report:")
print(classification_report(y_test, y_pred))

# 显示混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')
plt.title('Confusion Matrix')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.show()
相关推荐
格林威15 分钟前
偏振相机是否属于不同光谱相机的范围内
图像处理·人工智能·数码相机·计算机视觉·视觉检测·工业相机
A-大程序员24 分钟前
【pytorch】合并与分割
人工智能·pytorch·深度学习
AI新兵1 小时前
AI大事记12:Transformer 架构——重塑 NLP 的革命性技术(上)
人工智能·自然语言处理·transformer
Q26433650231 小时前
【有源码】基于Hadoop生态的大数据共享单车数据分析与可视化平台-基于Python与大数据的共享单车多维度数据分析可视化系统
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
Dongsheng_20192 小时前
【汽车篇】AI深度学习在汽车零部件外观检测——刹车片中的应用
人工智能·汽车
LONGZETECH2 小时前
【龙泽科技】汽车转向悬架与制动安全系统技术1+X仿真教学软件(1.2.3 -初级)
人工智能·科技·汽车·汽车仿真教学软件·汽车教学软件
JAVA学习通2 小时前
PostgreSQL 的 hstore、arrays 数据类型
人工智能·自然语言处理
AKAMAI3 小时前
云成本困境:开支激增正阻碍欧洲AI创新
人工智能·云原生·云计算
大模型真好玩3 小时前
LangGraph实战项目:从零手搓DeepResearch(一)——DeepResearch应用体系详细介绍
人工智能·python·mcp
IT古董3 小时前
【第五章:计算机视觉-项目实战之生成式算法实战:扩散模型】3.生成式算法实战:扩散模型-(4)在新数据集上微调现有扩散模型
人工智能