机器学习二之特征工程

特征工程

更好的特征意味着更好的结果
更好的特征意味着更简单的模型
更好的特征意味这更强的鲁棒性

特征预处理

单个特征:
归一化、标准化、缺失值处理

多个特征:
降维:PCA降维

分类特征变量的提取

字典特征提取

from sklearn.feature_extraction import DictVectorizer
#字典特征提取
data = [
    {'yun':'厚','shidu':50},
    {'yun': '厚', 'shidu': 40},
    {'yun': '薄', 'shidu': 60},
    {'yun':'中等', 'shidu': 50},
]
#创建一个实例对象,将来使用实例进行字典特征的提取
#如果DictVectorizer(),没有进行任何设置使用默认值,转换出来的结果是一个稀疏矩阵,如果设置sparse=False代表直接转成数组
dv = DictVectorizer()
ret = dv.fit_transform(data)
#先打印特征的name
print(dv.get_feature_names())
#稀疏矩阵可以使用toarray的方式转化成数组
print(ret.toarray())
#print(dv.inverse_transform(ret))#转化成原始数据

结果如下:
在这里插入图片描述

文本特征提取

在这里插入图片描述

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
#文本特征提取(整篇文章)
context = ["life is short,i like python","life is too long,i dislike python" ,"yes,i like python" ]
#统计词是否出现,返回矩阵
cv = CountVectorizer()
data = cv.fit_transform(context)
print(cv.get_feature_names())
print(data.toarray())
#词出现的概率
tfv = TfidfVectorizer()
data = tfv.fit_transform(context)
print(tfv.get_feature_names())
print(data.toarray())

注意点:
1、stop_words表示的是停用词(写在创建对象的时候),english表示使用英文停用词,如果需要自己指定,我们可以使用列表的方式写入
2、一般情况下,我们直接使用sparse矩阵,因为语料库非常庞大,
3、fit_transform填写可迭代对象

中文分词

jieba,SnowNLP,NLPIR

数据的特征预处理

在这里插入图片描述

中文分词

jieba,SnowNLP,NLPIR

词形归一化处理

一、词形归一化处理

from nltk.stem.porter import PorterStemmer

ps = PorterStemmer()
print(ps.stem('like'))
print(ps.stem('dislike'))

二、归一化处理

在特征(维度)较多的时候,可以预防某一维或者几维对于数据的影响过大。例如身高170,体重50kg,所以将不同来源的数据归类到同一个参考区间下
(1)对于比较常见的方法,是使用线性转换将数据映射到[0,1]之间的区间,变换的函数是
在这里插入图片描述
min:代表的是整个数据中的最小值

max:代表的是整个数据中的最大值

min和max的值,容易收到异常点的影响,并且在数据流的情况下,最大值和最小值是不断变化的

适用情况:适用于精确的小数据场景下

def minmax(data_old):
    print('########原始数据#########')
    print(data_old)

    minmax = MinMaxScaler()

    data = minmax.fit_transform(data_old)
    print('######转换之后的数据######')
    print(data)

三、标准化处理

经过处理之后,数据的均值为0,标准差1,处理函数:
在这里插入图片描述
适用于比较稳定,嘈杂的数据场景

μ代表的是样本的平均值

σ 代表样本的标准差

将数据处理成符合正态分布的数据

def standar(dataset):
    ss = StandardScaler()
    data_new = ss.fit_transform(dataset)
    return data_new

三、 异常缺失值处理

 def handler_nan():
    data = [[1,3],[np.nan,7],[9,11]]
    im = Imputer()
    data_new = im.fit_transform(data)
    print(data_new)    

注意点:
1、空值填充三种:均值,中位数,众数
2、axis=0代表的是列,axis=1 代表行

四、降维

主成分分析:PCA
PCA致力解决的问题:

第一,降维可以缓解维度灾难问题。

第二,降维可以在压缩数据的同时让信息损失最小化。

第三,理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解。

数据的降维,必然带来数据的损失

在降维之前保证每一个维度的重要性是等同的

def __init__(self, n_components=None, copy=True, whiten=False,
             svd_solver='auto', tol=0.0, iterated_power='auto',
             random_state=None):
             
n_components:指定的是降维之后存在的特征的维度
whiten:白化,对降维之后的每一个特征进行归一化处理

def pca():
    data = [[1,2,3,4],[3,4,5,6],[6,7,8,1]]
    print('降维之前')
    print(data)
    pa = PCA(n_components=2)
    data_new = pa.fit_transform(data)
    print('#降维之后')
    print(data_new)

注意点:
1、如果没有指定降维的个数的化,在原始的基础上,降下一维
2、降维不是指的数组的维度个数,而是说明的特征值的个数

特征选择

原因:
1、冗余:特征的相关度很高,容易消耗计算性能
2、噪声:部分特征对于最终的预测结果有负影响

特征选择方法:
1、filter过滤式VarianceThreshold(删除低方差数据)
2、emdedded 嵌入式:正则化、决策树
3、wrapper 包裹式

特征选择的功能:
减少特征的数量,降维,减少过拟合

def vtd():
    data = [[1, 0, 3, 4], [3, 4, 5, 0], [6, 7, 0, 1]]
    print(data)
    vt = VarianceThreshold(1)
    ret = vt.fit_transform(data)
    print(ret)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值