Python实现的特征提取操作示例


Posted in Python onDecember 03, 2018

本文实例讲述了Python实现的特征提取操作。分享给大家供大家参考,具体如下:

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 21 10:57:29 2017
@author: 飘的心
"""
#过滤式特征选择
#根据方差进行选择,方差越小,代表该属性识别能力很差,可以剔除
from sklearn.feature_selection import VarianceThreshold
x=[[100,1,2,3],
  [100,4,5,6],
  [100,7,8,9],
  [101,11,12,13]]
selector=VarianceThreshold(1) #方差阈值值,
selector.fit(x)
selector.variances_ #展现属性的方差
selector.transform(x)#进行特征选择
selector.get_support(True) #选择结果后,特征之前的索引
selector.inverse_transform(selector.transform(x)) #将特征选择后的结果还原成原始数据
                         #被剔除掉的数据,显示为0
#单变量特征选择
from sklearn.feature_selection import SelectKBest,f_classif
x=[[1,2,3,4,5],
  [5,4,3,2,1],
  [3,3,3,3,3],
  [1,1,1,1,1]]
y=[0,1,0,1]
selector=SelectKBest(score_func=f_classif,k=3)#选择3个特征,指标使用的是方差分析F值
selector.fit(x,y)
selector.scores_ #每一个特征的得分
selector.pvalues_
selector.get_support(True) #如果为true,则返回被选出的特征下标,如果选择False,则
              #返回的是一个布尔值组成的数组,该数组只是那些特征被选择
selector.transform(x)
#包裹时特征选择
from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC #选择svm作为评定算法
from sklearn.datasets import load_iris #加载数据集
iris=load_iris()
x=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2) #选择2个特征
selector.fit(x,y)
selector.n_features_  #给出被选出的特征的数量
selector.support_   #给出了被选择特征的mask
selector.ranking_   #特征排名,被选出特征的排名为1
#注意:特征提取对于预测性能的提升没有必然的联系,接下来进行比较;
from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC
from sklearn import cross_validation
from sklearn.datasets import load_iris
#加载数据
iris=load_iris()
X=iris.data
y=iris.target
#特征提取
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2)
X_t=selector.fit_transform(X,y)
#切分测试集与验证集
x_train,x_test,y_train,y_test=cross_validation.train_test_split(X,y,
                  test_size=0.25,random_state=0,stratify=y)
x_train_t,x_test_t,y_train_t,y_test_t=cross_validation.train_test_split(X_t,y,
                  test_size=0.25,random_state=0,stratify=y)
clf=LinearSVC()
clf_t=LinearSVC()
clf.fit(x_train,y_train)
clf_t.fit(x_train_t,y_train_t)
print('origin dataset test score:',clf.score(x_test,y_test))
#origin dataset test score: 0.973684210526
print('selected Dataset:test score:',clf_t.score(x_test_t,y_test_t))
#selected Dataset:test score: 0.947368421053
import numpy as np
from sklearn.feature_selection import RFECV
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
iris=load_iris()
x=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFECV(estimator=estimator,cv=3)
selector.fit(x,y)
selector.n_features_
selector.support_
selector.ranking_
selector.grid_scores_
#嵌入式特征选择
import numpy as np
from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
digits=load_digits()
x=digits.data
y=digits.target
estimator=LinearSVC(penalty='l1',dual=False)
selector=SelectFromModel(estimator=estimator,threshold='mean')
selector.fit(x,y)
selector.transform(x)
selector.threshold_
selector.get_support(indices=True)
#scikitlearn提供了Pipeline来讲多个学习器组成流水线,通常流水线的形式为:将数据标准化,
#--》特征提取的学习器————》执行预测的学习器,除了最后一个学习器之后,
#前面的所有学习器必须提供transform方法,该方法用于数据转化(如归一化、正则化、
#以及特征提取
#学习器流水线(pipeline)
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
from sklearn import cross_validation
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
def test_Pipeline(data):
  x_train,x_test,y_train,y_test=data
  steps=[('linear_svm',LinearSVC(C=1,penalty='l1',dual=False)),
      ('logisticregression',LogisticRegression(C=1))]
  pipeline=Pipeline(steps)
  pipeline.fit(x_train,y_train)
  print('named steps',pipeline.named_steps)
  print('pipeline score',pipeline.score(x_test,y_test))
if __name__=='__main__':
  data=load_digits()
  x=data.data
  y=data.target
  test_Pipeline(cross_validation.train_test_split(x,y,test_size=0.25,
                  random_state=0,stratify=y))

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
详解在Python程序中使用Cookie的教程
Apr 30 Python
常见python正则用法的简单实例
Jun 21 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
python tkinter界面居中显示的方法
Oct 11 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
Python WSGI 规范简介
Apr 11 Python
Python django中如何使用restful框架
Jun 23 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 #Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 #Python
python 实现语音聊天机器人的示例代码
Dec 02 #Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 #Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 #Python
PyCharm配置mongo插件的方法
Nov 30 #Python
对python自动生成接口测试的示例讲解
Nov 30 #Python
You might like
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
php一些公用函数的集合
2008/03/27 PHP
php 生成随机验证码图片代码
2010/02/08 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
php创建session的方法实例详解
2015/01/27 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
在html页面上拖放移动标签
2010/01/08 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
python操作toml文件的示例代码
2020/11/27 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
社区两委对照检查材料
2014/08/23 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js