文章目录
关于数据特征的简介 数据特征的抽取及处理可见文章:
数据的特征工程 入门详细教程(一):简介 数据特征的抽取及处理
特征选择
- 特征选择原因
- 冗余:部分特征的相关度高,容易消耗计算性能
- 噪声:部分特征对预测结果有负影响
特征选择是什么
- 特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
- 主要方法:
- Filter(过滤式): VarianceThreshold
- Embedded(嵌入式):正则化、决策树
- Wrapper(包裹式)
sklearn 特征选择API
sklearn.feature_selection.VarianceThreshold
语法
VarianceThreshold(threshold = 0.0)
# 删除所有低方差特征
Variance.fit_transform(X,y)
# X:numpy array格式的数据[n_samples,n_features]
# 返回值:训练集差异低于threshold的特征将被删除。
# 默认值是保留所有非零方差特征,即删除所有样本
# 中具有相同值的特征。
示例:
from sklearn.preprocessing import MinMaxScaler, StandardScaler
def stand():
"""
标准化缩放
:return:
"""
std = StandardScaler()
data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
return None
if __name__ == "__main__":
var()
结果为:
[[0] [4] [1]]
其他特征选择方法
- 神经网络
sklearn降维API
sklearn. decomposition
PCA是什么
- PCA的本质是一种分析、简化数据集的技术
- 目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
- 作用:可以削减回归分析或者聚类分析中特征的数量
高维度数据容易出现的问题
- 特征之间通常是线性相关的
- 如果将上述二维坐标的点,投影到X轴或者Y轴时,容易出现点的覆盖,造成数据缺失,所以应该投射在数据损失少的平面上
PCA语法
PCA(n_components=None)
#将数据分解为较低维数空间
PCA.fit_transform(X)
# X:numpy array格式的数据[n_samples,n_features]
# 返回值:转换后指定维度的array
示例:
from sklearn.decomposition import PCA
def pca():
"""
主成分分析进行特征降维
:return: None
"""
pca = PCA(n_components=0.9) # 选定方差低于0.9的删除
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None
if __name__ == "__main__":
pca()
结果为
[[-3.13587302e-16 3.82970843e+00]
[-5.74456265e+00 -1.91485422e+00]
[ 5.74456265e+00 -1.91485422e+00]]
实例探究 用户对物品类别的喜好细分降维
-
数据: - products.csv 商品信息 - order_products__prior.csv 订单与商品信息 - orders.csv 用户的订单信息 - aisles.csv 商品所属具体物品类别
- 测试环境为 jupyter notebook
- (其中涉及pandas的基础操作可见:Pandas入门详细教程(一))
import pandas as pd
from sklearn.decomposition import PCA
# 读取四张表的数据
prior = pd.read_csv("../order_products__prior.csv")
products = pd.read_csv("../products.csv")
orders = 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, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])
mt.head(10)
结果为
# 交叉表
cross = pd.crosstab(mt['user_id'], mt['aisle'])
cross.head(10)
特征选择与降维的比较?
- 降维本质上是从一个维度空间映射到另一个维度空间,特征的多少别没有减少,当然在映射的过程中特征值也会相应的变化。
- 特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后不改变值,但是选择后的特征维数肯定比选择前小,毕竟只选择了其中的一部分特征。