Pandas怎样找出最影响结果的哪些特征--SelectKBest

Pandas怎样找出最影响结果的特征

当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。来简单看下SelectKBest的用法:

SelectKBest

模型原型

class sklearn.feature_selection.SelectKBest(score_func=,k=10)

参数

score_func: 给出统计指标
sklearn.feature_selection.f_regression: 基于线性回归分析来计算统计指标。适用于回归问题
sklearn.feature_selection.chi2: 计算卡方统计量,适用于分类问题
sklearn.feature_selection.f_classif: 根据方差分析(ANOVA)的原理,以F-分布为依据,利用平方和与自由度所计算的祖居与组内均方估计出F值,适用于分类问题
k: 指定要保留最佳的几个特征

属性

scores_
pvalues_: 给出所有特征得分的p值

方法

fit(X,[,y]): 从样本数据中学习统计指标得分
transform(X): 执行特征选择
fit_transform(X[,y])
get_support([indices])
True: 返回被选出的特征的下标
False: 返回一个布尔值组成的数组,该数组指示哪些特征被选中
inverse_transform(X): 根据选出来的特征还原原始数据,但对于被删除的属性值全部用0代替

实例演示:分析泰坦尼克沉船事件中,最影响生死的因素有哪些?

1、导入相关的包

import numpy as np
import pandas as pd

# 最影响结果的K个特征
from sklearn.feature_selection import SelectKBest

# 卡方检验,作为SelectKBest的参数
from sklearn.feature_selection import chi2

2、导入泰坦尼克数据

df = pd.read_csv('./datas/titanic/titanic_train.csv')
# 筛选出与结果有关的特征
df = df[['PassengerId', 'Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']].copy()

3、数据清理与转换

3.1 查看是否有空列值
df.info()

检测空值

3.2 通过上述查看Age有空值,首先补全空值
df['Age'] = df['Age'].fillna(df['Age'].median()) # 填充空值,常用方法之一,平均值填充
3.3 机器学习是不能处理字符串,需要对Sex做数值转换
# 查看Sex特征唯一值
df.Sex.unique()
# 数值转换
df.loc[df['Sex'] == 'male', 'Sex'] = 0
df.loc[df['Sex'] == 'female', 'Sex'] = 1
3.4 对Embarked进行填充空值,并数值转换
df.Embarked.unique()

df['Embarked'] = df['Embarked'].fillna(0)

df.loc[df['Embarked'] == 'S', 'Embarked'] = 1
df.loc[df['Embarked'] == 'C', 'Embarked'] = 2
df.loc[df['Embarked'] == 'Q', 'Embarked'] = 3

4、将特征列与结果列拆分

y = df.pop('Survived')
X = df

特征列与结果列拆分

5、使用卡方检验选择topK的特征

best_features = SelectKBest(score_func=chi2, k=len(X.columns))
fit = best_features.fit(X, y)

6、对特征重要性进行排序

df_scores = pd.DataFrame(fit.scores_)
df_columns = pd.DataFrame(X.columns)

# 合并
df_feature_scores = pd.concat([df_columns, df_scores], axis=1)
# 定义列名
df_feature_scores.columns = ['Feature', 'Score']
# 按照score排序
df_feature_scores.sort_values(by='Score', ascending=False)

得分排序
分析得分结果,可以看出有钱真好,有钱活下来的概率大太多了,其他都不重要~~

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值