黑马程序员技术交流社区
标题: 【上海校区】机器学习之数据的特征处理-sklearn [打印本页]
作者: 风雨阑珊处 时间: 2018-4-27 18:40
标题: 【上海校区】机器学习之数据的特征处理-sklearn
本帖最后由 风雨阑珊处 于 2018-4-27 19:26 编辑
数据的特征处理两大类处理方法通过特定的统计方法(数学方法)将数据转换成算法要求的数据
- 归一化: 如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
- 标准化: 如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小.
1.特征处理的方法[Python] 纯文本查看 复制代码
1. 数值型数据: (标准缩放)
* 归一化
* 标准化
* 缺失值
2. 类别型数据: one-hot编码
3. 时间类型: 时间的切分
2.sklearn特征处理API
2.1归一化
* API: sklearn.preprocessing
* 归一化特点: 通过对原始数据变换把数据映射到(默认为[0, 1])之间
* 归一化目的: 防止某一特征在数量的大小影响到最终的预测结果
* 注: 如果样本异常点较多,不合适使用归一化
* 注: 在特定场景下最大值最小值是变化的,另外,最大值与最小值非常受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景
* 注: 作用于每一列,max为一列的最大值,min为一列的最小值,那么x"为最终结果, mx,mi分别为指定区间值默认mx为1, mi为0
归一化code
[Python] 纯文本查看 复制代码
from sklearn.preprocessing import MinMaxScaler
def mm_scaler():
"""
归一化处理
:return: None
"""
mm = MinMaxScaler(feature_range=(0, 1)) # 实例化MinMaxScaler
# 通过fit_transform()转换
data = mm.fit_transform(
[[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]])
print(data)
return None
2.2 标准化 (平均值变化小,结果最终不会受到较大影响)[AppleScript] 纯文本查看 复制代码
* 标准化API: sklearn.preprocessing.StandardScaler
* 特点: 通过对原始数据进行变换把数据变换到均值为0, 方差为1范围内
* 作用于每一列,mean为平均值, std为标准差(考量数据的稳定性)
* 在已有样本足够多的情况下比较稳定, 适合现代创造大数据场景
标准化code
[Python] 纯文本查看 复制代码
from sklearn.preprocessing import StandardScaler
def standar():
"""
标准化处理
:return None
"""
std = StandardScaler()
data = std.fit_transform(
[[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]])
print(data)
2.3 特征降维
[AppleScript] 纯文本查看 复制代码
1. 特征选择 (特征数量不多的时候) sklearn.feature_selection
2. 主成分分析 (特征数量较大, 百计) sklearn.decomposition
3. 线性判别分析LDA
2.3.1 特征选择 sklearn.feature_selection
[AppleScript] 纯文本查看 复制代码
特征选择就是单纯的从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值, 也可以不改变值, 但是选择后的特征未读数肯定比选择前小, 比较完美之选择了其中的一部分特征.
主要方法:Filter(过滤式): VarianceThreshold(threshold=0) (方差为0,所有的数据都一样,方差越大,数据离散程度越大, )
Embedded(嵌入式): 正则化, 决策树
Wrapper(包裹试)
code:
[Python] 纯文本查看 复制代码
from sklearn.feature_selection import VarianceThreshold
def var():
"""
删除低方差特征
:return: None
"""
# variance = VarianceThreshold(threshold=0) # 阀值
variance = VarianceThreshold()
data = variance.fit_transform(
[[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
)
print(data)
return None
2.3.2 主成分分析(PCA) sklearn.decomposition
[AppleScript] 纯文本查看 复制代码
使用场景: 特征的数量: 以百计的特征数量以上
本质: PCA是一种分析, 简化数据的技术
目的: 是数据维数压缩, 静看降低原数据维数(复杂度), 损失少量信息.
作用: 可以削减回归分析或者聚类分析中特征的数量
特征之间通常是*线性相关*的
code:
[Python] 纯文本查看 复制代码
from sklearn.decomposition import PCA
def pca():
"""
对数据进行主成分分析
:return: None
"""
# pc = PCA(n_components=0.9) # 保留特征信息:整数:保留N个, 小数: 保留百分比
pc = PCA(n_components=0.9)
data = pc.fit_transform()
print(data)
return None
主成分分析案列
探究: 用户对物品类别的喜好细分降维
数据:
+ products.csv 商品信息
+ order_products_prior.csv 订单与商品信息
+ orders.csv 用户的订单信息
+ aisles.csv 商品所属具体物品类别
[Python] 纯文本查看 复制代码
from sklearn.decomposition import PCA
import pandas as pd
## 商品表的合并, 从而进行分析
prior = pd.read_csv('./order_products__prior.csv')
products = pd.read_csv('./products.csv')
order = pd.read_csv('./orders.csv')
aisles = pd.read_csv('./aisles.csv')
## 合并表
mg = pd.merge(prior, products, on=['product_id', 'product_id'])
mg = pd.merge(mg, order, on=['order_id', 'order_id'])
mt = pd.merge(mg, aisles, on=['aisle_id', 'aisle_id'])
# 建立交叉表, 分析列之间的关系
table = pd.crosstab(mt['user_id'], mt['aisle'])
## 打印前10行
table.head(10)
pca = PCA(n_components=0.9)
data = pca.fit_transform(table)
print(data)
print(data.shape)
作者: 吴琼老师 时间: 2018-7-5 16:50
作者: 不二晨 时间: 2018-7-10 14:53
奈斯
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |