美文网首页程序员
基于sklearn的特征筛选

基于sklearn的特征筛选

作者: 月见樽 | 来源:发表于2018-01-20 23:25 被阅读0次

理论

特征筛选的作用

样本中的有些特征是所谓的“优秀特征”,使用这些特征可以显著的提高泛化能力。而有些特征在样本类别区分上并不明显,在训练中引入这些特征会导致算力的浪费;另外有些特征对样本的分类有反作用,引入这些特征反而会导致泛化能力下降

特征筛选

与PCA(主成分分析)不同,特征筛选不修改特征值,而是寻找对模型性能提升较大的尽量少的特征

代码实现

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

引入数据集——Titanic数据集

titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
titan.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1313 entries, 0 to 1312
Data columns (total 11 columns):
row.names    1313 non-null int64
pclass       1313 non-null object
survived     1313 non-null int64
name         1313 non-null object
age          633 non-null float64
embarked     821 non-null object
home.dest    754 non-null object
room         77 non-null object
ticket       69 non-null object
boat         347 non-null object
sex          1313 non-null object
dtypes: float64(1), int64(2), object(8)
memory usage: 112.9+ KB

数据预处理

分离数据与标签

x_source = titan.drop(["row.names","name","survived"],axis=1)
x_source.info()
y_source = titan["survived"]
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1313 entries, 0 to 1312
Data columns (total 8 columns):
pclass       1313 non-null object
age          633 non-null float64
embarked     821 non-null object
home.dest    754 non-null object
room         77 non-null object
ticket       69 non-null object
boat         347 non-null object
sex          1313 non-null object
dtypes: float64(1), object(7)
memory usage: 82.1+ KB

缺失数据填充

x_source['age'].fillna(x_source['age'].mean(),inplace=True)
x_source.fillna('UNKNOWN',inplace=True)
x_source.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1313 entries, 0 to 1312
Data columns (total 8 columns):
pclass       1313 non-null object
age          1313 non-null float64
embarked     1313 non-null object
home.dest    1313 non-null object
room         1313 non-null object
ticket       1313 non-null object
boat         1313 non-null object
sex          1313 non-null object
dtypes: float64(1), object(7)
memory usage: 82.1+ KB

数据分割

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x_source,y_source,random_state=33,test_size=0.25)
x_train.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 984 entries, 1086 to 1044
Data columns (total 8 columns):
pclass       984 non-null object
age          984 non-null float64
embarked     984 non-null object
home.dest    984 non-null object
room         984 non-null object
ticket       984 non-null object
boat         984 non-null object
sex          984 non-null object
dtypes: float64(1), object(7)
memory usage: 69.2+ KB

特征向量化

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
x_train = vec.fit_transform(x_train.to_dict(orient='record'))
x_test = vec.transform(x_test.to_dict(orient='record'))
len(vec.feature_names_)
474

模型训练

from sklearn.tree import DecisionTreeClassifier

基本决策树模型

dt = DecisionTreeClassifier(criterion='entropy')
dt.fit(x_train,y_train)
dt.score(x_test,y_test)
0.82066869300911849

带特征筛选的决策树

from sklearn import feature_selection
fs = feature_selection.SelectPercentile(feature_selection.chi2,percentile=7)
x_train_fs = fs.fit_transform(x_train,y_train)
x_test_fs = fs.transform(x_test)
print(x_train.shape,x_train_fs.shape)
(984, 474) (984, 33)
dt.fit(x_train_fs,y_train)
dt.score(x_test_fs,y_test)
0.85410334346504557

相关文章

  • 基于sklearn的特征筛选

    理论 特征筛选的作用 样本中的有些特征是所谓的“优秀特征”,使用这些特征可以显著的提高泛化能力。而有些特征在样本类...

  • 基于xgboost的特征筛选

    在大数据挖掘比赛中,除了模型的选择要到位,其特征工程的重要性也不言而喻,以至于大家经常会调侃,只要你的特征工程做得...

  • 基于sklearn的文本特征抽取

    理论 机器学习的样本一般都是特征向量,但是除了特征向量以外经常有非特征化的数据,最常见的就是文本 结构化数据 当某...

  • sklearn学习 — 特征抽取

    特征抽取 sklearn库提供了特征抽取模块 sklearn.feature_extraction 对数据进行特征...

  • 使用sklearn做单机特征工程

    使用sklearn做单机特征工程 | 转载 使用sklearn做单机特征工程 目录1 特征工程是什么?2 数据预处...

  • 2019-01-07特征工程文章

    使用sklearn优雅地进行数据挖掘 使用sklearn做单机特征工程 特征工程到底是什么? Kaggle入门,看...

  • Python学习笔记-3群18组-杜杜狼-2017.8.8

    Lesson 12 sklearn sklearn全名Scikit-learn, 是基于Python的机器学习模块...

  • python PCA

    sklearn.decomposition.PCA参数介绍 接下来我们主要基于sklearn.decomposit...

  • 2018-04-03-机器学习相关

    No.1 特征工程 (1)使用sklearn做单机特征工程 - jasonfreak - 博客园 (2)特征工程实...

  • FM因子分解机的原理介绍及实现

    一.FM原理 大家可能用过sklearn中的这个多项式特征处理函数:sklearn.preprocessing.P...

网友评论

    本文标题:基于sklearn的特征筛选

    本文链接:https://www.haomeiwen.com/subject/jjexaxtx.html