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)
分析得分结果,可以看出有钱真好,有钱活下来的概率大太多了,其他都不重要~~