机器学习中对于数据的一些前期处理

1.StandardScaler()

StandardScaler(copy=True, with_mean=True, with_std=True)
计算训练集的平均值和标准差,以便测试数据集使用相同的变换。
样本x的标准分数计算表达式z = (x - u) / s
其中u是训练样本的均值,如果with_mean=False,则为0
其中s是训练样本的标准偏差,如果with_std=False,则为1

对于一般正态分布
X X X~ N ( μ , σ 2 ) N(\mu,\sigma^2) Nμ,σ2
对一般正态分布中所有值经过 x = x − μ σ x=\frac{x-\mu}{\sigma} x=σxμ处理之后,X服从标准正态分布,即新分布的均值为0,标准差为1,方差为 1 2 1^2 12

标准分数函数通过和上面一样的方法删除平均值和缩放到单位方差来标准化特征

使用说明

import pandas as pd
from sklearn.preprocessing import StandardScaler
# 标准化
scaler = StandardScaler().fit(x_train)
x_train = pd.DataFrame(scaler.transform(x_train))
x_test = pd.DataFrame(scaler.transform(x_test))

fit_transfrom
相当于是下面代码中fit+transfrom的两行代码

2.CountVectorizer()

CountVectorizer(analyzer='word',stop_words='the')
属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。
stop_words是停用词会在文本特性抽提中以黑名单的形式过滤掉,用以提高模型的性能表现。

使用说明

from sklearn.feature_extraction.text import CountVectorizer

texts = ["dog cat fish pig the", "dog cat cat the", "fish bird pig the",
         'bird the']  # “dog cat fish” 为输入列表元素,即代表一个文章的字符串
cv = CountVectorizer(analyzer='word', stop_words='english')  # 创建词袋数据结构
cv_fit = cv.fit_transform(texts)
# 上述代码等价于下面两行
# cv.fit(texts)
# cv_fit=cv.transform(texts)

print(cv.get_feature_names())
# ['bird', 'cat', 'dog', 'fish', 'pig']
print(cv.vocabulary_)
# {'dog': 2, 'cat': 1, 'fish': 3, 'pig': 4, 'bird': 0}
print(cv_fit)
# (0,2) 1   第0个列表元素,**词典中索引为3的元素**, 词频
print(cv_fit.toarray())  # .toarray() 是将结果转化为稀疏矩阵矩阵的表示方式
# 没一段话中包含词语的频数
# [[0 1 1 1 1]         
#  [0 2 1 0 0]
#  [1 0 0 1 1]
#  [1 0 0 0 0]]

print(cv_fit.toarray().sum(axis=0))  # 每个词在所有文档中的词频
# [2 3 2 2 2]

stop_words='english
stop_words设置为english的时候,它会自动按照英文状态下来过滤掉英文中的黑名单词汇,当然可以自己写过滤列表,注意参数格式用的是list。

3.TfidfVectorize()

TfidfVectorize()
TfidfVectorize除了考量单词出现的频数之外,同时关注包含这个词汇的文本条数的倒数。比如像英文中的’the’,在每个文本中都会出现,利用TfidfVectorize可以有效提取文本特征,提高模型效率。

使用说明
from sklearn.feature_extraction.text import TfidfVectorizer
texts = ["dog cat fish pig the", "dog cat cat the", "fish bird pig the",
         'bird the']  # “dog cat fish” 为输入列表元素,即代表一个文章的字符串
cv = TfidfVectorizer(analyzer='word', stop_words=['the'])  # 创建词袋数据结构
cv_fit = cv.fit_transform(texts)
# 上述代码等价于下面两行
# cv.fit(texts)
# cv_fit=cv.transform(texts)

print(cv.get_feature_names())
# ['bird', 'cat', 'dog', 'fish', 'pig']
print(cv.vocabulary_)
# {'dog': 2, 'cat': 1, 'fish': 3, 'pig': 4, 'bird': 0}
print(cv_fit)
# (0,4) 0.5   
print(cv_fit.toarray())  # .toarray() 是将结果转化为稀疏矩阵矩阵的表示方式
# [[0.         0.5        0.5        0.5        0.5       ]
#  [0.         0.89442719 0.4472136  0.         0.        ]
#  [0.57735027 0.         0.         0.57735027 0.57735027]
#  [1.         0.         0.         0.         0.        ]]

4.DictVectorizer()

DictVectorizer()
DictVectorizer的处理对象是符号化(非数字化)的但是具有一定结构的特征数据,如字典等,将符号转成数字0/1表示。

使用说明

#定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)
measurements = [{'city':'Beijing','temperature':33.},{'city':'London','temperature':12.},{'city':'San Fransisco','temperature':18.}]
#从sklearn.feature_extraction导入DictVectorizer
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
#输出转化后的特征矩阵
print(vec.fit_transform(measurements).toarray())
# [[ 1.  0.  0. 33.]
#  [ 0.  1.  0. 12.]
#  [ 0.  0.  1. 18.]]
#输出各个维度的特征含义
print(vec.get_feature_names())
# ['city=Beijing', 'city=London', 'city=San Fransisco', 'temperature']

这里需要注意的是利用DictVectorizer过程中,传入的参数格式是包含字典的数组,我们通常利用pandas做数据处理,这类需要转化数据格式用到to_dict(orient='records' )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值