特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
sklearn.feature_selection
sklearn.feature_selection.VarianceThreshold
代码示例:方差过滤
from sklearn.feature_selection import VarianceThreshold
def var_fil(X):
'''
删除低方差特征
:param X:
:return:None
'''
print(X)
#实例化
var_ = VarianceThreshold(threshold=0)
#转换数据
data = var_.fit_transform(X)
print(data)
return None
if __name__ == '__main__':
X = [[1,2,3,5],[1,5,9,5],[1,3,5,5]]
var_fil(X)
[[1, 2, 3, 5], [1, 5, 9, 5], [1, 3, 5, 5]]
[[2 3]
[5 9]
[3 5]]
sklearn. decomposition
本质:PCA是一种在尽可能多的保留原始数据方差的条件下,分析、简化数据集的技术。
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量。
高维度数据容易出现的问题:特征之间通常是线性相关的。
代码示例:PCA降维
from sklearn.decomposition import PCA
def pca_fea(X):
'''
降维
:return:None
'''
print(X)
#实例化
pca_de = PCA(n_components=0.9)
#转换数据
data = pca_de.fit_transform(X)
print(data)
if __name__ == '__main__':
X = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]
pca_fea(X)
代码示例:生成user_id对aisle的交叉表,发现表是很稀疏的,且部分属性高度相关,因此可以用pca降维。
代码示例:
import pandas as pd
from sklearn.decomposition import PCA
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
aisles = pd.read_csv('./aisles.csv')
prior = pd.read_csv('./order_products__prior.csv')
orders = pd.read_csv('./orders.csv')
products = pd.read_csv('./products.csv')
mg1 = pd.merge(aisles, products, left_on='aisle_id',right_on='aisle_id')
mg2 = pd.merge(mg1, prior, left_on='product_id', right_on='product_id')
mg3 = pd.merge(mg2, orders, left_on='order_id', right_on='order_id')
cross = pd.crosstab(mg3['user_id'], mg3['aisle'])
print(cross.head(5))
print(cross.shape)
pca = PCA(n_components=0.9)
pca_cross = pca.fit_transform(cross)
print(pca_cross.shape)
corr = cross.corr()
f, ax= plt.subplots(figsize = (14, 10))
sns.heatmap(corr,cmap='RdBu', linewidths = 0.05, ax = ax)
ax.set_title('Correlation between features')
plt.show()
f.savefig('sns_style_origin.jpg', dpi=100, bbox_inches='tight')