特征工程

时间: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