特征工程
时间:2021-09-01
本文章向大家介绍特征工程,主要包括特征工程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
特征工程
为什么需要特征工程
1、缺失值、重复值、异常值的清洗,样本更纯净
2、将非数字特征,转换为数字特征
3、特征工程分为三部分:特征抽取,数据特征的预处理,特征选择
特征抽取
非数字特征,转换为数字特征
- 无序分类变量
- 有序分类变量
属性编码
#先引入DictVectorizer包。
from sklearn.feature_extraction import DictVectorizer
alist = [
{'city':'BeiJing','temp':33},
{'city':'GZ','temp':42},
{'city':'SH','temp':40}
]
#实例化一个d为DictVectorizer,然后sparse为True意思是返回字典,False返回矩阵
d = DictVectorizer(sparse=True)
result = d.fit_transform(alist)
print(result)
独热码
import pandas as pd
df = pd.DataFrame([
['green', 'M', 20, 'class1'],
['red', 'L', 21, 'class2'],
['blue', 'XL',30, 'class3']])
df.columns = ['color', 'size', 'weight', 'class label']
#独热码编码get_dummies
one_hot_color = pd.get_dummies(df['color'])
#先横向连接独热码,然后再删除color那一列
pd.concat((df,one_hot_color),axis=1).drop(labels='color',axis=1)
英文分词,编码:
from sklearn.feature_extraction.text import CountVectorizer
c = CountVectorizer()
alist = [
'left is is short,i love python',
'left is too long,i hate python'
]
result = c.fit_transform(alist)
#输出特征名
print(c.get_feature_names())
#对应的特征名的数量作为一个向量,充当特征
print(result.toarray())
中文分词:
调用jieba包,进行中文分词。
jieba.cut 注意text是字符串,不是列表,不是元组,然后记得转list
import jieba
text = '人生苦短,我用Python,人生漫长,不用Python'
result = list(jieba.cut(text))
print(result)
c = CountVectorizer()
data1 = '在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格'
data2 = '特征抽取后我们就可以获取对应的数值型的样本数据啦,然后就可以进行数据处理了'
r1 = list(jieba.cut(data1))
r2 = list(jieba.cut(data2))
s_r1 = ' '.join(r1)
s_r2 = ' '.join(r2)
all_data = [s_r1,s_r2]
result = c.fit_transform(all_data)
print(c.get_feature_names())
print(result.toarray())
特征的预处理
归一化
x1 = 最大值 - 最小值 ÷ 插值
x2 = x1 * (最大值-最小值) + 最小值
from sklearn.preprocessing import MinMaxScaler
x = [[1000,10,1],
[2000,11,2],
[4000,100,20]]
mm = MinMaxScaler()
result = mm.fit_transform(x)
print(result)
#最后输出
# [[0. 0. 0. ]
# [0.33333333 0.01111111 0.05263158]
# [1. 1. 1. ]]
标准化
x1 = (x - 平均值)÷ 方差
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
x = [[1000,10,1],
[2000,11,2],
[4000,100,20]]
result = ss.fit_transform(x)
print(result)
# [[-1.06904497 -0.71892408 -0.76360355]
# [-0.26726124 -0.69522328 -0.64906302]
# [ 1.33630621 1.41414736 1.41266656]]
特征选择
Filter过滤式(方差过滤)
把方差小于多少的某列特征直接筛掉 threshold
import numpy as np
x = np.random.randint(10,50,size=(5,6))
midian = np.median(x.var(axis=0)) #对于每一列都求了一个方差,然后求方差的中位数
v = VarianceThreshold(threshold=midian) #把中位数作为threshold,筛掉小于多少的某列特征
result = v.fit_transform(x)
print(result)
PCA降维(主成分分析)
是一种分析,简化数据集的技术,也是【矩阵分解算法】的核心算法
from sklearn.decomposition import PCA
#将数据分解为较低维度的空间
#n_components可以为小数(保留特征的百分比),整数(减少到的特征数量)
pca = PCA(n_components=3)
pca.fit_transform([[0,2,4,3],[0,3,7,3],[0,9,6,3]])
原文地址:https://www.cnblogs.com/ziwenblog/p/15214184.html
- Python学习笔记(3):数据集操作-列的统一操作
- Python学习笔记(4):自定义时间类
- Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录
- 微信小程序开发:设置消息推送
- Mysql备份系列(1)--备份方案总结性梳理
- ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)
- 顶象全场景IoT安全方案解决物联网两大难题
- 诡异的【session丢失】和【<img src="">标签】
- TensorFlow核心使用要点
- “搜一搜”直达生活服务 微信连接移动消费新场景
- Linux服务器安全登录设置记录
- Linux系统下的ssh使用(依据个人经验总结)
- 从MapX到MapXtreme2004[4]-标注AutoLabel
- Linux下锁定账号,禁止登录系统的设置总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PostgreSQL 为什么接受大量连接到数据库需要连接池
- 一站式的开源持续测试平台---MeterSphere
- 《RabbitMQ》如何保证消息的可靠性
- Ruby 和 Java 的基础语法比较
- 聊聊面试-NoClassDefFoundError 和 ClassNotFoundException 区别
- 聊聊面试-int和Integer的区别
- 记一次Linux修改MySQL配置不生效的问题
- VBA解析复合文档03——解析扇区链表
- C++核心准则E.17:不要试图在所有函数中捕捉所有异常
- 《图解算法》第1章 算法简介
- 自动化篇 | 这些自动化场景,批处理脚本完全可以取代 Python!
- 《RabbitMQ》如何保证消息不被重复消费
- 算法篇:树之翻转树
- 每日一题 | 约瑟夫问题
- 编码的浪漫:完美序列化的官方评测